From 849d7c39f14fd48bf205b788df49f5adad27fb53 Mon Sep 17 00:00:00 2001 From: jmalkin Date: Tue, 2 Apr 2024 05:52:18 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20apache/d?= =?UTF-8?q?atasketches-java@ba29502062bbc543f819d9bc7a23829515bf2ac9=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/5.0.X/allclasses-index.html | 1319 ++ docs/5.0.X/allclasses.html | 213 + docs/5.0.X/allpackages-index.html | 298 + docs/5.0.X/constant-values.html | 472 + docs/5.0.X/deprecated-list.html | 249 + docs/5.0.X/element-list | 21 + docs/5.0.X/help-doc.html | 281 + docs/5.0.X/index-all.html | 7425 ++++++++++ docs/5.0.X/index.html | 310 + docs/5.0.X/jquery-ui.overrides.css | 35 + docs/5.0.X/jquery/external/jquery/jquery.js | 10872 +++++++++++++++ docs/5.0.X/jquery/jquery-3.6.1.min.js | 2 + docs/5.0.X/jquery/jquery-ui.min.css | 6 + docs/5.0.X/jquery/jquery-ui.min.js | 6 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + docs/5.0.X/jquery/jszip/dist/jszip.js | 11370 ++++++++++++++++ docs/5.0.X/jquery/jszip/dist/jszip.min.js | 13 + docs/5.0.X/legal/ADDITIONAL_LICENSE_INFO | 37 + docs/5.0.X/legal/ASSEMBLY_EXCEPTION | 27 + docs/5.0.X/legal/LICENSE | 347 + docs/5.0.X/legal/jquery.md | 72 + docs/5.0.X/legal/jqueryUI.md | 49 + docs/5.0.X/legal/jszip.md | 653 + docs/5.0.X/legal/pako.md | 45 + docs/5.0.X/member-search-index.js | 1 + docs/5.0.X/member-search-index.zip | Bin 0 -> 16331 bytes .../common/ArrayOfBooleansSerDe.html | 577 + .../common/ArrayOfDoublesSerDe.html | 553 + .../common/ArrayOfItemsSerDe.html | 545 + .../common/ArrayOfLongsSerDe.html | 553 + .../common/ArrayOfNumbersSerDe.html | 561 + .../common/ArrayOfStringsSerDe.html | 540 + .../common/ArrayOfUtf16StringsSerDe.html | 538 + .../common/BoundsOnBinomialProportions.html | 473 + .../common/BoundsOnRatiosInSampledSets.html | 404 + .../datasketches/common/ByteArrayUtil.html | 921 ++ .../apache/datasketches/common/Family.html | 846 ++ .../datasketches/common/ResizeFactor.html | 489 + .../common/SketchesArgumentException.html | 317 + .../common/SketchesException.html | 344 + .../common/SketchesReadOnlyException.html | 338 + .../common/SketchesStateException.html | 317 + .../common/SuppressFBWarnings.html | 290 + .../org/apache/datasketches/common/Util.html | 1680 +++ .../class-use/ArrayOfBooleansSerDe.html | 149 + .../common/class-use/ArrayOfDoublesSerDe.html | 149 + .../common/class-use/ArrayOfItemsSerDe.html | 549 + .../common/class-use/ArrayOfLongsSerDe.html | 149 + .../common/class-use/ArrayOfNumbersSerDe.html | 149 + .../common/class-use/ArrayOfStringsSerDe.html | 149 + .../class-use/ArrayOfUtf16StringsSerDe.html | 149 + .../BoundsOnBinomialProportions.html | 149 + .../BoundsOnRatiosInSampledSets.html | 149 + .../common/class-use/ByteArrayUtil.html | 149 + .../datasketches/common/class-use/Family.html | 361 + .../common/class-use/ResizeFactor.html | 439 + .../class-use/SketchesArgumentException.html | 149 + .../common/class-use/SketchesException.html | 211 + .../class-use/SketchesReadOnlyException.html | 149 + .../class-use/SketchesStateException.html | 149 + .../common/class-use/SuppressFBWarnings.html | 460 + .../datasketches/common/class-use/Util.html | 149 + .../datasketches/common/package-summary.html | 319 + .../datasketches/common/package-tree.html | 217 + .../datasketches/common/package-use.html | 498 + .../cpc/CompressionCharacterization.html | 331 + .../apache/datasketches/cpc/CpcSketch.html | 1000 ++ .../org/apache/datasketches/cpc/CpcUnion.html | 430 + .../apache/datasketches/cpc/CpcWrapper.html | 439 + .../datasketches/cpc/MergingValidation.html | 337 + .../cpc/QuickMergingValidation.html | 334 + .../datasketches/cpc/StreamingValidation.html | 334 + .../org/apache/datasketches/cpc/TestUtil.html | 273 + .../CompressionCharacterization.html | 149 + .../datasketches/cpc/class-use/CpcSketch.html | 244 + .../datasketches/cpc/class-use/CpcUnion.html | 149 + .../cpc/class-use/CpcWrapper.html | 149 + .../cpc/class-use/MergingValidation.html | 149 + .../cpc/class-use/QuickMergingValidation.html | 149 + .../cpc/class-use/StreamingValidation.html | 149 + .../datasketches/cpc/class-use/TestUtil.html | 149 + .../datasketches/cpc/package-summary.html | 223 + .../apache/datasketches/cpc/package-tree.html | 171 + .../apache/datasketches/cpc/package-use.html | 192 + .../apache/datasketches/fdt/FdtSketch.html | 830 ++ .../org/apache/datasketches/fdt/Group.html | 566 + .../datasketches/fdt/PostProcessor.html | 365 + .../datasketches/fdt/class-use/FdtSketch.html | 218 + .../datasketches/fdt/class-use/Group.html | 273 + .../fdt/class-use/PostProcessor.html | 205 + .../datasketches/fdt/package-summary.html | 187 + .../apache/datasketches/fdt/package-tree.html | 178 + .../apache/datasketches/fdt/package-use.html | 201 + .../datasketches/frequencies/ErrorType.html | 396 + .../frequencies/ItemsSketch.Row.html | 458 + .../datasketches/frequencies/ItemsSketch.html | 964 ++ .../frequencies/LongsSketch.Row.html | 454 + .../datasketches/frequencies/LongsSketch.html | 1009 ++ .../frequencies/class-use/ErrorType.html | 250 + .../class-use/ItemsSketch.Row.html | 226 + .../frequencies/class-use/ItemsSketch.html | 224 + .../class-use/LongsSketch.Row.html | 226 + .../frequencies/class-use/LongsSketch.html | 231 + .../frequencies/package-summary.html | 221 + .../frequencies/package-tree.html | 181 + .../datasketches/frequencies/package-use.html | 218 + .../apache/datasketches/hash/MurmurHash3.html | 612 + .../datasketches/hash/MurmurHash3Adaptor.html | 886 ++ .../org/apache/datasketches/hash/XxHash.html | 361 + .../hash/class-use/MurmurHash3.html | 149 + .../hash/class-use/MurmurHash3Adaptor.html | 149 + .../datasketches/hash/class-use/XxHash.html | 149 + .../datasketches/hash/package-summary.html | 195 + .../datasketches/hash/package-tree.html | 166 + .../apache/datasketches/hash/package-use.html | 149 + .../apache/datasketches/hll/HllSketch.html | 1513 ++ .../apache/datasketches/hll/TgtHllType.html | 438 + .../org/apache/datasketches/hll/Union.html | 1311 ++ .../datasketches/hll/class-use/HllSketch.html | 265 + .../hll/class-use/TgtHllType.html | 294 + .../datasketches/hll/class-use/Union.html | 212 + .../hll/doc-files/HLL_HIP_K12T20U20.png | Bin 0 -> 155358 bytes .../doc-files/HLL_UnionTime4_6_8_Java_CPP.png | Bin 0 -> 321106 bytes .../datasketches/hll/package-summary.html | 336 + .../apache/datasketches/hll/package-tree.html | 179 + .../apache/datasketches/hll/package-use.html | 201 + .../datasketches/hllmap/UniqueCountMap.html | 591 + .../hllmap/class-use/UniqueCountMap.html | 149 + .../datasketches/hllmap/package-summary.html | 192 + .../datasketches/hllmap/package-tree.html | 164 + .../datasketches/hllmap/package-use.html | 149 + .../datasketches/kll/KllDoublesSketch.html | 1067 ++ .../kll/KllDoublesSketchIterator.html | 322 + .../kll/KllDoublesSketchSortedView.html | 555 + .../datasketches/kll/KllFloatsSketch.html | 1067 ++ .../kll/KllFloatsSketchIterator.html | 322 + .../kll/KllFloatsSketchSortedView.html | 555 + .../datasketches/kll/KllItemsSketch.html | 1073 ++ .../kll/KllItemsSketchIterator.html | 322 + .../kll/KllItemsSketchSortedView.html | 699 + .../kll/KllSketch.SketchStructure.html | 454 + .../kll/KllSketch.SketchType.html | 425 + .../apache/datasketches/kll/KllSketch.html | 816 ++ .../datasketches/kll/KllSketchIterator.html | 440 + .../kll/class-use/KllDoublesSketch.html | 261 + .../class-use/KllDoublesSketchIterator.html | 149 + .../class-use/KllDoublesSketchSortedView.html | 149 + .../kll/class-use/KllFloatsSketch.html | 261 + .../class-use/KllFloatsSketchIterator.html | 149 + .../class-use/KllFloatsSketchSortedView.html | 149 + .../kll/class-use/KllItemsSketch.html | 227 + .../kll/class-use/KllItemsSketchIterator.html | 149 + .../class-use/KllItemsSketchSortedView.html | 196 + .../class-use/KllSketch.SketchStructure.html | 212 + .../kll/class-use/KllSketch.SketchType.html | 226 + .../datasketches/kll/class-use/KllSketch.html | 244 + .../kll/class-use/KllSketchIterator.html | 212 + .../datasketches/kll/package-summary.html | 259 + .../apache/datasketches/kll/package-tree.html | 195 + .../apache/datasketches/kll/package-use.html | 232 + .../apache/datasketches/package-summary.html | 159 + .../org/apache/datasketches/package-tree.html | 152 + .../org/apache/datasketches/package-use.html | 149 + .../datasketches/partitions/BoundsRule.html | 401 + .../Partitioner.PartitionBoundsRow.html | 386 + .../partitions/Partitioner.StackElement.html | 348 + .../datasketches/partitions/Partitioner.html | 410 + .../partitions/SketchFillRequest.html | 279 + .../partitions/class-use/BoundsRule.html | 238 + .../Partitioner.PartitionBoundsRow.html | 195 + .../class-use/Partitioner.StackElement.html | 191 + .../partitions/class-use/Partitioner.html | 149 + .../class-use/SketchFillRequest.html | 204 + .../partitions/package-summary.html | 215 + .../datasketches/partitions/package-tree.html | 186 + .../datasketches/partitions/package-use.html | 203 + .../datasketches/quantiles/ClassicUtil.html | 318 + .../quantiles/CompactDoublesSketch.html | 388 + .../datasketches/quantiles/DoublesSketch.html | 1573 +++ .../quantiles/DoublesSketchBuilder.html | 419 + .../quantiles/DoublesSketchIterator.html | 338 + .../quantiles/DoublesSketchSortedView.html | 555 + .../datasketches/quantiles/DoublesUnion.html | 791 ++ .../quantiles/DoublesUnionBuilder.html | 400 + .../datasketches/quantiles/ItemsSketch.html | 1494 ++ .../quantiles/ItemsSketchIterator.html | 342 + .../quantiles/ItemsSketchSortedView.html | 699 + .../datasketches/quantiles/ItemsUnion.html | 687 + .../quantiles/UpdateDoublesSketch.html | 397 + .../quantiles/class-use/ClassicUtil.html | 149 + .../class-use/CompactDoublesSketch.html | 208 + .../quantiles/class-use/DoublesSketch.html | 284 + .../class-use/DoublesSketchBuilder.html | 205 + .../class-use/DoublesSketchIterator.html | 149 + .../class-use/DoublesSketchSortedView.html | 149 + .../quantiles/class-use/DoublesUnion.html | 237 + .../class-use/DoublesUnionBuilder.html | 206 + .../quantiles/class-use/ItemsSketch.html | 264 + .../class-use/ItemsSketchIterator.html | 149 + .../class-use/ItemsSketchSortedView.html | 196 + .../quantiles/class-use/ItemsUnion.html | 225 + .../class-use/UpdateDoublesSketch.html | 242 + .../quantiles/package-summary.html | 255 + .../datasketches/quantiles/package-tree.html | 179 + .../datasketches/quantiles/package-use.html | 239 + .../quantilescommon/BinarySearch.html | 397 + .../quantilescommon/DoublesSortedView.html | 531 + .../DoublesSortedViewIterator.html | 349 + .../quantilescommon/FloatsSortedView.html | 531 + .../FloatsSortedViewIterator.html | 349 + .../GenericInequalitySearch.Inequality.html | 492 + .../GenericInequalitySearch.html | 388 + .../GenericPartitionBoundaries.html | 555 + .../quantilescommon/GenericSortedView.html | 572 + .../GenericSortedViewIterator.html | 355 + .../quantilescommon/InequalitySearch.html | 807 ++ .../quantilescommon/PartitionBoundaries.html | 375 + .../quantilescommon/PartitioningFeature.html | 332 + .../QuantileSearchCriteria.html | 415 + .../quantilescommon/QuantilesAPI.html | 810 ++ .../quantilescommon/QuantilesDoublesAPI.html | 889 ++ .../QuantilesDoublesSketchIterator.html | 284 + .../quantilescommon/QuantilesFloatsAPI.html | 889 ++ .../QuantilesFloatsSketchIterator.html | 284 + .../quantilescommon/QuantilesGenericAPI.html | 869 ++ .../QuantilesGenericSketchIterator.html | 288 + .../QuantilesSketchIterator.html | 305 + .../quantilescommon/QuantilesUtil.html | 548 + .../quantilescommon/SortedView.html | 343 + .../quantilescommon/SortedViewIterator.html | 471 + .../class-use/BinarySearch.html | 149 + .../class-use/DoublesSortedView.html | 290 + .../class-use/DoublesSortedViewIterator.html | 254 + .../class-use/FloatsSortedView.html | 289 + .../class-use/FloatsSortedViewIterator.html | 253 + .../GenericInequalitySearch.Inequality.html | 229 + .../class-use/GenericInequalitySearch.html | 149 + .../class-use/GenericPartitionBoundaries.html | 325 + .../class-use/GenericSortedView.html | 260 + .../class-use/GenericSortedViewIterator.html | 254 + .../class-use/InequalitySearch.html | 264 + .../class-use/PartitionBoundaries.html | 198 + .../class-use/PartitioningFeature.html | 282 + .../class-use/QuantileSearchCriteria.html | 995 ++ .../class-use/QuantilesAPI.html | 350 + .../class-use/QuantilesDoublesAPI.html | 243 + .../QuantilesDoublesSketchIterator.html | 290 + .../class-use/QuantilesFloatsAPI.html | 230 + .../QuantilesFloatsSketchIterator.html | 289 + .../class-use/QuantilesGenericAPI.html | 268 + .../QuantilesGenericSketchIterator.html | 290 + .../class-use/QuantilesSketchIterator.html | 333 + .../class-use/QuantilesUtil.html | 149 + .../quantilescommon/class-use/SortedView.html | 325 + .../class-use/SortedViewIterator.html | 229 + .../quantilescommon/package-summary.html | 348 + .../quantilescommon/package-tree.html | 218 + .../quantilescommon/package-use.html | 646 + .../org/apache/datasketches/req/ReqDebug.html | 450 + .../apache/datasketches/req/ReqSketch.html | 1351 ++ .../datasketches/req/ReqSketchBuilder.html | 472 + .../datasketches/req/ReqSketchIterator.html | 342 + .../datasketches/req/ReqSketchSortedView.html | 555 + .../datasketches/req/class-use/ReqDebug.html | 214 + .../datasketches/req/class-use/ReqSketch.html | 246 + .../req/class-use/ReqSketchBuilder.html | 218 + .../req/class-use/ReqSketchIterator.html | 149 + .../req/class-use/ReqSketchSortedView.html | 149 + .../datasketches/req/package-summary.html | 216 + .../apache/datasketches/req/package-tree.html | 173 + .../apache/datasketches/req/package-use.html | 203 + .../sampling/ReservoirItemsSketch.html | 663 + .../sampling/ReservoirItemsUnion.html | 547 + .../sampling/ReservoirLongsSketch.html | 584 + .../sampling/ReservoirLongsUnion.html | 478 + .../sampling/SampleSubsetSummary.html | 330 + ...arOptItemsSamples.VarOptItemsIterator.html | 306 + .../VarOptItemsSamples.WeightedSample.html | 300 + .../sampling/VarOptItemsSamples.html | 482 + .../sampling/VarOptItemsSketch.html | 634 + .../sampling/VarOptItemsUnion.html | 498 + .../class-use/ReservoirItemsSketch.html | 247 + .../class-use/ReservoirItemsUnion.html | 206 + .../class-use/ReservoirLongsSketch.html | 240 + .../class-use/ReservoirLongsUnion.html | 205 + .../class-use/SampleSubsetSummary.html | 215 + ...arOptItemsSamples.VarOptItemsIterator.html | 149 + .../VarOptItemsSamples.WeightedSample.html | 211 + .../class-use/VarOptItemsSamples.html | 198 + .../sampling/class-use/VarOptItemsSketch.html | 239 + .../sampling/class-use/VarOptItemsUnion.html | 206 + .../sampling/package-summary.html | 226 + .../datasketches/sampling/package-tree.html | 173 + .../datasketches/sampling/package-use.html | 237 + .../org/apache/datasketches/theta/AnotB.html | 595 + .../apache/datasketches/theta/BitPacking.html | 339 + .../datasketches/theta/CompactSketch.html | 606 + .../datasketches/theta/HashIterator.html | 285 + .../datasketches/theta/Intersection.html | 595 + .../datasketches/theta/JaccardSimilarity.html | 429 + .../datasketches/theta/SetOperation.html | 599 + .../theta/SetOperationBuilder.html | 752 + .../org/apache/datasketches/theta/Sketch.html | 1121 ++ .../apache/datasketches/theta/Sketches.html | 1073 ++ .../org/apache/datasketches/theta/Union.html | 762 ++ .../datasketches/theta/UpdateReturnState.html | 509 + .../datasketches/theta/UpdateSketch.html | 794 ++ .../theta/UpdateSketchBuilder.html | 1078 ++ .../datasketches/theta/class-use/AnotB.html | 199 + .../theta/class-use/BitPacking.html | 149 + .../theta/class-use/CompactSketch.html | 386 + .../theta/class-use/HashIterator.html | 199 + .../theta/class-use/Intersection.html | 222 + .../theta/class-use/JaccardSimilarity.html | 149 + .../theta/class-use/SetOperation.html | 331 + .../theta/class-use/SetOperationBuilder.html | 247 + .../datasketches/theta/class-use/Sketch.html | 602 + .../theta/class-use/Sketches.html | 149 + .../datasketches/theta/class-use/Union.html | 222 + .../theta/class-use/UpdateReturnState.html | 255 + .../theta/class-use/UpdateSketch.html | 338 + .../theta/class-use/UpdateSketchBuilder.html | 276 + .../datasketches/theta/package-summary.html | 277 + .../datasketches/theta/package-tree.html | 201 + .../datasketches/theta/package-use.html | 302 + .../thetacommon/BinomialBoundsN.html | 333 + .../BoundsOnRatiosInThetaSketchedSets.html | 351 + .../BoundsOnRatiosInTupleSketchedSets.html | 441 + .../thetacommon/HashOperations.html | 739 + .../datasketches/thetacommon/QuickSelect.html | 459 + .../SetOperationCornerCases.AnotbAction.html | 463 + .../SetOperationCornerCases.CornerCase.html | 649 + ...tOperationCornerCases.IntersectAction.html | 424 + .../SetOperationCornerCases.UnionAction.html | 502 + .../thetacommon/SetOperationCornerCases.html | 378 + .../datasketches/thetacommon/ThetaUtil.html | 565 + .../class-use/BinomialBoundsN.html | 149 + .../BoundsOnRatiosInThetaSketchedSets.html | 149 + .../BoundsOnRatiosInTupleSketchedSets.html | 149 + .../thetacommon/class-use/HashOperations.html | 149 + .../thetacommon/class-use/QuickSelect.html | 149 + .../SetOperationCornerCases.AnotbAction.html | 211 + .../SetOperationCornerCases.CornerCase.html | 211 + ...tOperationCornerCases.IntersectAction.html | 211 + .../SetOperationCornerCases.UnionAction.html | 211 + .../class-use/SetOperationCornerCases.html | 149 + .../thetacommon/class-use/ThetaUtil.html | 149 + .../thetacommon/package-summary.html | 265 + .../thetacommon/package-tree.html | 187 + .../datasketches/thetacommon/package-use.html | 199 + .../org/apache/datasketches/tuple/AnotB.html | 571 + .../datasketches/tuple/CompactSketch.html | 416 + .../datasketches/tuple/DeserializeResult.html | 346 + .../org/apache/datasketches/tuple/Filter.html | 330 + .../datasketches/tuple/Intersection.html | 485 + .../datasketches/tuple/JaccardSimilarity.html | 627 + .../SerializerDeserializer.SketchType.html | 423 + .../tuple/SerializerDeserializer.html | 390 + .../org/apache/datasketches/tuple/Sketch.html | 711 + .../apache/datasketches/tuple/Sketches.html | 374 + .../apache/datasketches/tuple/Summary.html | 293 + .../tuple/SummaryDeserializer.html | 274 + .../datasketches/tuple/SummaryFactory.html | 264 + .../tuple/SummarySetOperations.html | 312 + .../tuple/TupleSketchIterator.html | 330 + .../org/apache/datasketches/tuple/Union.html | 512 + .../datasketches/tuple/UpdatableSketch.html | 879 ++ .../tuple/UpdatableSketchBuilder.html | 418 + .../datasketches/tuple/UpdatableSummary.html | 284 + .../org/apache/datasketches/tuple/Util.html | 524 + .../tuple/adouble/DoubleSketch.html | 753 + .../tuple/adouble/DoubleSummary.Mode.html | 426 + .../tuple/adouble/DoubleSummary.html | 456 + .../adouble/DoubleSummaryDeserializer.html | 333 + .../tuple/adouble/DoubleSummaryFactory.html | 330 + .../adouble/DoubleSummarySetOperations.html | 417 + .../tuple/adouble/class-use/DoubleSketch.html | 149 + .../adouble/class-use/DoubleSummary.Mode.html | 265 + .../adouble/class-use/DoubleSummary.html | 261 + .../class-use/DoubleSummaryDeserializer.html | 149 + .../class-use/DoubleSummaryFactory.html | 149 + .../class-use/DoubleSummarySetOperations.html | 149 + .../tuple/adouble/package-summary.html | 212 + .../tuple/adouble/package-tree.html | 190 + .../tuple/adouble/package-use.html | 194 + .../tuple/aninteger/IntegerSketch.html | 753 + .../tuple/aninteger/IntegerSummary.Mode.html | 426 + .../tuple/aninteger/IntegerSummary.html | 456 + .../aninteger/IntegerSummaryDeserializer.html | 333 + .../aninteger/IntegerSummaryFactory.html | 330 + .../IntegerSummarySetOperations.html | 382 + .../aninteger/class-use/IntegerSketch.html | 149 + .../class-use/IntegerSummary.Mode.html | 258 + .../aninteger/class-use/IntegerSummary.html | 261 + .../class-use/IntegerSummaryDeserializer.html | 149 + .../class-use/IntegerSummaryFactory.html | 149 + .../IntegerSummarySetOperations.html | 149 + .../tuple/aninteger/package-summary.html | 212 + .../tuple/aninteger/package-tree.html | 190 + .../tuple/aninteger/package-use.html | 194 + .../arrayofdoubles/ArrayOfDoublesAnotB.html | 331 + .../ArrayOfDoublesAnotBImpl.html | 351 + .../ArrayOfDoublesCombiner.html | 264 + .../ArrayOfDoublesCompactSketch.html | 315 + .../ArrayOfDoublesIntersection.html | 361 + .../ArrayOfDoublesSetOperationBuilder.html | 559 + .../arrayofdoubles/ArrayOfDoublesSketch.html | 698 + .../ArrayOfDoublesSketchIterator.html | 310 + .../ArrayOfDoublesSketches.html | 637 + .../arrayofdoubles/ArrayOfDoublesUnion.html | 528 + .../ArrayOfDoublesUpdatableSketch.html | 659 + .../ArrayOfDoublesUpdatableSketchBuilder.html | 460 + .../class-use/ArrayOfDoublesAnotB.html | 214 + .../class-use/ArrayOfDoublesAnotBImpl.html | 149 + .../class-use/ArrayOfDoublesCombiner.html | 198 + .../ArrayOfDoublesCompactSketch.html | 266 + .../class-use/ArrayOfDoublesIntersection.html | 206 + .../ArrayOfDoublesSetOperationBuilder.html | 211 + .../class-use/ArrayOfDoublesSketch.html | 313 + .../ArrayOfDoublesSketchIterator.html | 195 + .../class-use/ArrayOfDoublesSketches.html | 149 + .../class-use/ArrayOfDoublesUnion.html | 295 + .../ArrayOfDoublesUpdatableSketch.html | 264 + .../ArrayOfDoublesUpdatableSketchBuilder.html | 225 + .../tuple/arrayofdoubles/package-summary.html | 252 + .../tuple/arrayofdoubles/package-tree.html | 186 + .../tuple/arrayofdoubles/package-use.html | 243 + .../datasketches/tuple/class-use/AnotB.html | 149 + .../tuple/class-use/CompactSketch.html | 293 + .../tuple/class-use/DeserializeResult.html | 297 + .../datasketches/tuple/class-use/Filter.html | 149 + .../tuple/class-use/Intersection.html | 149 + .../tuple/class-use/JaccardSimilarity.html | 149 + .../SerializerDeserializer.SketchType.html | 232 + .../class-use/SerializerDeserializer.html | 149 + .../datasketches/tuple/class-use/Sketch.html | 596 + .../tuple/class-use/Sketches.html | 149 + .../datasketches/tuple/class-use/Summary.html | 630 + .../tuple/class-use/SummaryDeserializer.html | 312 + .../tuple/class-use/SummaryFactory.html | 355 + .../tuple/class-use/SummarySetOperations.html | 394 + .../tuple/class-use/TupleSketchIterator.html | 204 + .../datasketches/tuple/class-use/Union.html | 149 + .../tuple/class-use/UpdatableSketch.html | 342 + .../class-use/UpdatableSketchBuilder.html | 213 + .../tuple/class-use/UpdatableSummary.html | 330 + .../datasketches/tuple/class-use/Util.html | 149 + .../datasketches/tuple/package-summary.html | 316 + .../datasketches/tuple/package-tree.html | 207 + .../datasketches/tuple/package-use.html | 532 + .../tuple/strings/ArrayOfStringsSketch.html | 771 ++ .../tuple/strings/ArrayOfStringsSummary.html | 396 + .../ArrayOfStringsSummaryDeserializer.html | 333 + .../strings/ArrayOfStringsSummaryFactory.html | 322 + .../ArrayOfStringsSummarySetOperations.html | 370 + .../class-use/ArrayOfStringsSketch.html | 240 + .../class-use/ArrayOfStringsSummary.html | 254 + .../ArrayOfStringsSummaryDeserializer.html | 149 + .../ArrayOfStringsSummaryFactory.html | 149 + .../ArrayOfStringsSummarySetOperations.html | 149 + .../tuple/strings/package-summary.html | 188 + .../tuple/strings/package-tree.html | 176 + .../tuple/strings/package-use.html | 213 + docs/5.0.X/overview-summary.html | 23 + docs/5.0.X/overview-tree.html | 455 + docs/5.0.X/package-search-index.js | 1 + docs/5.0.X/package-search-index.zip | Bin 0 -> 351 bytes docs/5.0.X/resources/dictionary.html | 282 + docs/5.0.X/resources/glass.png | Bin 0 -> 499 bytes docs/5.0.X/resources/x.png | Bin 0 -> 394 bytes docs/5.0.X/script.js | 149 + docs/5.0.X/search.js | 326 + docs/5.0.X/serialized-form.html | 211 + docs/5.0.X/stylesheet.css | 910 ++ docs/5.0.X/type-search-index.js | 1 + docs/5.0.X/type-search-index.zip | Bin 0 -> 1606 bytes 479 files changed, 192786 insertions(+) create mode 100644 docs/5.0.X/allclasses-index.html create mode 100644 docs/5.0.X/allclasses.html create mode 100644 docs/5.0.X/allpackages-index.html create mode 100644 docs/5.0.X/constant-values.html create mode 100644 docs/5.0.X/deprecated-list.html create mode 100644 docs/5.0.X/element-list create mode 100644 docs/5.0.X/help-doc.html create mode 100644 docs/5.0.X/index-all.html create mode 100644 docs/5.0.X/index.html create mode 100644 docs/5.0.X/jquery-ui.overrides.css create mode 100644 docs/5.0.X/jquery/external/jquery/jquery.js create mode 100644 docs/5.0.X/jquery/jquery-3.6.1.min.js create mode 100644 docs/5.0.X/jquery/jquery-ui.min.css create mode 100644 docs/5.0.X/jquery/jquery-ui.min.js create mode 100644 docs/5.0.X/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 docs/5.0.X/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 docs/5.0.X/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 docs/5.0.X/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 docs/5.0.X/jquery/jszip/dist/jszip.js create mode 100644 docs/5.0.X/jquery/jszip/dist/jszip.min.js create mode 100644 docs/5.0.X/legal/ADDITIONAL_LICENSE_INFO create mode 100644 docs/5.0.X/legal/ASSEMBLY_EXCEPTION create mode 100644 docs/5.0.X/legal/LICENSE create mode 100644 docs/5.0.X/legal/jquery.md create mode 100644 docs/5.0.X/legal/jqueryUI.md create mode 100644 docs/5.0.X/legal/jszip.md create mode 100644 docs/5.0.X/legal/pako.md create mode 100644 docs/5.0.X/member-search-index.js create mode 100644 docs/5.0.X/member-search-index.zip create mode 100644 docs/5.0.X/org/apache/datasketches/common/ArrayOfBooleansSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ArrayOfDoublesSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ArrayOfItemsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ArrayOfLongsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ArrayOfNumbersSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ArrayOfStringsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/BoundsOnBinomialProportions.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/BoundsOnRatiosInSampledSets.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ByteArrayUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/Family.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/ResizeFactor.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/SketchesArgumentException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/SketchesException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/SketchesReadOnlyException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/SketchesStateException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/SuppressFBWarnings.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/Util.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfBooleansSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfDoublesSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfItemsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfLongsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfNumbersSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfStringsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfUtf16StringsSerDe.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnBinomialProportions.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnRatiosInSampledSets.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ByteArrayUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/Family.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/ResizeFactor.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/SketchesArgumentException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/SketchesException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/SketchesReadOnlyException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/SketchesStateException.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/SuppressFBWarnings.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/class-use/Util.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/common/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/CompressionCharacterization.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/CpcSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/CpcUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/CpcWrapper.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/MergingValidation.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/QuickMergingValidation.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/StreamingValidation.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/TestUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/CompressionCharacterization.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcWrapper.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/MergingValidation.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/QuickMergingValidation.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/StreamingValidation.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/class-use/TestUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/cpc/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/FdtSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/Group.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/PostProcessor.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/class-use/FdtSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/class-use/Group.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/class-use/PostProcessor.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/fdt/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/ErrorType.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.Row.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.Row.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/class-use/ErrorType.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.Row.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.Row.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/frequencies/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/MurmurHash3.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/MurmurHash3Adaptor.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/XxHash.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3Adaptor.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/class-use/XxHash.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/hash/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/HllSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/TgtHllType.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/Union.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/class-use/HllSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/class-use/TgtHllType.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/class-use/Union.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/doc-files/HLL_HIP_K12T20U20.png create mode 100644 docs/5.0.X/org/apache/datasketches/hll/doc-files/HLL_UnionTime4_6_8_Java_CPP.png create mode 100644 docs/5.0.X/org/apache/datasketches/hll/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/hll/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/hllmap/UniqueCountMap.html create mode 100644 docs/5.0.X/org/apache/datasketches/hllmap/class-use/UniqueCountMap.html create mode 100644 docs/5.0.X/org/apache/datasketches/hllmap/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/hllmap/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/hllmap/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchStructure.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchType.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/KllSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchStructure.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchType.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/kll/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/BoundsRule.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/Partitioner.PartitionBoundsRow.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/Partitioner.StackElement.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/Partitioner.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/SketchFillRequest.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/class-use/BoundsRule.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.PartitionBoundsRow.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.StackElement.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/class-use/SketchFillRequest.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/partitions/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/ClassicUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/CompactDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnionBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/ItemsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/UpdateDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/ClassicUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/CompactDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnionBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/class-use/UpdateDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantiles/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/BinarySearch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.Inequality.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/GenericPartitionBoundaries.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/InequalitySearch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/PartitionBoundaries.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/PartitioningFeature.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantileSearchCriteria.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/SortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/SortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/BinarySearch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.Inequality.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericPartitionBoundaries.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/InequalitySearch.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitionBoundaries.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitioningFeature.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantileSearchCriteria.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericAPI.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedViewIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/quantilescommon/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/ReqDebug.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/ReqSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/ReqSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/ReqSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/ReqSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/class-use/ReqDebug.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchSortedView.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/req/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/SampleSubsetSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.VarOptItemsIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.WeightedSample.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/SampleSubsetSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.VarOptItemsIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.WeightedSample.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/sampling/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/AnotB.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/BitPacking.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/CompactSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/HashIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/Intersection.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/JaccardSimilarity.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/SetOperation.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/SetOperationBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/Sketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/Sketches.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/Union.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/UpdateReturnState.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/UpdateSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/UpdateSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/AnotB.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/BitPacking.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/CompactSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/HashIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/Intersection.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/JaccardSimilarity.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperation.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperationBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/Sketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/Sketches.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/Union.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateReturnState.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/theta/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/BinomialBoundsN.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInThetaSketchedSets.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInTupleSketchedSets.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/HashOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/QuickSelect.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.AnotbAction.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.CornerCase.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.IntersectAction.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.UnionAction.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/ThetaUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BinomialBoundsN.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInThetaSketchedSets.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInTupleSketchedSets.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/HashOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/QuickSelect.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.AnotbAction.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.CornerCase.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.IntersectAction.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.UnionAction.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/class-use/ThetaUtil.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/thetacommon/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/AnotB.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/CompactSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/DeserializeResult.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/Filter.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/Intersection.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/JaccardSimilarity.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.SketchType.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/Sketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/Sketches.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/Summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/SummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/SummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/SummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/TupleSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/Union.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/UpdatableSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/Util.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.Mode.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.Mode.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/adouble/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.Mode.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.Mode.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotB.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotBImpl.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCombiner.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCompactSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesIntersection.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSetOperationBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketches.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotB.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotBImpl.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCombiner.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCompactSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesIntersection.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSetOperationBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketches.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUnion.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/AnotB.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/CompactSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/DeserializeResult.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/Filter.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/Intersection.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/JaccardSimilarity.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.SketchType.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketches.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/Summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/SummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/TupleSketchIterator.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/Union.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketchBuilder.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/class-use/Util.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/package-use.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSketch.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryDeserializer.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryFactory.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummarySetOperations.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/package-summary.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/package-tree.html create mode 100644 docs/5.0.X/org/apache/datasketches/tuple/strings/package-use.html create mode 100644 docs/5.0.X/overview-summary.html create mode 100644 docs/5.0.X/overview-tree.html create mode 100644 docs/5.0.X/package-search-index.js create mode 100644 docs/5.0.X/package-search-index.zip create mode 100644 docs/5.0.X/resources/dictionary.html create mode 100644 docs/5.0.X/resources/glass.png create mode 100644 docs/5.0.X/resources/x.png create mode 100644 docs/5.0.X/script.js create mode 100644 docs/5.0.X/search.js create mode 100644 docs/5.0.X/serialized-form.html create mode 100644 docs/5.0.X/stylesheet.css create mode 100644 docs/5.0.X/type-search-index.js create mode 100644 docs/5.0.X/type-search-index.zip diff --git a/docs/5.0.X/allclasses-index.html b/docs/5.0.X/allclasses-index.html new file mode 100644 index 000000000..7a5ce5f89 --- /dev/null +++ b/docs/5.0.X/allclasses-index.html @@ -0,0 +1,1319 @@ + + + + + +All Classes (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    All Classes Interface Summary Class Summary Enum Summary Exception Summary Annotation Types Summary 
    ClassDescription
    AnotB +
    Computes a set difference, A-AND-NOT-B, of two theta sketches.
    +
    AnotB<S extends Summary> +
    Computes a set difference, A-AND-NOT-B, of two generic tuple sketches.
    +
    ArrayOfBooleansSerDe +
    Methods of serializing and deserializing arrays of Boolean as a bit array.
    +
    ArrayOfDoublesAnotB +
    Computes a set difference of two tuple sketches of type ArrayOfDoubles
    +
    ArrayOfDoublesAnotBImpl +
    Computes a set difference, A-AND-NOT-B, of two ArrayOfDoublesSketches.
    +
    ArrayOfDoublesCombiner +
    Combines two arrays of double values for use with ArrayOfDoubles tuple sketches
    +
    ArrayOfDoublesCompactSketch +
    Top level compact tuple sketch of type ArrayOfDoubles.
    +
    ArrayOfDoublesIntersection +
    Computes the intersection of two or more tuple sketches of type ArrayOfDoubles.
    +
    ArrayOfDoublesSerDe +
    Methods of serializing and deserializing arrays of Double.
    +
    ArrayOfDoublesSetOperationBuilder +
    Builds set operations object for tuple sketches of type ArrayOfDoubles.
    +
    ArrayOfDoublesSketch +
    The base class for the tuple sketch of type ArrayOfDoubles, where an array of double values + is associated with each key.
    +
    ArrayOfDoublesSketches +
    Convenient static methods to instantiate tuple sketches of type ArrayOfDoubles.
    +
    ArrayOfDoublesSketchIterator +
    Interface for iterating over tuple sketches of type ArrayOfDoubles
    +
    ArrayOfDoublesUnion +
    The base class for unions of tuple sketches of type ArrayOfDoubles.
    +
    ArrayOfDoublesUpdatableSketch +
    The top level for updatable tuple sketches of type ArrayOfDoubles.
    +
    ArrayOfDoublesUpdatableSketchBuilder +
    For building a new ArrayOfDoublesUpdatableSketch
    +
    ArrayOfItemsSerDe<T> +
    Base class for serializing and deserializing custom types.
    +
    ArrayOfLongsSerDe +
    Methods of serializing and deserializing arrays of Long.
    +
    ArrayOfNumbersSerDe +
    Methods of serializing and deserializing arrays of the object version of primitive types of + Number.
    +
    ArrayOfStringsSerDe +
    Methods of serializing and deserializing arrays of String.
    +
    ArrayOfStringsSketch 
    ArrayOfStringsSummary 
    ArrayOfStringsSummaryDeserializer 
    ArrayOfStringsSummaryFactory 
    ArrayOfStringsSummarySetOperations 
    ArrayOfUtf16StringsSerDe +
    Methods of serializing and deserializing arrays of String.
    +
    BinarySearch +
    Contains common equality binary search algorithms.
    +
    BinomialBoundsN +
    This class enables the estimation of error bounds given a sample set size, the sampling + probability theta, the number of standard deviations and a simple noDataSeen flag.
    +
    BitPacking 
    BoundsOnBinomialProportions +
    Confidence intervals for binomial proportions.
    +
    BoundsOnRatiosInSampledSets +
    This class is used to compute the bounds on the estimate of the ratio |B| / |A|, where: + + |A| is the unknown size of a set A of unique identifiers. + |B| is the unknown size of a subset B of A. + a = |SA| is the observed size of a sample of A + that was obtained by Bernoulli sampling with a known inclusion probability f. + b = |SA ∩ B| is the observed size of a subset + of SA. +
    +
    BoundsOnRatiosInThetaSketchedSets +
    This class is used to compute the bounds on the estimate of the ratio B / A, where: + + A is a Theta Sketch of population PopA. + B is a Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Theta Sketch C, + which acts like a predicate or selection clause. + The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B). + The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B). + The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B). + + Note: The theta of A cannot be greater than the theta of B.
    +
    BoundsOnRatiosInTupleSketchedSets +
    This class is used to compute the bounds on the estimate of the ratio B / A, where: + + A is a Tuple Sketch of population PopA. + B is a Tuple or Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Tuple or Theta Sketch C, + which acts like a predicate or selection clause. + The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B). + The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B). + The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B). + + Note: The theta of A cannot be greater than the theta of B.
    +
    BoundsRule 
    ByteArrayUtil +
    Useful methods for byte arrays.
    +
    ClassicUtil +
    Utilities for the classic quantiles sketches and independent of the type.
    +
    CompactDoublesSketch +
    Compact sketches are inherently read ony.
    +
    CompactSketch +
    The parent class of all the CompactSketches.
    +
    CompactSketch<S extends Summary> +
    CompactSketches are never created directly.
    +
    CompressionCharacterization +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    CpcSketch +
    This is a unique-counting sketch that implements the + Compressed Probabilistic Counting (CPC, a.k.a FM85) algorithms developed by Kevin Lang in + his paper + Back to the Future: an Even More Nearly + Optimal Cardinality Estimation Algorithm.
    +
    CpcUnion +
    The union (merge) operation for the CPC sketches.
    +
    CpcWrapper +
    This provides a read-only view of a serialized image of a CpcSketch, which can be + on-heap or off-heap represented as a Memory object, or on-heap represented as a byte array.
    +
    DeserializeResult<T> +
    Returns an object and its size in bytes as a result of a deserialize operation
    +
    DoubleSketch 
    DoublesSketch +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using doubles, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
    +
    DoublesSketchBuilder +
    For building a new quantiles DoublesSketch.
    +
    DoublesSketchIterator +
    Iterator over DoublesSketch.
    +
    DoublesSketchSortedView +
    The SortedView of the Classic Quantiles DoublesSketch.
    +
    DoublesSortedView +
    The Sorted View for quantile sketches of primitive type double.
    +
    DoublesSortedViewIterator +
    Iterator over quantile sketches of primitive type double.
    +
    DoubleSummary +
    Summary for generic tuple sketches of type Double.
    +
    DoubleSummary.Mode +
    The aggregation modes for this Summary
    +
    DoubleSummaryDeserializer 
    DoubleSummaryFactory +
    Factory for DoubleSummary.
    +
    DoubleSummarySetOperations +
    Methods for defining how unions and intersections of two objects of type DoubleSummary + are performed.
    +
    DoublesUnion +
    The API for Union operations for quantiles DoublesSketches
    +
    DoublesUnionBuilder +
    For building a new DoublesSketch Union operation.
    +
    ErrorType +
    Specifies one of two types of error regions of the statistical classification Confusion Matrix + that can be excluded from a returned sample of Frequent Items.
    +
    Family +
    Defines the various families of sketch and set operation classes.
    +
    FdtSketch +
    A Frequent Distinct Tuples sketch.
    +
    Filter<T extends Summary> +
    Class for filtering entries from a Sketch given a Summary
    +
    FloatsSortedView +
    The Sorted View for quantiles of primitive type float.
    +
    FloatsSortedViewIterator +
    Iterator over quantile sketches of primitive type float.
    +
    GenericInequalitySearch +
    This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values.
    +
    GenericInequalitySearch.Inequality +
    The enumerator of inequalities
    +
    GenericPartitionBoundaries<T> +
    Implements PartitionBoundaries
    +
    GenericSortedView<T> +
    The Sorted View for quantiles of generic type.
    +
    GenericSortedViewIterator<T> +
    Iterator over quantile sketches of generic type.
    +
    Group +
    Defines a Group from a Frequent Distinct Tuple query.
    +
    HashIterator +
    This is used to iterate over the retained hash values of the Theta sketch.
    +
    HashOperations +
    Helper class for the common hash table methods.
    +
    HllSketch +
    The HllSketch is actually a collection of compact implementations of Phillipe Flajolet’s HyperLogLog (HLL) + sketch but with significantly improved error behavior and excellent speed performance.
    +
    InequalitySearch +
    This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values.
    +
    IntegerSketch 
    IntegerSummary +
    Summary for generic tuple sketches of type Integer.
    +
    IntegerSummary.Mode +
    The aggregation modes for this Summary
    +
    IntegerSummaryDeserializer 
    IntegerSummaryFactory +
    Factory for IntegerSummary.
    +
    IntegerSummarySetOperations +
    Methods for defining how unions and intersections of two objects of type IntegerSummary + are performed.
    +
    Intersection +
    The API for intersection operations
    +
    Intersection<S extends Summary> +
    Computes an intersection of two or more generic tuple sketches or generic tuple sketches + combined with theta sketches.
    +
    ItemsSketch<T> +
    This sketch is useful for tracking approximate frequencies of items of type <T> + with optional associated counts (<T> item, long count) that are members of a + multiset of such items.
    +
    ItemsSketch<T> +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using generic items, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
    +
    ItemsSketch.Row<T> +
    Row class that defines the return values from a getFrequentItems query.
    +
    ItemsSketchIterator<T> +
    Iterator over ItemsSketch.
    +
    ItemsSketchSortedView<T> +
    The SortedView of the Classic Quantiles ItemsSketch.
    +
    ItemsUnion<T> +
    The API for Union operations for generic ItemsSketches
    +
    JaccardSimilarity +
    Jaccard similarity of two Theta Sketches.
    +
    JaccardSimilarity +
    Jaccard similarity of two Tuple Sketches, or alternatively, of a Tuple and Theta Sketch.
    +
    KllDoublesSketch +
    This variation of the KllSketch implements primitive doubles.
    +
    KllDoublesSketchIterator +
    Iterator over KllDoublesSketch.
    +
    KllDoublesSketchSortedView +
    The SortedView of the KllDoublesSketch.
    +
    KllFloatsSketch +
    This variation of the KllSketch implements primitive floats.
    +
    KllFloatsSketchIterator +
    Iterator over KllFloatsSketch.
    +
    KllFloatsSketchSortedView +
    The SortedView of the KllFloatsSketch.
    +
    KllItemsSketch<T> +
    This variation of the KllSketch implements generic data types.
    +
    KllItemsSketchIterator<T> +
    Iterator over KllItemsSketch.
    +
    KllItemsSketchSortedView<T> +
    The SortedView of the KllItemsSketch.
    +
    KllSketch +
    This class is the root of the KLL sketch class hierarchy.
    +
    KllSketch.SketchStructure +
    Used primarily to define the structure of the serialized sketch.
    +
    KllSketch.SketchType +
    Used to define the variable type of the current instance of this class.
    +
    KllSketchIterator +
    The base implementation for the KLL sketch iterator hierarchy used for viewing the + non-ordered quantiles retained by a sketch.
    +
    LongsSketch +
    This sketch is useful for tracking approximate frequencies of long items with optional + associated counts (long item, long count) that are members of a multiset of + such items.
    +
    LongsSketch.Row +
    Row class that defines the return values from a getFrequentItems query.
    +
    MergingValidation +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    MurmurHash3 +
    + The MurmurHash3 is a fast, non-cryptographic, 128-bit hash function that has + excellent avalanche and 2-way bit independence properties.
    +
    MurmurHash3Adaptor +
    A general purpose wrapper for the MurmurHash3.
    +
    PartitionBoundaries +
    This defines a set of results computed from the getParitionBoundaries() function and + encapsulates the basic methods needed to construct actual partitions based on generic items.
    +
    Partitioner<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>> +
    A partitioning process that can partition very large data sets into thousands + of partitions of approximately the same size.
    +
    Partitioner.PartitionBoundsRow<T> +
    Defines a row for List of PartitionBounds.
    +
    Partitioner.StackElement<T> +
    Holds data for a Stack element
    +
    PartitioningFeature<T> +
    This enables the special functions for performing efficient partitioning of massive data.
    +
    PostProcessor +
    This processes the contents of a FDT sketch to extract the + primary keys with the most frequent unique combinations of the non-primary dimensions.
    +
    QuantilesAPI +
    This is a stochastic streaming sketch that enables near-real time analysis of the + approximate distribution of items from a very large stream in a single pass, requiring only + that the items are comparable.
    +
    QuantilesDoublesAPI +
    The Quantiles API for item type double.
    +
    QuantilesDoublesSketchIterator +
    The quantiles sketch iterator for primitive type double.
    +
    QuantileSearchCriteria +
    These search criteria are used by the KLL, REQ and Classic Quantiles sketches in the DataSketches library.
    +
    QuantilesFloatsAPI +
    The Quantiles API for item type float.
    +
    QuantilesFloatsSketchIterator +
    The quantiles sketch iterator for primitive type float.
    +
    QuantilesGenericAPI<T> +
    The Quantiles API for item type generic.
    +
    QuantilesGenericSketchIterator<T> +
    The quantiles sketch iterator for generic types.
    +
    QuantilesSketchIterator +
    This is the base interface for the SketchIterator hierarchy used for viewing the + non-ordered quantiles retained by a sketch.
    +
    QuantilesUtil +
    Utilities for the quantiles sketches.
    +
    QuickMergingValidation +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    QuickSelect +
    QuickSelect algorithm improved from Sedgewick.
    +
    ReqDebug +
    The signaling interface that allows comprehensive analysis of the ReqSketch and ReqCompactor + while eliminating code clutter in the main classes.
    +
    ReqSketch +
    This Relative Error Quantiles Sketch is the Java implementation based on the paper + "Relative Error Streaming Quantiles" by Graham Cormode, Zohar Karnin, Edo Liberty, + Justin Thaler, Pavel Veselý, and loosely derived from a Python prototype written by Pavel Veselý.
    +
    ReqSketchBuilder +
    For building a new ReqSketch
    +
    ReqSketchIterator +
    Iterator over all retained items of the ReqSketch.
    +
    ReqSketchSortedView +
    The SortedView of the ReqSketch.
    +
    ReservoirItemsSketch<T> +
    This sketch provides a reservoir sample over an input stream of items.
    +
    ReservoirItemsUnion<T> +
    Class to union reservoir samples of generic items.
    +
    ReservoirLongsSketch +
    This sketch provides a reservoir sample over an input stream of longs.
    +
    ReservoirLongsUnion +
    Class to union reservoir samples of longs.
    +
    ResizeFactor +
    For the Families that accept this configuration parameter, it controls the size multiple that + affects how fast the internal cache grows, when more space is required.
    +
    SampleSubsetSummary +
    A simple object o capture the results of a subset sum query on a sampling sketch.
    +
    SerializerDeserializer +
    Multipurpose serializer-deserializer for a collection of sketches defined by the enum.
    +
    SerializerDeserializer.SketchType +
    Defines the sketch classes that this SerializerDeserializer can handle.
    +
    SetOperation +
    The parent API for all Set Operations
    +
    SetOperationBuilder +
    For building a new SetOperation.
    +
    SetOperationCornerCases +
    Simplifies and speeds up set operations by resolving specific corner cases.
    +
    SetOperationCornerCases.AnotbAction 
    SetOperationCornerCases.CornerCase 
    SetOperationCornerCases.IntersectAction 
    SetOperationCornerCases.UnionAction 
    Sketch +
    The top-level class for all theta sketches.
    +
    Sketch<S extends Summary> +
    This is an equivalent to org.apache.datasketches.theta.Sketch with + addition of a user-defined Summary object associated with every unique entry + in the sketch.
    +
    Sketches +
    This class brings together the common sketch and set operation creation methods and + the public static methods into one place.
    +
    Sketches +
    Convenient static methods to instantiate generic tuple sketches.
    +
    SketchesArgumentException +
    Illegal Arguments Exception class for the library
    +
    SketchesException +
    Exception class for the library
    +
    SketchesReadOnlyException +
    Write operation attempted on a read-only class.
    +
    SketchesStateException +
    Illegal State Exception class for the library
    +
    SketchFillRequest<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>> +
    This is a callback request to the data source to fill a quantiles sketch, + which is returned to the caller.
    +
    SortedView +
    This is the base interface for the Sorted View interface hierarchy and defines the methods that are type independent.
    +
    SortedViewIterator +
    This is the base interface for the SortedViewIterator hierarchy used with a SortedView obtained + from a quantile-type sketch.
    +
    StreamingValidation +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    Summary +
    Interface for user-defined Summary, which is associated with every hash in a tuple sketch
    +
    SummaryDeserializer<S extends Summary> +
    Interface for deserializing user-defined Summary
    +
    SummaryFactory<S extends Summary> +
    Interface for user-defined SummaryFactory
    +
    SummarySetOperations<S extends Summary> +
    This is to provide methods of producing unions and intersections of two Summary objects.
    +
    SuppressFBWarnings +
    Used to suppress SpotBug warnings.
    +
    TestUtil 
    TgtHllType +
    Specifies the target type of HLL sketch to be created.
    +
    ThetaUtil +
    Utility methods for the Theta Family of sketches
    +
    TupleSketchIterator<S extends Summary> +
    Iterator over a generic tuple sketch
    +
    Union +
    This performs union operations for all HllSketches.
    +
    Union +
    Compute the union of two or more theta sketches.
    +
    Union<S extends Summary> +
    Compute the union of two or more generic tuple sketches or generic tuple sketches combined with + theta sketches.
    +
    UniqueCountMap +
    This is a real-time, key-value HLL mapping sketch that tracks approximate unique counts of + identifiers (the values) associated with each key.
    +
    UpdatableSketch<U,​S extends UpdatableSummary<U>> +
    An extension of QuickSelectSketch<S>, which can be updated with many types of keys.
    +
    UpdatableSketchBuilder<U,​S extends UpdatableSummary<U>> +
    For building a new generic tuple UpdatableSketch
    +
    UpdatableSummary<U> +
    Interface for updating user-defined Summary
    +
    UpdateDoublesSketch 
    UpdateReturnState + +
    UpdateSketch +
    The parent class for the Update Sketch families, such as QuickSelect and Alpha.
    +
    UpdateSketchBuilder +
    For building a new UpdateSketch.
    +
    Util +
    Common utility functions.
    +
    Util +
    Common utility functions for Tuples
    +
    VarOptItemsSamples<T> +
    This class provides access to the samples contained in a VarOptItemsSketch.
    +
    VarOptItemsSketch<T> +
    This sketch provides a variance optimal sample over an input stream of weighted items.
    +
    VarOptItemsUnion<T> +
    Provides a unioning operation over varopt sketches.
    +
    XxHash +
    The XxHash is a fast, non-cryptographic, 64-bit hash function that has + excellent avalanche and 2-way bit independence properties.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/allclasses.html b/docs/5.0.X/allclasses.html new file mode 100644 index 000000000..4607477ab --- /dev/null +++ b/docs/5.0.X/allclasses.html @@ -0,0 +1,213 @@ + + + + + +All Classes (datasketches-java 5.0.2 API) + + + + + + + + + + + + +
+

All Classes

+
+ +
+
+ + diff --git a/docs/5.0.X/allpackages-index.html b/docs/5.0.X/allpackages-index.html new file mode 100644 index 000000000..3c848f150 --- /dev/null +++ b/docs/5.0.X/allpackages-index.html @@ -0,0 +1,298 @@ + + + + + +All Packages (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/constant-values.html b/docs/5.0.X/constant-values.html new file mode 100644 index 000000000..1fa556797 --- /dev/null +++ b/docs/5.0.X/constant-values.html @@ -0,0 +1,472 @@ + + + + + +Constant Field Values (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+

Contents

+ +
+
+
+ + +
+

org.apache.*

+ +
    +
  • + + + + + + + + + + + + + + +
    org.apache.datasketches.cpc.CpcSketch 
    Modifier and TypeConstant FieldValue
    + +public static final intDEFAULT_LG_K11
    +
  • +
+
    +
  • + + + + + + + + + + + + + + +
    org.apache.datasketches.hll.HllSketch 
    Modifier and TypeConstant FieldValue
    + +public static final intDEFAULT_LG_K12
    +
  • +
+
    +
  • + + + + + + + + + + + + + + + + + + + +
    org.apache.datasketches.kll.KllSketch 
    Modifier and TypeConstant FieldValue
    + +public static final intDEFAULT_K200
    + +public static final intMAX_K65535
    +
  • +
+ + +
    +
  • + + + + + + + + + + + + + + +
    org.apache.datasketches.tuple.Sketch<S extends Summary> 
    Modifier and TypeConstant FieldValue
    + +protected static final bytePREAMBLE_LONGS1
    +
  • +
+ +
+
+
+ + + diff --git a/docs/5.0.X/deprecated-list.html b/docs/5.0.X/deprecated-list.html new file mode 100644 index 000000000..ef9b3d640 --- /dev/null +++ b/docs/5.0.X/deprecated-list.html @@ -0,0 +1,249 @@ + + + + + +Deprecated List (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Deprecated API

+

Contents

+ +
+
+ + + + + + + +
+
+ + + diff --git a/docs/5.0.X/element-list b/docs/5.0.X/element-list new file mode 100644 index 000000000..1f7c062b8 --- /dev/null +++ b/docs/5.0.X/element-list @@ -0,0 +1,21 @@ +org.apache.datasketches +org.apache.datasketches.common +org.apache.datasketches.cpc +org.apache.datasketches.fdt +org.apache.datasketches.frequencies +org.apache.datasketches.hash +org.apache.datasketches.hll +org.apache.datasketches.hllmap +org.apache.datasketches.kll +org.apache.datasketches.partitions +org.apache.datasketches.quantiles +org.apache.datasketches.quantilescommon +org.apache.datasketches.req +org.apache.datasketches.sampling +org.apache.datasketches.theta +org.apache.datasketches.thetacommon +org.apache.datasketches.tuple +org.apache.datasketches.tuple.adouble +org.apache.datasketches.tuple.aninteger +org.apache.datasketches.tuple.arrayofdoubles +org.apache.datasketches.tuple.strings diff --git a/docs/5.0.X/help-doc.html b/docs/5.0.X/help-doc.html new file mode 100644 index 000000000..85083d0df --- /dev/null +++ b/docs/5.0.X/help-doc.html @@ -0,0 +1,281 @@ + + + + + +API Help (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +
    +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
    +
  • +
  • +
    +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

    +
      +
    • Interfaces
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
    +
  • +
  • +
    +

    Class or Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class Inheritance Diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class or Interface Declaration
    • +
    • Class or Interface Description
    • +
    +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Property Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
    +
      +
    • Field Detail
    • +
    • Property Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
    +
  • +
  • +
    +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type Declaration
    • +
    • Annotation Type Description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
    +
  • +
  • +
    +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum Declaration
    • +
    • Enum Description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
    +
  • +
  • +
    +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
    +
  • +
  • +
    +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
    • +
    +
    +
  • +
  • +
    +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
    +
  • +
  • +
    +

    Index

    +

    The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

    +
    +
  • +
  • +
    +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
    +
  • +
  • +
    +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
    +
  • +
  • +
    +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
    +
  • +
  • +
    +

    Search

    +

    You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

    +
    +
  • +
+
+This help file applies to API documentation generated by the standard doclet.
+
+ + + diff --git a/docs/5.0.X/index-all.html b/docs/5.0.X/index-all.html new file mode 100644 index 000000000..c4f5e684a --- /dev/null +++ b/docs/5.0.X/index-all.html @@ -0,0 +1,7425 @@ + + + + + +Index (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I J K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

A

+
+
A_NOT_B - org.apache.datasketches.common.Family
+
+
The A and not B family is an operation for the Theta Sketch Framework of sketches.
+
+
ALPHA - org.apache.datasketches.common.Family
+
+
The Alpha Sketch family is a member of the Theta Sketch Framework of sketches and is best + suited for real-time processes where both the updating of the sketch and getting the estimate + is performed directly on the sketch.
+
+
AlwaysOne - org.apache.datasketches.tuple.adouble.DoubleSummary.Mode
+
+
The aggregation mode is always one.
+
+
AlwaysOne - org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode
+
+
The aggregation mode is always one.
+
+
aNotB(Sketch, Sketch) - Method in class org.apache.datasketches.theta.AnotB
+
+
Perform A-and-not-B set operation on the two given sketches and return the result as an + ordered CompactSketch on the heap.
+
+
aNotB(Sketch, Sketch, boolean, WritableMemory) - Method in class org.apache.datasketches.theta.AnotB
+
+
Perform A-and-not-B set operation on the two given sketches and return the result as a + CompactSketch.
+
+
aNotB(Sketch<S>, Sketch) - Static method in class org.apache.datasketches.tuple.AnotB
+
+
Returns the A-and-not-B set operation on a Tuple sketch and a Theta sketch.
+
+
aNotB(Sketch<S>, Sketch<S>) - Static method in class org.apache.datasketches.tuple.AnotB
+
+
Returns the A-and-not-B set operation on the two given Tuple sketches.
+
+
AnotB - Class in org.apache.datasketches.theta
+
+
Computes a set difference, A-AND-NOT-B, of two theta sketches.
+
+
AnotB<S extends Summary> - Class in org.apache.datasketches.tuple
+
+
Computes a set difference, A-AND-NOT-B, of two generic tuple sketches.
+
+
AnotB() - Constructor for class org.apache.datasketches.theta.AnotB
+
 
+
AnotB() - Constructor for class org.apache.datasketches.tuple.AnotB
+
 
+
approximateLowerBoundOnP(long, long, double) - Static method in class org.apache.datasketches.common.BoundsOnBinomialProportions
+
+
Computes lower bound of approximate Clopper-Pearson confidence interval for a binomial + proportion.
+
+
approximateUpperBoundOnP(long, long, double) - Static method in class org.apache.datasketches.common.BoundsOnBinomialProportions
+
+
Computes upper bound of approximate Clopper-Pearson confidence interval for a binomial + proportion.
+
+
approxNumDeltaItems - Variable in class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow
+
 
+
ArrayOfBooleansSerDe - Class in org.apache.datasketches.common
+
+
Methods of serializing and deserializing arrays of Boolean as a bit array.
+
+
ArrayOfBooleansSerDe() - Constructor for class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
ArrayOfDoublesAnotB - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
Computes a set difference of two tuple sketches of type ArrayOfDoubles
+
+
ArrayOfDoublesAnotBImpl - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
Computes a set difference, A-AND-NOT-B, of two ArrayOfDoublesSketches.
+
+
ArrayOfDoublesCombiner - Interface in org.apache.datasketches.tuple.arrayofdoubles
+
+
Combines two arrays of double values for use with ArrayOfDoubles tuple sketches
+
+
ArrayOfDoublesCompactSketch - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
Top level compact tuple sketch of type ArrayOfDoubles.
+
+
ArrayOfDoublesCompactSketch - org.apache.datasketches.tuple.SerializerDeserializer.SketchType
+
 
+
ArrayOfDoublesIntersection - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
Computes the intersection of two or more tuple sketches of type ArrayOfDoubles.
+
+
ArrayOfDoublesQuickSelectSketch - org.apache.datasketches.tuple.SerializerDeserializer.SketchType
+
 
+
ArrayOfDoublesSerDe - Class in org.apache.datasketches.common
+
+
Methods of serializing and deserializing arrays of Double.
+
+
ArrayOfDoublesSerDe() - Constructor for class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
ArrayOfDoublesSetOperationBuilder - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
Builds set operations object for tuple sketches of type ArrayOfDoubles.
+
+
ArrayOfDoublesSetOperationBuilder() - Constructor for class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Creates an instance of the builder with default parameters
+
+
ArrayOfDoublesSketch - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
The base class for the tuple sketch of type ArrayOfDoubles, where an array of double values + is associated with each key.
+
+
ArrayOfDoublesSketches - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
Convenient static methods to instantiate tuple sketches of type ArrayOfDoubles.
+
+
ArrayOfDoublesSketches() - Constructor for class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
 
+
ArrayOfDoublesSketchIterator - Interface in org.apache.datasketches.tuple.arrayofdoubles
+
+
Interface for iterating over tuple sketches of type ArrayOfDoubles
+
+
ArrayOfDoublesUnion - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
The base class for unions of tuple sketches of type ArrayOfDoubles.
+
+
ArrayOfDoublesUnion - org.apache.datasketches.tuple.SerializerDeserializer.SketchType
+
 
+
ArrayOfDoublesUpdatableSketch - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
The top level for updatable tuple sketches of type ArrayOfDoubles.
+
+
ArrayOfDoublesUpdatableSketchBuilder - Class in org.apache.datasketches.tuple.arrayofdoubles
+
+
For building a new ArrayOfDoublesUpdatableSketch
+
+
ArrayOfDoublesUpdatableSketchBuilder() - Constructor for class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
Creates an instance of builder with default parameters
+
+
ArrayOfItemsSerDe<T> - Class in org.apache.datasketches.common
+
+
Base class for serializing and deserializing custom types.
+
+
ArrayOfItemsSerDe() - Constructor for class org.apache.datasketches.common.ArrayOfItemsSerDe
+
 
+
ArrayOfLongsSerDe - Class in org.apache.datasketches.common
+
+
Methods of serializing and deserializing arrays of Long.
+
+
ArrayOfLongsSerDe() - Constructor for class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
ArrayOfNumbersSerDe - Class in org.apache.datasketches.common
+
+
Methods of serializing and deserializing arrays of the object version of primitive types of + Number.
+
+
ArrayOfNumbersSerDe() - Constructor for class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
ArrayOfStringsSerDe - Class in org.apache.datasketches.common
+
+
Methods of serializing and deserializing arrays of String.
+
+
ArrayOfStringsSerDe() - Constructor for class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
ArrayOfStringsSketch - Class in org.apache.datasketches.tuple.strings
+
 
+
ArrayOfStringsSketch() - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch
+
+
Constructs new sketch with default K = 4096 (lgK = 12), default ResizeFactor=X8, + and default p = 1.0.
+
+
ArrayOfStringsSketch(int) - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch
+
+
Constructs new sketch with default ResizeFactor=X8, default p = 1.0 and given lgK.
+
+
ArrayOfStringsSketch(int, ResizeFactor, float) - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch
+
+
Constructs new sketch with given ResizeFactor, p and lgK.
+
+
ArrayOfStringsSketch(Memory) - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch
+
+
Deprecated. +
As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
+
+
+
ArrayOfStringsSketch(ArrayOfStringsSketch) - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch
+
+
Copy Constructor
+
+
ArrayOfStringsSummary - Class in org.apache.datasketches.tuple.strings
+
 
+
ArrayOfStringsSummaryDeserializer - Class in org.apache.datasketches.tuple.strings
+
 
+
ArrayOfStringsSummaryDeserializer() - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryDeserializer
+
 
+
ArrayOfStringsSummaryFactory - Class in org.apache.datasketches.tuple.strings
+
 
+
ArrayOfStringsSummaryFactory() - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryFactory
+
 
+
ArrayOfStringsSummarySetOperations - Class in org.apache.datasketches.tuple.strings
+
 
+
ArrayOfStringsSummarySetOperations() - Constructor for class org.apache.datasketches.tuple.strings.ArrayOfStringsSummarySetOperations
+
 
+
ArrayOfUtf16StringsSerDe - Class in org.apache.datasketches.common
+
+
Methods of serializing and deserializing arrays of String.
+
+
ArrayOfUtf16StringsSerDe() - Constructor for class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
asDouble(long[]) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns a uniform random double with a minimum inclusive value of zero and a maximum exclusive + value of 1.0.
+
+
asInt(byte[], int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
+
+
asInt(double, int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input double.
+
+
asInt(int[], int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
+
+
asInt(long[], int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
+
+
asInt(long, int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input datum.
+
+
asInt(String, int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input datum.
+
+
+ + + +

B

+
+
BinarySearch - Class in org.apache.datasketches.quantilescommon
+
+
Contains common equality binary search algorithms.
+
+
BinarySearch() - Constructor for class org.apache.datasketches.quantilescommon.BinarySearch
+
 
+
BinomialBoundsN - Class in org.apache.datasketches.thetacommon
+
+
This class enables the estimation of error bounds given a sample set size, the sampling + probability theta, the number of standard deviations and a simple noDataSeen flag.
+
+
BitPacking - Class in org.apache.datasketches.theta
+
 
+
BitPacking() - Constructor for class org.apache.datasketches.theta.BitPacking
+
 
+
BoundsOnBinomialProportions - Class in org.apache.datasketches.common
+
+
Confidence intervals for binomial proportions.
+
+
BoundsOnRatiosInSampledSets - Class in org.apache.datasketches.common
+
+
This class is used to compute the bounds on the estimate of the ratio |B| / |A|, where: + + |A| is the unknown size of a set A of unique identifiers. + |B| is the unknown size of a subset B of A. + a = |SA| is the observed size of a sample of A + that was obtained by Bernoulli sampling with a known inclusion probability f. + b = |SA ∩ B| is the observed size of a subset + of SA. +
+
+
BoundsOnRatiosInThetaSketchedSets - Class in org.apache.datasketches.thetacommon
+
+
This class is used to compute the bounds on the estimate of the ratio B / A, where: + + A is a Theta Sketch of population PopA. + B is a Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Theta Sketch C, + which acts like a predicate or selection clause. + The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B). + The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B). + The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B). + + Note: The theta of A cannot be greater than the theta of B.
+
+
BoundsOnRatiosInTupleSketchedSets - Class in org.apache.datasketches.thetacommon
+
+
This class is used to compute the bounds on the estimate of the ratio B / A, where: + + A is a Tuple Sketch of population PopA. + B is a Tuple or Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Tuple or Theta Sketch C, + which acts like a predicate or selection clause. + The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B). + The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B). + The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B). + + Note: The theta of A cannot be greater than the theta of B.
+
+
BoundsRule - Enum in org.apache.datasketches.partitions
+
 
+
build() - Method in class org.apache.datasketches.quantiles.DoublesSketchBuilder
+
+
Returns an UpdateDoublesSketch with the current configuration of this Builder.
+
+
build() - Method in class org.apache.datasketches.quantiles.DoublesUnionBuilder
+
+
Returns a new empty Union object with the current configuration of this Builder.
+
+
build() - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
+
Returns a new ReqSketch with the current configuration of the builder.
+
+
build() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns an UpdateSketch with the current configuration of this Builder.
+
+
build() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
Returns an ArrayOfDoublesUpdatableSketch with the current configuration of this Builder.
+
+
build() - Method in class org.apache.datasketches.tuple.UpdatableSketchBuilder
+
+
Returns an UpdatableSketch with the current configuration of this Builder.
+
+
build(Family) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Returns a SetOperation with the current configuration of this Builder and the given Family.
+
+
build(Family, WritableMemory) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Returns a SetOperation with the current configuration of this Builder, the given Family + and the given destination memory.
+
+
build(WritableMemory) - Method in class org.apache.datasketches.quantiles.DoublesSketchBuilder
+
+
Returns a quantiles UpdateDoublesSketch with the current configuration of this builder + and the specified backing destination Memory store.
+
+
build(WritableMemory) - Method in class org.apache.datasketches.quantiles.DoublesUnionBuilder
+
+
Returns a new empty Union object with the current configuration of this Builder + and the specified backing destination Memory store.
+
+
build(WritableMemory) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns an UpdateSketch with the current configuration of this Builder + with the specified backing destination Memory store.
+
+
build(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
Returns an ArrayOfDoublesUpdatableSketch with the current configuration of this Builder.
+
+
buildAnotB() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Creates an instance of ArrayOfDoublesAnotB based on the current configuration of the builder.
+
+
buildANotB() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Convenience method, returns a configured SetOperation ANotB with + Default Update Seed
+
+
builder() - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns a new builder
+
+
builder() - Static method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns a new UnionBuilder
+
+
builder() - Static method in class org.apache.datasketches.req.ReqSketch
+
+
Returns a new ReqSketchBuilder
+
+
builder() - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Makes a new builder
+
+
builder() - Static method in class org.apache.datasketches.theta.UpdateSketch
+
+
Returns a new builder
+
+
buildIntersection() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Convenience method, returns a configured SetOperation Intersection with + Default Nominal Entries
+
+
buildIntersection() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Creates an instance of ArrayOfDoublesIntersection based on the current configuration of the + builder.
+
+
buildIntersection(WritableMemory) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Convenience method, returns a configured SetOperation Intersection with + Default Nominal Entries + and the given destination memory.
+
+
buildIntersection(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Creates an instance of ArrayOfDoublesIntersection based on the current configuration of the + builder.
+
+
buildLocal(UpdateSketch) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns a local, on-heap, concurrent UpdateSketch to be used as a per-thread local buffer + along with the given concurrent shared UpdateSketch and the current configuration of this + Builder.
+
+
buildShared() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns an on-heap concurrent shared UpdateSketch with the current configuration of the + Builder.
+
+
buildShared(WritableMemory) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns a direct (potentially off-heap) concurrent shared UpdateSketch with the current + configuration of the Builder and the given destination WritableMemory.
+
+
buildSharedFromSketch(UpdateSketch, WritableMemory) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns a direct (potentially off-heap) concurrent shared UpdateSketch with the current + configuration of the Builder, the data from the given sketch, and the given destination + WritableMemory.
+
+
buildUnion() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Convenience method, returns a configured SetOperation Union with + Default Nominal Entries
+
+
buildUnion() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Creates an instance of ArrayOfDoublesUnion based on the current configuration of the builder.
+
+
buildUnion(WritableMemory) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Convenience method, returns a configured SetOperation Union with + Default Nominal Entries + and the given destination memory.
+
+
buildUnion(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Creates an instance of ArrayOfDoublesUnion based on the current configuration of the builder + and the given destination memory.
+
+
ByteArrayUtil - Class in org.apache.datasketches.common
+
+
Useful methods for byte arrays.
+
+
ByteArrayUtil() - Constructor for class org.apache.datasketches.common.ByteArrayUtil
+
 
+
bytesToInt(byte[]) - Static method in class org.apache.datasketches.common.Util
+
+
Returns an int extracted from a Little-Endian byte array.
+
+
bytesToLong(byte[]) - Static method in class org.apache.datasketches.common.Util
+
+
Returns a long extracted from a Little-Endian byte array.
+
+
bytesToString(byte[], boolean, boolean, String) - Static method in class org.apache.datasketches.common.Util
+
+
Returns a string view of a byte array
+
+
+ + + +

C

+
+
caseIdToCornerCase(int) - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
ceilingIntPowerOf2(int) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the int ceiling power of 2 within the range [1, 2^30].
+
+
ceilingLongPowerOf2(long) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the long ceiling power of 2 within the range [1, 2^62].
+
+
ceilingPowerBaseOfDouble(double, double) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the ceiling of a given n given a base, where the ceiling is an integral power of the base.
+
+
characterPad(String, int, char, boolean) - Static method in class org.apache.datasketches.common.Util
+
+
Prepend or postpend the given string with the given character to fill the given field length.
+
+
checkBounds(long, long, long) - Static method in class org.apache.datasketches.common.Util
+
+
Check the requested offset and length against the allocated size.
+
+
checkDoublesSplitPointsOrder(double[]) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Checks the sequential validity of the given array of double values.
+
+
checkFamilyID(int) - Method in enum org.apache.datasketches.common.Family
+
 
+
checkFloatsSplitPointsOrder(float[]) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Checks the sequential validity of the given array of float values.
+
+
checkHashCorruption(long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
 
+
checkIfIntPowerOf2(int, String) - Static method in class org.apache.datasketches.common.Util
+
+
Checks the given int argument to make sure it is a positive power of 2 and greater than zero.
+
+
checkIfLongPowerOf2(long, String) - Static method in class org.apache.datasketches.common.Util
+
+
Checks the given long argument to make sure it is a positive power of 2 and greater than zero.
+
+
checkIfMultipleOf8AndGT0(long, String) - Static method in class org.apache.datasketches.common.Util
+
+
Checks if parameter v is a multiple of 8 and greater than zero.
+
+
checkMinSizeMemory(Memory) - Static method in class org.apache.datasketches.theta.Intersection
+
 
+
checkNomLongs(int) - Static method in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
Checks that the given nomLongs is within bounds and returns the Log2 of the ceiling power of 2 + of the given nomLongs.
+
+
checkNormalizedRankBounds(double) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Checks that the given normalized rank: 0 ≤ nRank ≤ 1.0.
+
+
checkProbability(double, String) - Static method in class org.apache.datasketches.common.Util
+
+
Checks the given parameter to make sure it is positive and between 0.0 inclusive and 1.0 + inclusive.
+
+
checkSeedHashes(short, short) - Static method in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
Check if the two seed hashes are equal.
+
+
checkSeedHashes(short, short) - Static method in class org.apache.datasketches.tuple.Util
+
+
Checks the two given seed hashes.
+
+
checkThetaCorruption(long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
 
+
ClassicUtil - Class in org.apache.datasketches.quantiles
+
+
Utilities for the classic quantiles sketches and independent of the type.
+
+
combine(double[], double[]) - Method in interface org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCombiner
+
+
Method of combining two arrays of double values
+
+
compact() - Method in class org.apache.datasketches.quantiles.UpdateDoublesSketch
+
 
+
compact() - Method in class org.apache.datasketches.theta.Sketch
+
+
Converts this sketch to a ordered CompactSketch.
+
+
compact() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
compact() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Gets an on-heap compact representation of the sketch
+
+
compact() - Method in class org.apache.datasketches.tuple.CompactSketch
+
 
+
compact() - Method in class org.apache.datasketches.tuple.Sketch
+
+
Converts this sketch to a CompactSketch on the Java heap.
+
+
compact(boolean, WritableMemory) - Method in class org.apache.datasketches.theta.CompactSketch
+
 
+
compact(boolean, WritableMemory) - Method in class org.apache.datasketches.theta.Sketch
+
+
Convert this sketch to a CompactSketch.
+
+
compact(boolean, WritableMemory) - Method in class org.apache.datasketches.theta.UpdateSketch
+
 
+
compact(WritableMemory) - Method in class org.apache.datasketches.quantiles.UpdateDoublesSketch
+
+
Returns a compact version of this sketch.
+
+
compact(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
compact(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Gets an off-heap compact representation of the sketch using the given memory
+
+
COMPACT - org.apache.datasketches.common.Family
+
+
The Compact Sketch family is a member of the Theta Sketch Framework of sketches.
+
+
COMPACT_EMPTY - org.apache.datasketches.kll.KllSketch.SketchStructure
+
 
+
COMPACT_FULL - org.apache.datasketches.kll.KllSketch.SketchStructure
+
 
+
COMPACT_SINGLE - org.apache.datasketches.kll.KllSketch.SketchStructure
+
 
+
CompactDoublesSketch - Class in org.apache.datasketches.quantiles
+
+
Compact sketches are inherently read ony.
+
+
CompactSketch - Class in org.apache.datasketches.theta
+
+
The parent class of all the CompactSketches.
+
+
CompactSketch<S extends Summary> - Class in org.apache.datasketches.tuple
+
+
CompactSketches are never created directly.
+
+
CompactSketch - org.apache.datasketches.tuple.SerializerDeserializer.SketchType
+
 
+
CompactSketch() - Constructor for class org.apache.datasketches.theta.CompactSketch
+
 
+
compareTo(Group) - Method in class org.apache.datasketches.fdt.Group
+
 
+
compareTo(ItemsSketch.Row<T>) - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
+
This compareTo is strictly limited to the Row.getEstimate() value and does not imply any + ordering whatsoever to the other elements of the row: item and upper and lower bounds.
+
+
compareTo(LongsSketch.Row) - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
+
This compareTo is strictly limited to the Row.getEstimate() value and does not imply any + ordering whatsoever to the other elements of the row: item and upper and lower bounds.
+
+
CompressionCharacterization - Class in org.apache.datasketches.cpc
+
+
This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
+
+
CompressionCharacterization(int, int, int, int, int, int, int, PrintStream, PrintWriter) - Constructor for class org.apache.datasketches.cpc.CompressionCharacterization
+
 
+
computeBytesNeeded(int) - Static method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
+
Computes number of bytes needed for packed bit encoding of the array of booleans.
+
+
computeSeedHash(long) - Static method in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
Computes and checks the 16-bit seed hash from the given long seed.
+
+
computeSeedHash(long) - Static method in class org.apache.datasketches.tuple.Util
+
+
Computes and checks the 16-bit seed hash from the given long seed.
+
+
ConcurrentBufferInserted - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was inserted into the local concurrent buffer, + but has not yet been propagated to the concurrent shared sketch.
+
+
ConcurrentPropagated - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash has been propagated to the concurrent shared sketch.
+
+
continueCondition(long, long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
Return true (continue) if hash is greater than or equal to thetaLong, or if hash == 0, + or if hash == Long.MAX_VALUE.
+
+
convertToHashTable(long[], int, long, double) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
Converts the given array to a hash table.
+
+
copy() - Method in class org.apache.datasketches.fdt.FdtSketch
+
 
+
copy() - Method in class org.apache.datasketches.hll.HllSketch
+
+
Return a copy of this sketch onto the Java heap.
+
+
copy() - Method in class org.apache.datasketches.tuple.adouble.DoubleSummary
+
 
+
copy() - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummary
+
 
+
copy() - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch
+
 
+
copy() - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummary
+
 
+
copy() - Method in interface org.apache.datasketches.tuple.Summary
+
+
Deep copy.
+
+
copy() - Method in class org.apache.datasketches.tuple.UpdatableSketch
+
 
+
copyAs(TgtHllType) - Method in class org.apache.datasketches.hll.HllSketch
+
+
Return a deep copy of this sketch onto the Java heap with the specified TgtHllType.
+
+
copyBytes(byte[], int, byte[], int, int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Copies bytes from source to target with offsets on both the source and target.
+
+
copySummaryArray(S[]) - Static method in class org.apache.datasketches.tuple.Util
+
+
Will copy compact summary arrays as well as hashed summary tables (with nulls).
+
+
count(long[], long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
Counts the cardinality of the given source array.
+
+
COUNTMIN - org.apache.datasketches.common.Family
+
+
CountMin Sketch
+
+
countPart(long[], int, long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
Counts the cardinality of the first Log2 values of the given source array.
+
+
CPC - org.apache.datasketches.common.Family
+
+
Compressed Probabilistic Counting (CPC) Sketch
+
+
CpcSketch - Class in org.apache.datasketches.cpc
+
+
This is a unique-counting sketch that implements the + Compressed Probabilistic Counting (CPC, a.k.a FM85) algorithms developed by Kevin Lang in + his paper + Back to the Future: an Even More Nearly + Optimal Cardinality Estimation Algorithm.
+
+
CpcSketch() - Constructor for class org.apache.datasketches.cpc.CpcSketch
+
+
Constructor with default log_base2 of k
+
+
CpcSketch(int) - Constructor for class org.apache.datasketches.cpc.CpcSketch
+
+
Constructor with log_base2 of k.
+
+
CpcSketch(int, long) - Constructor for class org.apache.datasketches.cpc.CpcSketch
+
+
Constructor with log_base2 of k and seed.
+
+
CpcUnion - Class in org.apache.datasketches.cpc
+
+
The union (merge) operation for the CPC sketches.
+
+
CpcUnion() - Constructor for class org.apache.datasketches.cpc.CpcUnion
+
+
Construct this unioning object with the default LgK and the default update seed.
+
+
CpcUnion(int) - Constructor for class org.apache.datasketches.cpc.CpcUnion
+
+
Construct this unioning object with LgK and the default update seed.
+
+
CpcUnion(int, long) - Constructor for class org.apache.datasketches.cpc.CpcUnion
+
+
Construct this unioning object with LgK and a given seed.
+
+
CpcWrapper - Class in org.apache.datasketches.cpc
+
+
This provides a read-only view of a serialized image of a CpcSketch, which can be + on-heap or off-heap represented as a Memory object, or on-heap represented as a byte array.
+
+
CpcWrapper(byte[]) - Constructor for class org.apache.datasketches.cpc.CpcWrapper
+
+
Construct a read-only view of the given byte array that contains a CpcSketch.
+
+
CpcWrapper(Memory) - Constructor for class org.apache.datasketches.cpc.CpcWrapper
+
+
Construct a read-only view of the given Memory that contains a CpcSketch
+
+
createCornerCaseId(long, int, boolean, long, int, boolean) - Static method in class org.apache.datasketches.thetacommon.SetOperationCornerCases
+
 
+
createEmptySketch() - Static method in class org.apache.datasketches.tuple.Sketches
+
 
+
createSketch(int, int, long) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection
+
 
+
cumWeights - Variable in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
 
+
+ + + +

D

+
+
DEFAULT_HLL_TYPE - Static variable in class org.apache.datasketches.hll.HllSketch
+
+
The default HLL-TYPE is HLL_4
+
+
DEFAULT_K - Static variable in class org.apache.datasketches.kll.KllSketch
+
+
The default K
+
+
DEFAULT_LG_K - Static variable in class org.apache.datasketches.cpc.CpcSketch
+
+
The default Log_base2 of K
+
+
DEFAULT_LG_K - Static variable in class org.apache.datasketches.hll.HllSketch
+
+
The default Log_base2 of K
+
+
DEFAULT_NOMINAL_ENTRIES - Static variable in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
The default nominal entries is provided as a convenience for those cases where the + nominal sketch size in number of entries is not provided.
+
+
DEFAULT_NOMINAL_ENTRIES - Static variable in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Default Nominal Entries (a.k.a.
+
+
DEFAULT_NUMBER_OF_VALUES - Static variable in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Default number of values
+
+
DEFAULT_UPDATE_SEED - Static variable in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
The seed 9001 used in the sketch update methods is a prime number that + was chosen very early on in experimental testing.
+
+
Degen_Degen - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Degen_Empty - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Degen_Estimation - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Degen_Exact - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
DEGEN_MIN_0_F - org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
DEGEN_MIN_0_F - org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction
+
 
+
DEGEN_MIN_0_F - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
DEGEN_THA_0_F - org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
DEGEN_THA_0_F - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
DEGEN_THB_0_F - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
desc(double[], int, int, double, int) - Method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Optional call that describes the details of the results of the search.
+
+
desc(float[], int, int, float, int) - Method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Optional call that describes the details of the results of the search.
+
+
desc(long[], int, int, double, int) - Method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Optional call that describes the details of the results of the search.
+
+
desc(long[], int, int, long, int) - Method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Optional call that describes the details of the results of the search.
+
+
deserializeFromMemory(Memory, int) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
+
Deprecated.
+
+
deserializeFromMemory(Memory, int) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
+
Deprecated.
+
+
deserializeFromMemory(Memory, int) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+ +
+
deserializeFromMemory(Memory, int) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
+
Deprecated.
+
+
deserializeFromMemory(Memory, int) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
+
Deprecated.
+
+
deserializeFromMemory(Memory, int) - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
+
Deprecated.
+
+
deserializeFromMemory(Memory, int) - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
+
Deprecated.
+
+
deserializeFromMemory(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
deserializeFromMemory(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
deserializeFromMemory(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Deserialize a contiguous sequence of serialized items from a given Memory.
+
+
deserializeFromMemory(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
deserializeFromMemory(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
deserializeFromMemory(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
deserializeFromMemory(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
DeserializeResult<T> - Class in org.apache.datasketches.tuple
+
+
Returns an object and its size in bytes as a result of a deserialize operation
+
+
DeserializeResult(T, int) - Constructor for class org.apache.datasketches.tuple.DeserializeResult
+
+
Creates an instance.
+
+
dissimilarityTest(Sketch, Sketch, double) - Static method in class org.apache.datasketches.theta.JaccardSimilarity
+
+
Tests dissimilarity of a measured Sketch against an expected Sketch.
+
+
dissimilarityTest(Sketch<S>, Sketch, S, SummarySetOperations<S>, double) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Tests dissimilarity of a measured Sketch against an expected Sketch.
+
+
dissimilarityTest(Sketch<S>, Sketch<S>, SummarySetOperations<S>, double) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Tests dissimilarity of a measured Sketch against an expected Sketch.
+
+
DOUBLES_SKETCH - org.apache.datasketches.kll.KllSketch.SketchType
+
 
+
DoubleSketch - Class in org.apache.datasketches.tuple.adouble
+
 
+
DoubleSketch(int, int, float, DoubleSummary.Mode) - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSketch
+
+
Creates this sketch with the following parameters:
+
+
DoubleSketch(int, DoubleSummary.Mode) - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSketch
+
+
Constructs this sketch with given lgK.
+
+
DoubleSketch(Memory, DoubleSummary.Mode) - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSketch
+
+
Deprecated. +
As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
+
+
+
DoublesSketch - Class in org.apache.datasketches.quantiles
+
+
This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using doubles, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
+
+
DoublesSketchBuilder - Class in org.apache.datasketches.quantiles
+
+
For building a new quantiles DoublesSketch.
+
+
DoublesSketchBuilder() - Constructor for class org.apache.datasketches.quantiles.DoublesSketchBuilder
+
+
Constructor for a new DoublesSketchBuilder.
+
+
DoublesSketchIterator - Class in org.apache.datasketches.quantiles
+
+
Iterator over DoublesSketch.
+
+
DoublesSketchSortedView - Class in org.apache.datasketches.quantiles
+
+
The SortedView of the Classic Quantiles DoublesSketch.
+
+
DoublesSketchSortedView(DoublesSketch) - Constructor for class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
+
Constructs this Sorted View given the sketch
+
+
DoublesSortedView - Interface in org.apache.datasketches.quantilescommon
+
+
The Sorted View for quantile sketches of primitive type double.
+
+
DoublesSortedViewIterator - Class in org.apache.datasketches.quantilescommon
+
+
Iterator over quantile sketches of primitive type double.
+
+
DoublesSortedViewIterator(double[], long[]) - Constructor for class org.apache.datasketches.quantilescommon.DoublesSortedViewIterator
+
 
+
DoubleSummary - Class in org.apache.datasketches.tuple.adouble
+
+
Summary for generic tuple sketches of type Double.
+
+
DoubleSummary(DoubleSummary.Mode) - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSummary
+
+
Creates an instance of DoubleSummary with a given mode.
+
+
DoubleSummary.Mode - Enum in org.apache.datasketches.tuple.adouble
+
+
The aggregation modes for this Summary
+
+
DoubleSummaryDeserializer - Class in org.apache.datasketches.tuple.adouble
+
 
+
DoubleSummaryDeserializer() - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSummaryDeserializer
+
 
+
DoubleSummaryFactory - Class in org.apache.datasketches.tuple.adouble
+
+
Factory for DoubleSummary.
+
+
DoubleSummaryFactory(DoubleSummary.Mode) - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSummaryFactory
+
+
Creates an instance of DoubleSummaryFactory with a given mode
+
+
DoubleSummarySetOperations - Class in org.apache.datasketches.tuple.adouble
+
+
Methods for defining how unions and intersections of two objects of type DoubleSummary + are performed.
+
+
DoubleSummarySetOperations() - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations
+
+
Creates an instance with default mode of sum for both union and intersection.
+
+
DoubleSummarySetOperations(DoubleSummary.Mode) - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations
+
+
Creates an instance given a DoubleSummary update mode where the mode is the same for both + union and intersection.
+
+
DoubleSummarySetOperations(DoubleSummary.Mode, DoubleSummary.Mode) - Constructor for class org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations
+
+
Creates an instance with two modes.
+
+
DoublesUnion - Class in org.apache.datasketches.quantiles
+
+
The API for Union operations for quantiles DoublesSketches
+
+
DoublesUnion() - Constructor for class org.apache.datasketches.quantiles.DoublesUnion
+
 
+
DoublesUnionBuilder - Class in org.apache.datasketches.quantiles
+
+
For building a new DoublesSketch Union operation.
+
+
DoublesUnionBuilder() - Constructor for class org.apache.datasketches.quantiles.DoublesUnionBuilder
+
+
Constructor for a new DoublesUnionBuilder.
+
+
doubleToLongArray(double) - Static method in class org.apache.datasketches.tuple.Util
+
+
Converts a double to a long[].
+
+
downSample(int) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
From an existing sketch, this creates a new sketch that can have a smaller K.
+
+
downSample(DoublesSketch, int, WritableMemory) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
From an source sketch, create a new sketch that must have a smaller K.
+
+
+ + + +

E

+
+
emitAdjSecSizeNumSec(byte) - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit adjusting section size and number of sections.
+
+
emitAllHorizList() - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit all horizontal lists
+
+
emitCompactingStart(byte) - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit Compaction Start.
+
+
emitCompactionDetail(int, int, int, int, boolean) - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit Compaction details.
+
+
emitCompactionDone(byte) - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit compaction done and number of compactions so far.
+
+
emitCompressDone() - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit compress done.
+
+
emitMustAddCompactor() - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit Must add compactor
+
+
emitNewCompactor(byte) - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit new compactor configuration
+
+
emitStart(ReqSketch) - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit the start signal
+
+
emitStartCompress() - Method in interface org.apache.datasketches.req.ReqDebug
+
+
Emit Start Compress
+
+
EMPTY_1_0_T - org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
EMPTY_1_0_T - org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction
+
 
+
EMPTY_1_0_T - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
Empty_Degen - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Empty_Empty - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Empty_Estimation - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Empty_Exact - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
EMPTY_MSG - Static variable in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
 
+
EQ - org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the adjacent pair of + values {A,B} such that A ≤ V ≤ B.
+
+
EQ - org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the adjacent pair of + values {A,B} such that A ≤ V ≤ B.
+
+
equallySpacedDoubles(int) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Returns an array of (num + 1) values that define equally sized intervals between 0.0, inclusive, and 1.0, + inclusive.
+
+
equallySpacedLongs(long, long, int) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Returns an array of (num + 1) longs that define, approximately, equally spaced intervals between the given + max, inclusive, and min, inclusive.
+
+
equals(Object) - Method in class org.apache.datasketches.fdt.Group
+
 
+
equals(Object) - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
+
This equals is computed only from the Row.getEstimate() value and does not imply equality + of the other items within the row: item and upper and lower bounds.
+
+
equals(Object) - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
+
This equals is computed only from the Row.getEstimate() value and does not imply equality + of the other items within the row: item and upper and lower bounds.
+
+
equals(Object) - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummary
+
 
+
erf(double) - Static method in class org.apache.datasketches.common.BoundsOnBinomialProportions
+
+
Computes an approximation to the erf() function.
+
+
ErrorType - Enum in org.apache.datasketches.frequencies
+
+
Specifies one of two types of error regions of the statistical classification Confusion Matrix + that can be excluded from a returned sample of Frequent Items.
+
+
estimateSubsetSum(Predicate<Long>) - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Computes an estimated subset sum from the entire stream for objects matching a given + predicate.
+
+
estimateSubsetSum(Predicate<T>) - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Computes an estimated subset sum from the entire stream for objects matching a given + predicate.
+
+
estimateSubsetSum(Predicate<T>) - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Computes an estimated subset sum from the entire stream for objects matching a given + predicate.
+
+
estimateUnknownP(long, long) - Static method in class org.apache.datasketches.common.BoundsOnBinomialProportions
+
+
Computes an estimate of an unknown binomial proportion.
+
+
Estimation_Degen - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Estimation_Empty - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Estimation_Estimation - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Estimation_Exact - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
evenlyLogSpaced(double, double, int) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Returns a double array of values between min and max inclusive where the log of the + returned values are evenly spaced.
+
+
evenlySpacedDoubles(double, double, int) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Returns a double array of evenly spaced values between value1, inclusive, and value2 inclusive.
+
+
evenlySpacedFloats(float, float, int) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
+
Returns a float array of evenly spaced values between value1, inclusive, and value2 inclusive.
+
+
Exact_Degen - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Exact_Empty - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Exact_Estimation - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
Exact_Exact - org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
exactLog2OfInt(int) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the log2 of the given int value if it is an exact power of 2 and greater than zero.
+
+
exactLog2OfInt(int, String) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the log2 of the given int value if it is an exact power of 2 and greater than zero.
+
+
exactLog2OfLong(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the log2 of the given long value if it is an exact power of 2 and greater than zero.
+
+
exactLog2OfLong(long, String) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the log2 of the given long value if it is an exact power of 2 and greater than zero.
+
+
exactlyEqual(Sketch, Sketch) - Static method in class org.apache.datasketches.theta.JaccardSimilarity
+
+
Returns true if the two given sketches have exactly the same hash values and the same + theta values.
+
+
exactlyEqual(Sketch<S>, Sketch, S, SummarySetOperations<S>) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Returns true if the two given sketches have exactly the same hash values and the same + theta values.
+
+
exactlyEqual(Sketch<S>, Sketch<S>, SummarySetOperations<S>) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Returns true if the two given sketches have exactly the same hash values and the same + theta values.
+
+
EXCLUSIVE - org.apache.datasketches.quantilescommon.QuantileSearchCriteria
+
+
Definition of EXCLUSIVE getQuantile(r) search:
+ Given rank r, return the quantile of the smallest rank that is + strictly greater than r.
+
+
+ + + +

F

+
+
Family - Enum in org.apache.datasketches.common
+
+
Defines the various families of sketch and set operation classes.
+
+
FdtSketch - Class in org.apache.datasketches.fdt
+
+
A Frequent Distinct Tuples sketch.
+
+
FdtSketch(double, double) - Constructor for class org.apache.datasketches.fdt.FdtSketch
+
+
Create a new instance of Frequent Distinct Tuples sketch with a size determined by the given + threshold and rse.
+
+
FdtSketch(int) - Constructor for class org.apache.datasketches.fdt.FdtSketch
+
+
Create new instance of Frequent Distinct Tuples sketch with the given + Log-base2 of required nominal entries.
+
+
FdtSketch(FdtSketch) - Constructor for class org.apache.datasketches.fdt.FdtSketch
+
+
Copy Constructor
+
+
filter(Sketch<T>) - Method in class org.apache.datasketches.tuple.Filter
+
+
Filters elements on the provided Sketch
+
+
Filter<T extends Summary> - Class in org.apache.datasketches.tuple
+
+
Class for filtering entries from a Sketch given a Summary
+
+
Filter(Predicate<T>) - Constructor for class org.apache.datasketches.tuple.Filter
+
+
Filter constructor with a Predicate
+
+
find(double[], int, int, double) - Static method in class org.apache.datasketches.quantilescommon.BinarySearch
+
+
Binary Search for the index of the exact double value in the given search range.
+
+
find(double[], int, int, double, InequalitySearch) - Static method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion.
+
+
find(float[], int, int, float) - Static method in class org.apache.datasketches.quantilescommon.BinarySearch
+
+
Binary Search for the index of the exact float value in the given search range.
+
+
find(float[], int, int, float, InequalitySearch) - Static method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Binary Search for the index of the float value in the given search range that satisfies + the given InequalitySearch criterion.
+
+
find(long[], int, int, double, InequalitySearch) - Static method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion.
+
+
find(long[], int, int, long) - Static method in class org.apache.datasketches.quantilescommon.BinarySearch
+
+
Binary Search for the index of the exact long value in the given search range.
+
+
find(long[], int, int, long, InequalitySearch) - Static method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Binary Search for the index of the long value in the given search range that satisfies + the given InequalitySearch criterion.
+
+
find(T[], int, int, T, GenericInequalitySearch.Inequality, Comparator<T>) - Static method in class org.apache.datasketches.quantilescommon.GenericInequalitySearch
+
+
Binary Search for the index of the generic value in the given search range that satisfies + the given Inequality criterion.
+
+
FLOATS_SKETCH - org.apache.datasketches.kll.KllSketch.SketchType
+
 
+
FloatsSortedView - Interface in org.apache.datasketches.quantilescommon
+
+
The Sorted View for quantiles of primitive type float.
+
+
FloatsSortedViewIterator - Class in org.apache.datasketches.quantilescommon
+
+
Iterator over quantile sketches of primitive type float.
+
+
FloatsSortedViewIterator(float[], long[]) - Constructor for class org.apache.datasketches.quantilescommon.FloatsSortedViewIterator
+
 
+
floorPowerBaseOfDouble(double, double) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the floor of a given n given base, where the floor is an integral power of the base.
+
+
floorPowerOf2(int) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the floor power of 2 given n is in the range [1, 2^31-1].
+
+
floorPowerOf2(long) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the floor power of 2 given n is in the range [1, 2^63-1].
+
+
FREQUENCY - org.apache.datasketches.common.Family
+
+
The Frequency family of sketches.
+
+
fromMemory(Memory) - Static method in class org.apache.datasketches.tuple.adouble.DoubleSummary
+
+
Creates an instance of the DoubleSummary given a serialized representation
+
+
fromMemory(Memory) - Static method in class org.apache.datasketches.tuple.aninteger.IntegerSummary
+
+
Creates an instance of the IntegerSummary given a serialized representation
+
+
fromOrdinal(int) - Static method in enum org.apache.datasketches.hll.TgtHllType
+
 
+
FULL_ANOTB - org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
FULL_INTERSECT - org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction
+
 
+
FULL_UNION - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
+ + + +

G

+
+
GE - org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A < V ≤ B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
GE - org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A < V ≤ B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
GenericInequalitySearch - Class in org.apache.datasketches.quantilescommon
+
+
This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values.
+
+
GenericInequalitySearch() - Constructor for class org.apache.datasketches.quantilescommon.GenericInequalitySearch
+
 
+
GenericInequalitySearch.Inequality - Enum in org.apache.datasketches.quantilescommon
+
+
The enumerator of inequalities
+
+
GenericPartitionBoundaries<T> - Class in org.apache.datasketches.quantilescommon
+
+
Implements PartitionBoundaries
+
+
GenericPartitionBoundaries(long, T[], long[], double[], T, T, QuantileSearchCriteria) - Constructor for class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
 
+
GenericSortedView<T> - Interface in org.apache.datasketches.quantilescommon
+
+
The Sorted View for quantiles of generic type.
+
+
GenericSortedViewIterator<T> - Class in org.apache.datasketches.quantilescommon
+
+
Iterator over quantile sketches of generic type.
+
+
GenericSortedViewIterator(T[], long[]) - Constructor for class org.apache.datasketches.quantilescommon.GenericSortedViewIterator
+
 
+
get() - Method in interface org.apache.datasketches.theta.HashIterator
+
+
Gets the hash value
+
+
getActionDescription() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
getActionDescription() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction
+
 
+
getActionDescription() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
getActionId() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
getActionId() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction
+
 
+
getActionId() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
getActiveEntries() - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Returns the number of active, unique keys across all internal maps
+
+
getAnotbAction() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
getAprioriError(int, long) - Static method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns the estimated a priori error given the maxMapSize for the sketch and the + estimatedTotalStreamWeight.
+
+
getAprioriError(int, long) - Static method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns the estimated a priori error given the maxMapSize for the sketch and the + estimatedTotalStreamWeight.
+
+
getAverageSketchMemoryPerKey() - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Returns the average memory storage per key that is dedicated to sketching the unique counts.
+
+
getBoundaries() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
+
Gets an ordered array of boundaries that sequentially define the upper and lower boundaries of partitions.
+
+
getBytes() - Method in enum org.apache.datasketches.kll.KllSketch.SketchType
+
 
+
getCaseDescription() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
getCDF(double[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
This is equivalent to getCDF(splitPoints, INCLUSIVE)
+
+
getCDF(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
getCDF(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getCDF(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
+
Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getCDF(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getCDF(float[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
This is equivalent to getCDF(splitPoints, INCLUSIVE)
+
+
getCDF(float[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
getCDF(float[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
+
Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getCDF(float[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getCDF(float[], QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getCDF(T[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
This is equivalent to getCDF(splitPoints, INCLUSIVE)
+
+
getCDF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getCDF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getCDF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getCDF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getCDF(T[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getCDF(T[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getClassOfT() - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
getClassOfT() - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
getClassOfT() - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Returns the concrete class of type T
+
+
getClassOfT() - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
getClassOfT() - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
getClassOfT() - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
getClassOfT() - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
getCompactBytes() - Method in class org.apache.datasketches.theta.CompactSketch
+
 
+
getCompactBytes() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns the number of storage bytes required for this Sketch if its current state were + compacted.
+
+
getCompactBytes() - Method in class org.apache.datasketches.theta.UpdateSketch
+
 
+
getCompactSerialiedSizeBytes(int, long) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns the number of bytes a DoublesSketch would require to store in compact form + given k and n.
+
+
getCompactSerializationBytes() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getCompactSerializationBytes() - Method in class org.apache.datasketches.hll.Union
+
 
+
getCompositeEstimate() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getCompositeEstimate() - Method in class org.apache.datasketches.hll.Union
+
 
+
getCount() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getCountLessThanThetaLong(long) - Method in class org.apache.datasketches.theta.Sketch
+
+
Gets the number of hash values less than the given theta expressed as a long.
+
+
getCountLessThanThetaLong(long) - Method in class org.apache.datasketches.tuple.CompactSketch
+
 
+
getCountLessThanThetaLong(long) - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the number of hash values less than the given theta expressed as a long.
+
+
getCumulativeWeights() - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
getCumulativeWeights() - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
getCumulativeWeights() - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getCumulativeWeights() - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
getCumulativeWeights() - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getCumulativeWeights() - Method in interface org.apache.datasketches.quantilescommon.SortedView
+
+
Returns the array of cumulative weights from the sketch.
+
+
getCumulativeWeights() - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
getCurrentBytes() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns the number of storage bytes required for this sketch in its current state.
+
+
getCurrentBytes() - Method in class org.apache.datasketches.theta.Union
+
+
Returns the number of storage bytes required for this union in its current state.
+
+
getCurrentBytes() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCompactSketch
+
 
+
getCurrentBytes() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
For compact sketches this is the same as getMaxBytes().
+
+
getCurrentCompactSerializedSizeBytes() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns the current number of bytes this sketch would require to store in the compact Memory Format.
+
+
getCurrentMapCapacity() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns the current number of counters the sketch is configured to support.
+
+
getCurrentMapCapacity() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns the current number of counters the sketch is configured to support.
+
+
getCurrentUpdatableSerializedSizeBytes() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns the current number of bytes this sketch would require to store in the updatable Memory Format.
+
+
getDoubleBE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a double from the given byte array starting at the given offset + in big endian order.
+
+
getDoubleLE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a double from the given byte array starting at the given offset + in little endian order.
+
+
getEffectiveK() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns the effective k of this Union.
+
+
getEffectiveK() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Returns the effective k of this Union.
+
+
getEpsilon(int) - Static method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns epsilon used to compute a priori error.
+
+
getEpsilon(int) - Static method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns epsilon used to compute a priori error.
+
+
getEstimate() - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Returns the best estimate of the cardinality of the sketch.
+
+
getEstimate() - Method in class org.apache.datasketches.cpc.CpcWrapper
+
+
Returns the best estimate of the cardinality of the sketch.
+
+
getEstimate() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getEstimate() - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
 
+
getEstimate() - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
 
+
getEstimate() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getEstimate() - Method in class org.apache.datasketches.hll.Union
+
 
+
getEstimate() - Method in class org.apache.datasketches.sampling.SampleSubsetSummary
+
 
+
getEstimate() - Method in class org.apache.datasketches.theta.Sketch
+
+
Gets the unique count estimate.
+
+
getEstimate() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Estimates the cardinality of the set (number of unique values presented to the sketch)
+
+
getEstimate() - Method in class org.apache.datasketches.tuple.Sketch
+
+
Estimates the cardinality of the set (number of unique values presented to the sketch)
+
+
getEstimate(byte[]) - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Retrieves the current estimate of unique count for a given key.
+
+
getEstimate(int) - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the estimate of the true distinct population of subset tuples represented by the count + of entries in a subset of the total retained entries of the sketch.
+
+
getEstimate(long) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Gets the estimate of the frequency of the given item.
+
+
getEstimate(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+
Gets the unique count estimate from a valid memory image of a Sketch
+
+
getEstimate(T) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Gets the estimate of the frequency of the given item.
+
+
getEstimateOfA(long, double) - Static method in class org.apache.datasketches.common.BoundsOnRatiosInSampledSets
+
+
Return the estimate of A.
+
+
getEstimateOfB(long, double) - Static method in class org.apache.datasketches.common.BoundsOnRatiosInSampledSets
+
+
Return the estimate of B.
+
+
getEstimateOfBoverA(long, long) - Static method in class org.apache.datasketches.common.BoundsOnRatiosInSampledSets
+
+
Return the estimate of b over a
+
+
getEstimateOfBoverA(Sketch, Sketch) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInThetaSketchedSets
+
+
Gets the estimate for B over A
+
+
getEstimateOfBoverA(Sketch<S>, Sketch) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
+
+
Gets the estimate for B over A
+
+
getEstimateOfBoverA(Sketch<S>, Sketch<S>) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
+
+
Gets the estimate for B over A
+
+
getFamily() - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return the DataSketches identifier for this CPC family of sketches.
+
+
getFamily() - Static method in class org.apache.datasketches.cpc.CpcUnion
+
+
Return the DataSketches identifier for this CPC family of sketches.
+
+
getFamily() - Static method in class org.apache.datasketches.cpc.CpcWrapper
+
+
Return the DataSketches identifier for this CPC family of sketches.
+
+
getFamily() - Method in class org.apache.datasketches.theta.AnotB
+
 
+
getFamily() - Method in class org.apache.datasketches.theta.CompactSketch
+
 
+
getFamily() - Method in class org.apache.datasketches.theta.Intersection
+
 
+
getFamily() - Method in class org.apache.datasketches.theta.SetOperation
+
+
Gets the Family of this SetOperation
+
+
getFamily() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns the Family that this sketch belongs to
+
+
getFamily() - Method in class org.apache.datasketches.theta.Union
+
 
+
getFamily() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns the Family
+
+
getFamilyName() - Method in enum org.apache.datasketches.common.Family
+
+
Returns the name for this family
+
+
getFloatBE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a float from the given byte array starting at the given offset + in big endian order.
+
+
getFloatLE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a float from the given byte array starting at the given offset + in little endian order.
+
+
getFraction() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getFrequentItems(long, ErrorType) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given a threshold and an ErrorCondition.
+
+
getFrequentItems(long, ErrorType) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given a threshold and an ErrorCondition.
+
+
getFrequentItems(ErrorType) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given an ErrorCondition and the default threshold.
+
+
getFrequentItems(ErrorType) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given an ErrorCondition and the default threshold.
+
+
getGroupCount() - Method in class org.apache.datasketches.fdt.PostProcessor
+
+
Returns the number of groups in the final sketch.
+
+
getGroupList(int[], int, int) - Method in class org.apache.datasketches.fdt.PostProcessor
+
+
Return the most frequent Groups associated with Primary Keys based on the size of the groups.
+
+
getHash() - Method in class org.apache.datasketches.tuple.TupleSketchIterator
+
+
Gets the hash from the current entry in the sketch, which is a hash + of the original key passed to update().
+
+
getHeader() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getHighRankAccuracy() - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
+
Gets the builder configured High Rank Accuracy.
+
+
getHighRankAccuracyMode() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getId() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
getID() - Method in enum org.apache.datasketches.common.Family
+
+
Returns the byte ID for this family
+
+
getInstance(Class<T>, int, Comparator<? super T>) - Static method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Obtains a new instance of an ItemsSketch.
+
+
getInstance(Class<T>, int, Comparator<? super T>) - Static method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Create an instance of ItemsUnion
+
+
getInstance(Class<T>, Comparator<? super T>) - Static method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Obtains a new instance of an ItemsSketch using the DEFAULT_K.
+
+
getInstance(Class<T>, Comparator<? super T>) - Static method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Create an instance of ItemsUnion with the default k
+
+
getInstance(Class<T>, Memory, Comparator<? super T>, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Heapifies the given srcMem, which must be a Memory image of a ItemsSketch
+
+
getInstance(Class<T>, Memory, Comparator<? super T>, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Heapify the given srcMem into a Union object.
+
+
getInstance(String) - Static method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns a sketch instance of this class from the given String, + which must be a String representation of this sketch class.
+
+
getInstance(Memory) - Static method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
+
+
getInstance(Memory, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
+
+
getInstance(ItemsSketch<T>) - Static method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Create an instance of ItemsUnion based on ItemsSketch
+
+
getIntBE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a int from the given byte array starting at the given offset + in big endian order.
+
+
getIntersectAction() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
getIntLE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a int from the given byte array starting at the given offset + in little endian order.
+
+
getItem() - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
 
+
getItem() - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
 
+
getItem() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples.WeightedSample
+
+
Accesses the iterator's current object
+
+
getK() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getK() - Method in class org.apache.datasketches.quantiles.DoublesSketchBuilder
+
+
Gets the current configured k
+
+
getK() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getK() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
+
+
getK() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getK() - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
+
Gets the builder configured k.
+
+
getK() - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns the sketch's value of k, the maximum number of samples stored in the + reservoir.
+
+
getK() - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns the sketch's value of k, the maximum number of samples stored in the reservoir.
+
+
getK() - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns the sketch's value of k, the maximum number of samples stored in the + sketch.
+
+
getKey() - Method in interface org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketchIterator
+
+
Gets a key from the current entry in the sketch, which is a hash + of the original key passed to update().
+
+
getKeyMemoryUsageBytes() - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Returns total bytes used for key storage
+
+
getKFromEpsilon(double, boolean) - Static method in class org.apache.datasketches.kll.KllSketch
+
+
Gets the approximate k to use given epsilon, the normalized rank error.
+
+
getKFromEpsilon(double, boolean) - Static method in class org.apache.datasketches.quantiles.ClassicUtil
+
+
Used by Classic Quantiles.
+
+
getKFromEpsilon(double, boolean) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Gets the approximate k to use given epsilon, the normalized rank error.
+
+
getKFromEpsilon(double, boolean) - Static method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Gets the approximate k to use given epsilon, the normalized rank error.
+
+
getLgConfigK() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getLgConfigK() - Method in class org.apache.datasketches.hll.Union
+
+
Gets the effective lgConfigK for the union operator, which may be less than + lgMaxK.
+
+
getLgK() - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return the parameter LgK.
+
+
getLgK() - Method in class org.apache.datasketches.cpc.CpcUnion
+
+
Returns the current value of Log_base2 of K.
+
+
getLgK() - Method in class org.apache.datasketches.cpc.CpcWrapper
+
+
Returns the configured Log_base2 of K of this sketch.
+
+
getLgNominalEntries() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Returns Log-base 2 Nominal Entries
+
+
getLgNominalEntries() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns Log-base 2 Nominal Entries
+
+
getLgNomLongs() - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Gets the Log base 2 of the configured nominal entries
+
+
getLocalLgNominalEntries() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns Log-base 2 Nominal Entries for the concurrent local sketch
+
+
getLongBE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a long from the source byte array starting at the given offset + in big endian order.
+
+
getLongLE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a long from the given byte array starting at the given offset + in little endian order.
+
+
getLowerBound() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getLowerBound() - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
 
+
getLowerBound() - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
 
+
getLowerBound() - Method in class org.apache.datasketches.sampling.SampleSubsetSummary
+
 
+
getLowerBound(byte[]) - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Returns the lower bound cardinality with respect to UniqueCountMap.getEstimate(byte[]) associated + with the given key.
+
+
getLowerBound(int) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Returns the best estimate of the lower bound of the confidence interval given kappa, + the number of standard deviations from the mean.
+
+
getLowerBound(int) - Method in class org.apache.datasketches.cpc.CpcWrapper
+
+
Returns the best estimate of the lower bound of the confidence interval given kappa, + the number of standard deviations from the mean.
+
+
getLowerBound(int) - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getLowerBound(int) - Method in class org.apache.datasketches.hll.Union
+
 
+
getLowerBound(int) - Method in class org.apache.datasketches.theta.Sketch
+
+
Gets the approximate lower error bound given the specified number of Standard Deviations.
+
+
getLowerBound(int) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Gets the approximate lower error bound given the specified number of Standard Deviations.
+
+
getLowerBound(int) - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the approximate lower error bound given the specified number of Standard Deviations.
+
+
getLowerBound(int, int) - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the estimate of the lower bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
+
+
getLowerBound(int, Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+
Gets the approximate lower error bound from a valid memory image of a Sketch + given the specified number of Standard Deviations.
+
+
getLowerBound(long) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Gets the guaranteed lower bound frequency of the given item, which can never be + negative.
+
+
getLowerBound(long, double, int, boolean) - Static method in class org.apache.datasketches.thetacommon.BinomialBoundsN
+
+
Returns the approximate lower bound value
+
+
getLowerBound(T) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Gets the guaranteed lower bound frequency of the given item, which can never be + negative.
+
+
getLowerBoundForBoverA(long, long, double) - Static method in class org.apache.datasketches.common.BoundsOnRatiosInSampledSets
+
+
Return the approximate lower bound based on a 95% confidence interval
+
+
getLowerBoundForBoverA(Sketch, Sketch) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInThetaSketchedSets
+
+
Gets the approximate lower bound for B over A based on a 95% confidence interval
+
+
getLowerBoundForBoverA(Sketch<S>, Sketch) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
+
+
Gets the approximate lower bound for B over A based on a 95% confidence interval
+
+
getLowerBoundForBoverA(Sketch<S>, Sketch<S>) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
+
+
Gets the approximate lower bound for B over A based on a 95% confidence interval
+
+
getMaxAnotBResultBytes(int) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Returns the maximum number of bytes for the returned CompactSketch, given the + value of nomEntries of the first sketch A of AnotB.
+
+
getMaxAnotBResultBytes(int) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
getMaxBytes() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCompactSketch
+
 
+
getMaxBytes() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
getMaxBytes(int, int) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
 
+
getMaxCompactSketchBytes(int) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Returns the maximum number of storage bytes required for a CompactSketch with the given + number of actual entries.
+
+
getMaxCompactSketchBytes(int) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
getMaxConcurrencyError() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Gets the Maximum Concurrency Error
+
+
getMaximumError() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
 
+
getMaximumError() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
 
+
getMaximumMapCapacity() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns the maximum number of counters the sketch is configured to support.
+
+
getMaximumMapCapacity() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns the maximum number of counters the sketch is configured to support.
+
+
getMaxIntersectionBytes(int) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Returns the maximum required storage bytes given a nomEntries parameter for Intersection + operations
+
+
getMaxIntersectionBytes(int) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
getMaxItem() - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
getMaxItem() - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
getMaxItem() - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getMaxItem() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getMaxItem() - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
getMaxItem() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getMaxItem() - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getMaxItem() - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
+
Returns the maximum item of the stream.
+
+
getMaxItem() - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
+
Returns the maximum item of the stream.
+
+
getMaxItem() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
+
Returns the maximum item of the stream.
+
+
getMaxItem() - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Returns the maximum item of the stream.
+
+
getMaxItem() - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Returns the maximum item of the stream.
+
+
getMaxItem() - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Returns the maximum item of the stream.
+
+
getMaxItem() - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Returns the maximum item of the stream.
+
+
getMaxItem() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getMaxItem() - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
getMaxK() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns the configured maxK of this Union.
+
+
getMaxK() - Method in class org.apache.datasketches.quantiles.DoublesUnionBuilder
+
+
Gets the current configured maxK
+
+
getMaxK() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Returns the configured maxK of this Union.
+
+
getMaxK() - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Returns the maximum allowed reservoir capacity in this union.
+
+
getMaxK() - Method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Returns the maximum allowed reservoir capacity in this union.
+
+
getMaxLgArrLongs(Memory) - Static method in class org.apache.datasketches.theta.Intersection
+
+
Returns the maximum lgArrLongs given the capacity of the Memory.
+
+
getMaxNumLocalThreads() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Gets the Maximum Number of Local Threads.
+
+
getMaxPreLongs() - Method in enum org.apache.datasketches.common.Family
+
+
Returns the maximum preamble size for this family in longs
+
+
getMaxSerializationBytes(int) - Static method in class org.apache.datasketches.hll.Union
+
+
Returns the maximum size in bytes that this union operator can grow to given a lgK.
+
+
getMaxSerializedBytes(int) - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
The actual size of a compressed CPC sketch has a small random variance, but the following + empirically measured size should be large enough for at least 99.9 percent of sketches.
+
+
getMaxSerializedSizeBytes(int, long, KllSketch.SketchType, boolean) - Static method in class org.apache.datasketches.kll.KllSketch
+
+
Returns upper bound on the serialized size of a KllSketch given the following parameters.
+
+
getMaxUnionBytes() - Method in class org.apache.datasketches.theta.Union
+
+
Returns the maximum required storage bytes for this union.
+
+
getMaxUnionBytes(int) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Returns the maximum required storage bytes given a nomEntries parameter for Union operations
+
+
getMaxUnionBytes(int) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
getMaxUpdatableSerializationBytes(int, TgtHllType) - Static method in class org.apache.datasketches.hll.HllSketch
+
+
Returns the maximum size in bytes that this sketch can grow to given lgConfigK.
+
+
getMaxUpdateSketchBytes(int) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Returns the maximum number of storage bytes required for an UpdateSketch with the given + number of nominal entries (power of 2).
+
+
getMaxUpdateSketchBytes(int) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
getMemoryRequestServer() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Returns the MemoryRequestServer
+
+
getMemoryRequestServer() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns the MemoryRequestServer
+
+
getMemoryUsageBytes() - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Returns total bytes used by all internal maps
+
+
getMinItem() - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
getMinItem() - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
getMinItem() - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getMinItem() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getMinItem() - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
getMinItem() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getMinItem() - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getMinItem() - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
+
Returns the minimum item of the stream.
+
+
getMinItem() - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
+
Returns the minimum item of the stream.
+
+
getMinItem() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
+
Returns the minimum item of the stream.
+
+
getMinItem() - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Returns the minimum item of the stream.
+
+
getMinItem() - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Returns the minimum item of the stream.
+
+
getMinItem() - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Returns the minimum item of the stream.
+
+
getMinItem() - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Returns the minimum item of the stream.
+
+
getMinItem() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getMinItem() - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
getMinPreLongs() - Method in enum org.apache.datasketches.common.Family
+
+
Returns the minimum preamble size for this family in longs
+
+
getN() - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
getN() - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
getN() - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getN() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getN() - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
getN() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getN() - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getN() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
 
+
getN() - Method in interface org.apache.datasketches.quantilescommon.PartitionBoundaries
+
+
Gets the length of the input stream offered to the underlying sketch.
+
+
getN() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Gets the length of the input stream offered to the sketch..
+
+
getN() - Method in interface org.apache.datasketches.quantilescommon.SortedView
+
+
Returns the total number of items presented to the sourcing sketch.
+
+
getN() - Method in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
+
Gets the total count of all items presented to the sketch.
+
+
getN() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getN() - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
getN() - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns the number of items processed from the input stream
+
+
getN() - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns the number of items processed from the input stream
+
+
getN() - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns the number of items processed from the input stream
+
+
getName() - Method in enum org.apache.datasketches.kll.KllSketch.SketchType
+
 
+
getNaturalRank(double, long, QuantileSearchCriteria) - Static method in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
 
+
getNaturalRank(QuantileSearchCriteria) - Method in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
+
Gets the natural rank at the current index (or previous index) based on the chosen search criterion.
+
+
getNaturalRanks() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
 
+
getNaturalRanks() - Method in interface org.apache.datasketches.quantilescommon.PartitionBoundaries
+
+
Gets an ordered array of natural ranks of the associated array of partition boundaries utilizing + a specified search criterion.
+
+
getNominalEntries() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Gets the configured nominal number of entries
+
+
getNormalizedRank(QuantileSearchCriteria) - Method in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
+
Gets the normalized rank at the current index (or previous index) + based on the chosen search criterion.
+
+
getNormalizedRankError(boolean) - Method in class org.apache.datasketches.kll.KllSketch
+
+
Gets the approximate rank error of this sketch normalized as a fraction between zero and one.
+
+
getNormalizedRankError(boolean) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Gets the approximate rank error of this sketch normalized as a fraction between zero and one.
+
+
getNormalizedRankError(boolean) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Gets the approximate rank error of this sketch normalized as a fraction between zero and one.
+
+
getNormalizedRankError(int, boolean) - Static method in class org.apache.datasketches.kll.KllSketch
+
+
Gets the normalized rank error given k and pmf.
+
+
getNormalizedRankError(int, boolean) - Static method in class org.apache.datasketches.quantiles.ClassicUtil
+
+
Used by Classic Quantiles.
+
+
getNormalizedRankError(int, boolean) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Gets the normalized rank error given k and pmf.
+
+
getNormalizedRankError(int, boolean) - Static method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Gets the normalized rank error given k and pmf.
+
+
getNormalizedRanks() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
 
+
getNormalizedRanks() - Method in interface org.apache.datasketches.quantilescommon.PartitionBoundaries
+
+
Gets an ordered array of normalized ranks of the associated array of partition boundaries utilizing + a specified search criterion.
+
+
getNumActiveItems() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
 
+
getNumActiveItems() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
 
+
getNumDeltaItems() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
 
+
getNumDeltaItems() - Method in interface org.apache.datasketches.quantilescommon.PartitionBoundaries
+
+
Gets the number of items to be included for each partition as an array.
+
+
getNumPartitions() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
 
+
getNumPartitions() - Method in interface org.apache.datasketches.quantilescommon.PartitionBoundaries
+
+
Gets the number of partitions
+
+
getNumPoolThreads() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Gets the number of background pool threads used for propagation in the concurrent sketches.
+
+
getNumRetained() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
getNumRetained() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getNumRetained() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getNumRetained() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Gets the number of quantiles retained by the sketch.
+
+
getNumRetained() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getNumSamples() - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns the current number of items in the reservoir, which may be smaller than the + reservoir capacity.
+
+
getNumSamples() - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns the current number of items in the reservoir, which may be smaller than the reservoir + capacity.
+
+
getNumSamples() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples
+
+
Returns the length Copies items and weights from the sketch, if necessary, and returns the + length of + any + resulting array.
+
+
getNumSamples() - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns the current number of items in the sketch, which may be smaller than the + sketch capacity.
+
+
getNumValues() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
getObject() - Method in class org.apache.datasketches.tuple.DeserializeResult
+
 
+
getP() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Returns the pre-sampling probability p
+
+
getP() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns the pre-sampling probability p
+
+
getPartitionBoundaries(int) - Method in interface org.apache.datasketches.quantilescommon.PartitioningFeature
+
+
This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
+
+
getPartitionBoundaries(int, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getPartitionBoundaries(int, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getPartitionBoundaries(int, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getPartitionBoundaries(int, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getPartitionBoundaries(int, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.PartitioningFeature
+
+
This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
+
+
getPMF(double[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
This is equivalent to getPMF(splitPoints, INCLUSIVE)
+
+
getPMF(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
getPMF(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getPMF(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
+
Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getPMF(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getPMF(float[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
This is equivalent to getPMF(splitPoints, INCLUSIVE)
+
+
getPMF(float[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
getPMF(float[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
+
Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getPMF(float[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getPMF(float[], QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getPMF(T[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
This is equivalent to getPMF(splitPoints, INCLUSIVE)
+
+
getPMF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getPMF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getPMF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getPMF(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getPMF(T[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getPMF(T[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
+
+
getPostProcessor() - Method in class org.apache.datasketches.fdt.FdtSketch
+
+
Returns the PostProcessor that enables multiple queries against the sketch results.
+
+
getPostProcessor(Group, char) - Method in class org.apache.datasketches.fdt.FdtSketch
+
+
Returns the PostProcessor that enables multiple queries against the sketch results.
+
+
getPreInts() - Method in enum org.apache.datasketches.kll.KllSketch.SketchStructure
+
 
+
getPrimaryKey() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getPropagateOrderedCompact() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Gets the Propagate Ordered Compact flag used with concurrent sketches.
+
+
getQuantile() - Method in class org.apache.datasketches.kll.KllDoublesSketchIterator
+
 
+
getQuantile() - Method in class org.apache.datasketches.kll.KllFloatsSketchIterator
+
 
+
getQuantile() - Method in class org.apache.datasketches.kll.KllItemsSketchIterator
+
 
+
getQuantile() - Method in class org.apache.datasketches.quantiles.DoublesSketchIterator
+
 
+
getQuantile() - Method in class org.apache.datasketches.quantiles.ItemsSketchIterator
+
 
+
getQuantile() - Method in class org.apache.datasketches.quantilescommon.DoublesSortedViewIterator
+
+
Gets the quantile at the current index.
+
+
getQuantile() - Method in class org.apache.datasketches.quantilescommon.FloatsSortedViewIterator
+
+
Gets the quantile at the current index.
+
+
getQuantile() - Method in class org.apache.datasketches.quantilescommon.GenericSortedViewIterator
+
+
Gets the quantile at the current index.
+
+
getQuantile() - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesSketchIterator
+
+
Gets the double quantile at the current index.
+
+
getQuantile() - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsSketchIterator
+
+
Gets the float quantile at the current index.
+
+
getQuantile() - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericSketchIterator
+
+
Gets the generic quantile at the current index.
+
+
getQuantile() - Method in class org.apache.datasketches.req.ReqSketchIterator
+
 
+
getQuantile(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
This is equivalent to getQuantile(rank, INCLUSIVE)
+
+
getQuantile(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
This is equivalent to getQuantile(rank, INCLUSIVE)
+
+
getQuantile(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
This is equivalent to getQuantile(rank, INCLUSIVE)
+
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
+
Gets the approximate quantile of the given normalized rank and the given search criterion.
+
+
getQuantile(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
+
Gets the approximate quantile of the given normalized rank and the given search criterion.
+
+
getQuantile(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Gets the approximate quantile of the given normalized rank and the given search criterion.
+
+
getQuantile(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets the approximate quantile of the given normalized rank and the given search criterion.
+
+
getQuantile(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets the approximate quantile of the given normalized rank and the given search criterion.
+
+
getQuantile(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets the approximate quantile of the given normalized rank and the given search criterion.
+
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getQuantile(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
getQuantileLowerBound(double) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
+
+
getQuantileLowerBound(double) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
+
+
getQuantileLowerBound(double) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getQuantileLowerBound(double) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
+
+
getQuantileLowerBound(double) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getQuantileLowerBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
+
+
getQuantileLowerBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
+
+
getQuantileLowerBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
+
+
getQuantileLowerBound(double) - Method in class org.apache.datasketches.req.ReqSketch
+
+
Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
+
+
getQuantileLowerBound(double, int) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getQuantiles() - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
getQuantiles() - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
getQuantiles() - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getQuantiles() - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
getQuantiles() - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getQuantiles() - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
+
Returns an array of all retained quantiles by the sketch.
+
+
getQuantiles() - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
+
Returns an array of all retained quantiles by the sketch.
+
+
getQuantiles() - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Returns the full array of quantiles.
+
+
getQuantiles() - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
getQuantiles(double[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
This is equivalent to getQuantiles(ranks, INCLUSIVE)
+
+
getQuantiles(double[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
This is equivalent to getQuantiles(ranks, INCLUSIVE)
+
+
getQuantiles(double[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
This is equivalent to getQuantiles(ranks, INCLUSIVE)
+
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getQuantiles(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets an array of quantiles from the given array of normalized ranks.
+
+
getQuantiles(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets an array of quantiles from the given array of normalized ranks.
+
+
getQuantiles(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets an array of quantiles from the given array of normalized ranks.
+
+
getQuantiles(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getQuantileUpperBound(double) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
+
+
getQuantileUpperBound(double) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
+
+
getQuantileUpperBound(double) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getQuantileUpperBound(double) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
+
+
getQuantileUpperBound(double) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getQuantileUpperBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
+
+
getQuantileUpperBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
+
+
getQuantileUpperBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
+
+
getQuantileUpperBound(double) - Method in class org.apache.datasketches.req.ReqSketch
+
+
Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
+
+
getQuantileUpperBound(double, int) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getRange(T, T, BoundsRule) - Method in interface org.apache.datasketches.partitions.SketchFillRequest
+
+
This is a callback request to the data source to fill a quantiles sketch + with a range of data between upper and lower bounds.
+
+
getRank(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
This is equivalent to getRank(quantile, INCLUSIVE)
+
+
getRank(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
getRank(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
getRank(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getRank(double, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
getRank(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
+
Gets the normalized rank corresponding to the given a quantile.
+
+
getRank(double, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets the normalized rank corresponding to the given a quantile.
+
+
getRank(float) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
This is equivalent to getRank(quantile, INCLUSIVE)
+
+
getRank(float, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
getRank(float, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
getRank(float, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
+
Gets the normalized rank corresponding to the given a quantile.
+
+
getRank(float, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets the normalized rank corresponding to the given a quantile.
+
+
getRank(float, QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getRank(float, QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
getRank(T) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
This is equivalent to getRank(T quantile, INCLUSIVE)
+
+
getRank(T, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getRank(T, QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
getRank(T, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getRank(T, QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
getRank(T, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Gets the normalized rank corresponding to the given a quantile.
+
+
getRank(T, QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets the normalized rank corresponding to the given a quantile.
+
+
getRankLowerBound(double) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankLowerBound(double) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankLowerBound(double) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
+
Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankLowerBound(double) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankLowerBound(double) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getRankLowerBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankLowerBound(double) - Method in class org.apache.datasketches.req.ReqSketch
+
+
Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankLowerBound(double, int) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getRanks(double[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
This is equivalent to getRanks(quantiles, INCLUSIVE)
+
+
getRanks(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
getRanks(double[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getRanks(double[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
+
+
getRanks(float[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
This is equivalent to getRanks(quantiles, INCLUSIVE)
+
+
getRanks(float[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
getRanks(float[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
+
+
getRanks(float[], QuantileSearchCriteria) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getRanks(T[]) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
This is equivalent to getRanks(quantiles, INCLUSIVE)
+
+
getRanks(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getRanks(T[], QuantileSearchCriteria) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getRanks(T[], QuantileSearchCriteria) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
+
+
getRankUpperBound(double) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankUpperBound(double) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankUpperBound(double) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
+
Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankUpperBound(double) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankUpperBound(double) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getRankUpperBound(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankUpperBound(double) - Method in class org.apache.datasketches.req.ReqSketch
+
+
Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
+
+
getRankUpperBound(double, int) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getReqDebug() - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
+
Gets the builder configured ReqDebug
+
+
getResizeFactor() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Returns the Resize Factor
+
+
getResizeFactor() - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Returns the configured ResizeFactor
+
+
getResizeFactor() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns the Resize Factor
+
+
getResizeFactor() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Gets the configured resize factor
+
+
getResult() - Method in class org.apache.datasketches.cpc.CpcUnion
+
+
Returns the result of union operations as a CPC sketch.
+
+
getResult() - Method in class org.apache.datasketches.hll.Union
+
+
Return the result of this union operator as an HLL_4 sketch.
+
+
getResult() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch.
+
+
getResult() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Gets the result of this Union operation as a copy of the internal state.
+
+
getResult() - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Returns a sketch representing the current state of the union.
+
+
getResult() - Method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Returns a sketch representing the current state of the union.
+
+
getResult() - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Gets the varopt sketch resulting from the union of any input sketches.
+
+
getResult() - Method in class org.apache.datasketches.theta.Intersection
+
+
Gets the result of this operation as an ordered CompactSketch on the Java heap.
+
+
getResult() - Method in class org.apache.datasketches.theta.Union
+
+
Gets the result of this operation as an ordered CompactSketch on the Java heap.
+
+
getResult() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotB
+
+
Gets the result of this operation in the form of a ArrayOfDoublesCompactSketch
+
+
getResult() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotBImpl
+
 
+
getResult() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection
+
+
Gets the internal set as an on-heap compact sketch.
+
+
getResult() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Returns the resulting union in the form of a compact sketch
+
+
getResult() - Method in class org.apache.datasketches.tuple.Intersection
+
+
Gets the internal set as an unordered CompactSketch
+
+
getResult() - Method in class org.apache.datasketches.tuple.Union
+
+
Gets the result of a sequence of stateful union operations as an unordered CompactSketch
+
+
getResult(boolean) - Method in class org.apache.datasketches.theta.AnotB
+
+
Gets the result of the multistep, stateful operation AnotB that have been executed with calls + to AnotB.setA(Sketch) and (AnotB.notB(Sketch) or + AnotB.notB(org.apache.datasketches.theta.Sketch)).
+
+
getResult(boolean) - Method in class org.apache.datasketches.tuple.AnotB
+
+
Gets the result of the multistep, stateful operation AnotB that have been executed with calls + to AnotB.setA(Sketch) and (AnotB.notB(Sketch) or + AnotB.notB(org.apache.datasketches.theta.Sketch)).
+
+
getResult(boolean) - Method in class org.apache.datasketches.tuple.Union
+
+
Gets the result of a sequence of stateful union operations as an unordered CompactSketch.
+
+
getResult(boolean, WritableMemory) - Method in class org.apache.datasketches.theta.Intersection
+
+
Gets the result of this operation as a CompactSketch in the given dstMem.
+
+
getResult(boolean, WritableMemory) - Method in class org.apache.datasketches.theta.Union
+
+
Gets the result of this operation as a CompactSketch of the chosen form.
+
+
getResult(boolean, WritableMemory, boolean) - Method in class org.apache.datasketches.theta.AnotB
+
+
Gets the result of the multistep, stateful operation AnotB that have been executed with calls + to AnotB.setA(Sketch) and (AnotB.notB(Sketch) or + AnotB.notB(org.apache.datasketches.theta.Sketch)).
+
+
getResult(int[], int, int, char) - Method in class org.apache.datasketches.fdt.FdtSketch
+
+
Returns an ordered List of Groups of the most frequent distinct population of subset tuples + represented by the count of entries of each group.
+
+
getResult(TgtHllType) - Method in class org.apache.datasketches.hll.Union
+
+
Return the result of this union operator with the specified TgtHllType
+
+
getResult(WritableMemory) - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Places the result of this Union into the provided memory as an UpdateDoublesSketch, + which enables further update operations on the resulting sketch.
+
+
getResult(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotB
+
+
Gets the result of this operation in the form of a ArrayOfDoublesCompactSketch
+
+
getResult(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotBImpl
+
 
+
getResult(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection
+
+
Gets the result of stateful intersections so far.
+
+
getResult(WritableMemory) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Returns the resulting union in the form of a compact sketch
+
+
getResultAndReset() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch.
+
+
getResultAndReset() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Gets the result of this Union operation (without a copy) and resets this Union to the + virgin state.
+
+
getRetainedEntries() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns the number of valid entries that have been retained by the sketch.
+
+
getRetainedEntries() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
getRetainedEntries() - Method in class org.apache.datasketches.tuple.CompactSketch
+
 
+
getRetainedEntries() - Method in class org.apache.datasketches.tuple.Sketch
+
 
+
getRetainedEntries(boolean) - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns the number of entries that have been retained by the sketch.
+
+
getRF(int) - Static method in enum org.apache.datasketches.common.ResizeFactor
+
+
Returns the Resize Factor given the Log-base 2 of the Resize Factor
+
+
getRowHeader() - Static method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
 
+
getRowHeader() - Static method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
 
+
getRse() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getSamples() - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a copy of the items in the reservoir, or null if empty.
+
+
getSamples() - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns a copy of the items in the reservoir.
+
+
getSamples(Class<?>) - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a copy of the items in the reservoir as members of Class clazz, or null + if empty.
+
+
getSamplingProbability() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Gets the configured sampling probability
+
+
getSearchCriteria() - Method in class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries
+
 
+
getSearchCriteria() - Method in interface org.apache.datasketches.quantilescommon.PartitionBoundaries
+
+
Gets the search criteria specified for the source sketch
+
+
getSeed() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Returns the seed
+
+
getSeed() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Returns the seed
+
+
getSerializationVersion(Memory) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Returns the serialization version from the given Memory
+
+
getSerializationVersion(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
getSerializedSizeBytes() - Method in class org.apache.datasketches.kll.KllSketch
+
+
Returns the current number of bytes this Sketch would require if serialized in compact form.
+
+
getSerializedSizeBytes() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getSerializedSizeBytes() - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Returns the current number of bytes this Sketch would require if serialized.
+
+
getSerializedSizeBytes() - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Returns the current number of bytes this Sketch would require if serialized.
+
+
getSerializedSizeBytes() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getSerVer() - Method in enum org.apache.datasketches.kll.KllSketch.SketchStructure
+
 
+
getShortBE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a short from the given byte array starting at the given offset + in big endian order.
+
+
getShortLE(byte[], int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Get a short from the given byte array starting at the given offset + in little endian order.
+
+
getSize() - Method in class org.apache.datasketches.tuple.DeserializeResult
+
 
+
getSketchSamples() - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Gets a result iterator object.
+
+
getSketchStructure(int, int) - Static method in enum org.apache.datasketches.kll.KllSketch.SketchStructure
+
 
+
getSketchType() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getSketchType(Memory) - Static method in class org.apache.datasketches.tuple.SerializerDeserializer
+
+
Gets the sketch type byte from the given Memory image
+
+
getSortedView() - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
getSortedView() - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
getSortedView() - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
getSortedView() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
getSortedView() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
getSortedView() - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets the sorted view of this sketch
+
+
getSortedView() - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets the sorted view of this sketch
+
+
getSortedView() - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets the sorted view of this sketch
+
+
getSortedView() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
getStartingCapacity(int, int) - Static method in class org.apache.datasketches.tuple.Util
+
+
Gets the starting capacity of a new sketch given the Nominal Entries and the log Resize Factor.
+
+
getStorageBytes() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns the number of bytes required to store this sketch as an array of bytes.
+
+
getStreamLength() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns the sum of the frequencies in the stream seen so far by the sketch
+
+
getStreamLength() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns the sum of the frequencies (weights or counts) in the stream seen so far by the sketch
+
+
getSummary() - Method in class org.apache.datasketches.tuple.TupleSketchIterator
+
+
Gets a Summary object from the current entry in the sketch.
+
+
getSummaryFactory() - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the Summary Factory class of type S
+
+
getTgtHllType() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getTgtHllType() - Method in class org.apache.datasketches.hll.Union
+
 
+
getTheta() - Method in class org.apache.datasketches.theta.Sketch
+
+
Gets the value of theta as a double with a value between zero and one
+
+
getTheta() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Gets the value of theta as a double between zero and one
+
+
getTheta() - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the value of theta as a double between zero and one
+
+
getThetaLong() - Method in class org.apache.datasketches.theta.Sketch
+
+
Gets the value of theta as a long
+
+
getThetaLong() - Method in class org.apache.datasketches.tuple.Sketch
+
+
Returns Theta as a long
+
+
getTotalSketchWeight() - Method in class org.apache.datasketches.sampling.SampleSubsetSummary
+
 
+
getUnionAction() - Method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
 
+
getUpdatableSerializationBytes() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getUpdatableSerializationBytes() - Method in class org.apache.datasketches.hll.Union
+
 
+
getUpdatableStorageBytes(int, long) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns the number of bytes a sketch would require to store in updatable form.
+
+
getUpperBound() - Method in class org.apache.datasketches.fdt.Group
+
 
+
getUpperBound() - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
 
+
getUpperBound() - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
 
+
getUpperBound() - Method in class org.apache.datasketches.sampling.SampleSubsetSummary
+
 
+
getUpperBound(byte[]) - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Returns the upper bound cardinality with respect to UniqueCountMap.getEstimate(byte[]) associated + with the given key.
+
+
getUpperBound(int) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Returns the best estimate of the upper bound of the confidence interval given kappa, + the number of standard deviations from the mean.
+
+
getUpperBound(int) - Method in class org.apache.datasketches.cpc.CpcWrapper
+
+
Returns the best estimate of the upper bound of the confidence interval given kappa, + the number of standard deviations from the mean.
+
+
getUpperBound(int) - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
getUpperBound(int) - Method in class org.apache.datasketches.hll.Union
+
 
+
getUpperBound(int) - Method in class org.apache.datasketches.theta.Sketch
+
+
Gets the approximate upper error bound given the specified number of Standard Deviations.
+
+
getUpperBound(int) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Gets the approximate upper error bound given the specified number of Standard Deviations.
+
+
getUpperBound(int) - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the approximate upper error bound given the specified number of Standard Deviations.
+
+
getUpperBound(int, int) - Method in class org.apache.datasketches.tuple.Sketch
+
+
Gets the estimate of the upper bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
+
+
getUpperBound(int, Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+
Gets the approximate upper error bound from a valid memory image of a Sketch + given the specified number of Standard Deviations.
+
+
getUpperBound(long) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Gets the guaranteed upper bound frequency of the given item.
+
+
getUpperBound(long, double, int, boolean) - Static method in class org.apache.datasketches.thetacommon.BinomialBoundsN
+
+
Returns the approximate upper bound value
+
+
getUpperBound(T) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Gets the guaranteed upper bound frequency of the given item.
+
+
getUpperBoundForBoverA(long, long, double) - Static method in class org.apache.datasketches.common.BoundsOnRatiosInSampledSets
+
+
Return the approximate upper bound based on a 95% confidence interval
+
+
getUpperBoundForBoverA(Sketch, Sketch) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInThetaSketchedSets
+
+
Gets the approximate upper bound for B over A based on a 95% confidence interval
+
+
getUpperBoundForBoverA(Sketch<S>, Sketch) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
+
+
Gets the approximate upper bound for B over A based on a 95% confidence interval
+
+
getUpperBoundForBoverA(Sketch<S>, Sketch<S>) - Static method in class org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
+
+
Gets the approximate upper bound for B over A based on a 95% confidence interval
+
+
getValue() - Method in enum org.apache.datasketches.common.ResizeFactor
+
+
Returns the Resize Factor
+
+
getValue() - Method in class org.apache.datasketches.tuple.adouble.DoubleSummary
+
 
+
getValue() - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummary
+
 
+
getValue() - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummary
+
 
+
getValues() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
getValues() - Method in interface org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketchIterator
+
+
Gets an array of values from the current entry in the sketch.
+
+
getWeight() - Method in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
getWeight() - Method in class org.apache.datasketches.quantiles.DoublesSketchIterator
+
 
+
getWeight() - Method in class org.apache.datasketches.quantiles.ItemsSketchIterator
+
 
+
getWeight() - Method in interface org.apache.datasketches.quantilescommon.QuantilesSketchIterator
+
+
Gets the natural weight at the current index.
+
+
getWeight() - Method in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
+
Gets the weight contribution of the item at the current index.
+
+
getWeight() - Method in class org.apache.datasketches.req.ReqSketchIterator
+
 
+
getWeight() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples.WeightedSample
+
+
Accesses the iterator's current weight value
+
+
gpb - Variable in class org.apache.datasketches.partitions.Partitioner.StackElement
+
 
+
Group - Class in org.apache.datasketches.fdt
+
+
Defines a Group from a Frequent Distinct Tuple query.
+
+
Group() - Constructor for class org.apache.datasketches.fdt.Group
+
+
Construct an empty Group
+
+
GT - org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A ≤ V < B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
GT - org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A ≤ V < B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
+ + + +

H

+
+
hash(byte[], int, int, long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash a portion of the given byte[] array.
+
+
hash(byte[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash the given byte[] array.
+
+
hash(char[], int, int, long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash a portion of the given char[] array.
+
+
hash(char[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash the given char[] array.
+
+
hash(int[], int, int, long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash a portion of the given int[] array.
+
+
hash(int[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash the given int[] array.
+
+
hash(long[], int, int, long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash a portion of the given long[] array.
+
+
hash(long[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash the given long[] array.
+
+
hash(long, long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash the given long.
+
+
hash(long, long) - Static method in class org.apache.datasketches.hash.XxHash
+
+
Returns a 64-bit hash.
+
+
hash(ByteBuffer, long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash the remaining bytes of the given ByteBuffer starting at position().
+
+
hash(Memory, long) - Static method in class org.apache.datasketches.hash.MurmurHash3
+
+
Hash the given Memory.
+
+
hash(Memory, long, long, long) - Static method in class org.apache.datasketches.hash.XxHash
+
+
Compute the hash of the given Memory object.
+
+
hashArrayInsert(long[], long[], int, long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
Inserts the given long array into the given OADH hashTable of the target size, + ignores duplicates and counts the values inserted.
+
+
hashCode() - Method in class org.apache.datasketches.fdt.Group
+
 
+
hashCode() - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
+
This hashCode is computed only from the Row.getEstimate() value.
+
+
hashCode() - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
+
This hashCode is computed only from the Row.getEstimate() value.
+
+
hashCode() - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummary
+
 
+
hashInsertOnly(long[], int, long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for on-heap.
+
+
hashInsertOnlyMemory(WritableMemory, int, long, int) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for Memory.
+
+
HashIterator - Interface in org.apache.datasketches.theta
+
+
This is used to iterate over the retained hash values of the Theta sketch.
+
+
HashOperations - Class in org.apache.datasketches.thetacommon
+
+
Helper class for the common hash table methods.
+
+
hashSearch(long[], int, long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
This is a classical Knuth-style Open Addressing, Double Hash (OADH) search scheme for on-heap.
+
+
hashSearchMemory(Memory, int, long, int) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
This is a classical Knuth-style Open Addressing, Double Hash (OADH) search scheme for Memory.
+
+
hashSearchOrInsert(long[], int, long) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for on-heap.
+
+
hashSearchOrInsertMemory(WritableMemory, int, long, int) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
This is a classical Knuth-style Open Addressing, Double Hash insert scheme, but inserts + values directly into a Memory.
+
+
hashToBytes(byte[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a byte[] and long seed.
+
+
hashToBytes(char[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a char[] and long seed.
+
+
hashToBytes(double, long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a double and long seed.
+
+
hashToBytes(int[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash an int[] and long seed.
+
+
hashToBytes(long[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a long[] and long seed.
+
+
hashToBytes(long, long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a long and long seed.
+
+
hashToBytes(String, long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a String and long seed.
+
+
hashToLongs(byte[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a byte[] and long seed.
+
+
hashToLongs(char[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a char[] and long seed.
+
+
hashToLongs(double, long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a double and long seed.
+
+
hashToLongs(int[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a int[] and long seed.
+
+
hashToLongs(long[], long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a long[] and long seed.
+
+
hashToLongs(long, long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a long and long seed.
+
+
hashToLongs(String, long) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Hash a String and long seed.
+
+
hasMemory() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
hasMemory() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
hasMemory() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns true if this union's data structure is backed by Memory or WritableMemory.
+
+
hasMemory() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
hasMemory() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Returns true if this sketch's data structure is backed by Memory or WritableMemory.
+
+
hasMemory() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns true if this sketch's data structure is backed by Memory or WritableMemory.
+
+
hasMemory() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Returns true if this sketch's data structure is backed by Memory or WritableMemory.
+
+
hasNext() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples.VarOptItemsIterator
+
 
+
hasResult() - Method in class org.apache.datasketches.theta.Intersection
+
+
Returns true if there is a valid intersection result available
+
+
hasResult() - Method in class org.apache.datasketches.tuple.Intersection
+
+
Returns true if there is a valid intersection result available
+
+
heapify(byte[]) - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return the given byte array as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
+
+
heapify(byte[]) - Static method in class org.apache.datasketches.hll.HllSketch
+
+
Heapify the given byte array, which must be a valid HllSketch image and may have data.
+
+
heapify(byte[]) - Static method in class org.apache.datasketches.hll.Union
+
+
Construct a union operator populated with the given byte array image of an HllSketch.
+
+
heapify(byte[], long) - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return the given byte array as a CpcSketch on the Java heap.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return the given Memory as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.hll.HllSketch
+
+
Heapify the given Memory, which must be a valid HllSketch image and may have data.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.hll.Union
+
+
Construct a union operator populated with the given Memory image of an HllSketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.quantiles.CompactDoublesSketch
+
 
+
heapify(Memory) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns a Heap Union object that has been initialized with the data from the given memory + image of a sketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.quantiles.UpdateDoublesSketch
+
 
+
heapify(Memory) - Static method in class org.apache.datasketches.req.ReqSketch
+
+
Returns an ReqSketch on the heap from a Memory image of the sketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns a sketch instance of this class from the given srcMem, which must be a Memory + representation of this sketch class.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Instantiates a Union from Memory
+
+
heapify(Memory) - Static method in class org.apache.datasketches.theta.CompactSketch
+
+
Heapify takes a CompactSketch image in Memory and instantiates an on-heap CompactSketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Heapify takes the SetOperations image in Memory and instantiates an on-heap + SetOperation using the + Default Update Seed.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.theta.UpdateSketch
+
+
Instantiates an on-heap UpdateSketch from Memory.
+
+
heapify(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Heapify the given Memory as an ArrayOfDoublesSketch
+
+
heapify(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Heapify the given Memory as an ArrayOfDoublesUnion
+
+
heapify(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Heapify the given Memory as an ArrayOfDoublesUpdatableSketch
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return the given Memory as a CpcSketch on the Java heap.
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.theta.CompactSketch
+
+
Heapify takes a CompactSketch image in Memory and instantiates an on-heap CompactSketch.
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Heapify takes the SetOperation image in Memory and instantiates an on-heap + SetOperation using the given expectedSeed.
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.theta.UpdateSketch
+
+
Instantiates an on-heap UpdateSketch from Memory.
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Heapify the given Memory and seed as a ArrayOfDoublesSketch
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Heapify the given Memory and seed as an ArrayOfDoublesUnion
+
+
heapify(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Heapify the given Memory and seed as a ArrayOfDoublesUpdatableSketch
+
+
heapify(Memory, Comparator<? super T>, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.kll.KllItemsSketch
+
+
Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch.
+
+
heapify(Memory, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
+
+
heapify(Memory, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Instantiates a Union from Memory
+
+
heapify(Memory, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
+
+
heapify(Memory, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Instantiates a Union from Memory
+
+
heapify(DoublesSketch) - Static method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns a Heap Union object that has been initialized with the data from the given sketch.
+
+
heapifyCompactSketch(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
heapifyCompactSketch(Memory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
heapifySetOperation(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
heapifySetOperation(Memory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
heapifySketch(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
heapifySketch(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Heapify the given Memory as an ArrayOfDoublesSketch
+
+
heapifySketch(Memory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
heapifySketch(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Heapify the given Memory and seed as a ArrayOfDoublesSketch
+
+
heapifySketch(Memory, SummaryDeserializer<S>) - Static method in class org.apache.datasketches.tuple.Sketches
+
+
Instantiate a Sketch from a given Memory.
+
+
heapifySummary(Memory) - Method in class org.apache.datasketches.tuple.adouble.DoubleSummaryDeserializer
+
 
+
heapifySummary(Memory) - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummaryDeserializer
+
 
+
heapifySummary(Memory) - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryDeserializer
+
 
+
heapifySummary(Memory) - Method in interface org.apache.datasketches.tuple.SummaryDeserializer
+
+
This is to create an instance of a Summary given a serialized representation.
+
+
heapifyUnion(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Heapify the given Memory as an ArrayOfDoublesUnion
+
+
heapifyUnion(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Heapify the given Memory and seed as an ArrayOfDoublesUnion
+
+
heapifyUpdatableSketch(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Heapify the given Memory as an ArrayOfDoublesUpdatableSketch
+
+
heapifyUpdatableSketch(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Heapify the given Memory and seed as a ArrayOfDoublesUpdatableSketch
+
+
heapifyUpdatableSketch(Memory, SummaryDeserializer<S>, SummaryFactory<S>) - Static method in class org.apache.datasketches.tuple.Sketches
+
+
Instantiate UpdatableSketch from a given Memory
+
+
heapifyUpdateSketch(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
heapifyUpdateSketch(Memory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
HLL - org.apache.datasketches.common.Family
+
+
The HLL family of sketches.
+
+
HLL_4 - org.apache.datasketches.hll.TgtHllType
+
 
+
HLL_6 - org.apache.datasketches.hll.TgtHllType
+
 
+
HLL_8 - org.apache.datasketches.hll.TgtHllType
+
 
+
HllSketch - Class in org.apache.datasketches.hll
+
+
The HllSketch is actually a collection of compact implementations of Phillipe Flajolet’s HyperLogLog (HLL) + sketch but with significantly improved error behavior and excellent speed performance.
+
+
HllSketch() - Constructor for class org.apache.datasketches.hll.HllSketch
+
+
Constructs a new on-heap sketch with the default lgConfigK and tgtHllType.
+
+
HllSketch(int) - Constructor for class org.apache.datasketches.hll.HllSketch
+
+
Constructs a new on-heap sketch with the default tgtHllType.
+
+
HllSketch(int, TgtHllType) - Constructor for class org.apache.datasketches.hll.HllSketch
+
+
Constructs a new on-heap sketch with the type of HLL sketch to configure.
+
+
HllSketch(int, TgtHllType, WritableMemory) - Constructor for class org.apache.datasketches.hll.HllSketch
+
+
Constructs a new sketch with the type of HLL sketch to configure and the given + WritableMemory as the destination for the sketch.
+
+
+ + + +

I

+
+
idToFamily(int) - Static method in enum org.apache.datasketches.common.Family
+
+
Returns the Family given the ID
+
+
INCLUDE_BOTH - org.apache.datasketches.partitions.BoundsRule
+
+
Include both the upper and lower bounds
+
+
INCLUDE_LOWER - org.apache.datasketches.partitions.BoundsRule
+
+
Include only the lower bound but not the upper bound
+
+
INCLUDE_UPPER - org.apache.datasketches.partitions.BoundsRule
+
+
Include only the upper bound but not the lower bound
+
+
INCLUSIVE - org.apache.datasketches.quantilescommon.QuantileSearchCriteria
+
+
Definition of INCLUSIVE getQuantile(r) search:
+ Given rank r, return the quantile of the smallest rank that is + strictly greater than or equal to r.
+
+
index - Variable in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
index - Variable in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
 
+
InequalitySearch - Enum in org.apache.datasketches.quantilescommon
+
+
This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values.
+
+
init(String, int, double, double, double, double, double) - Method in class org.apache.datasketches.fdt.Group
+
+
Specifies the parameters to be listed as columns
+
+
InsertedCountIncremented - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was accepted into the sketch and the retained count was incremented.
+
+
InsertedCountIncrementedRebuilt - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was accepted into the sketch, the retained count was incremented.
+
+
InsertedCountIncrementedResized - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was accepted into the sketch, the retained count was incremented.
+
+
InsertedCountNotIncremented - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was accepted into the sketch and the retained count was not incremented.
+
+
IntegerSketch - Class in org.apache.datasketches.tuple.aninteger
+
 
+
IntegerSketch(int, int, float, IntegerSummary.Mode) - Constructor for class org.apache.datasketches.tuple.aninteger.IntegerSketch
+
+
Creates this sketch with the following parameters:
+
+
IntegerSketch(int, IntegerSummary.Mode) - Constructor for class org.apache.datasketches.tuple.aninteger.IntegerSketch
+
+
Constructs this sketch with given lgK.
+
+
IntegerSketch(Memory, IntegerSummary.Mode) - Constructor for class org.apache.datasketches.tuple.aninteger.IntegerSketch
+
+
Deprecated. +
As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
+
+
+
IntegerSummary - Class in org.apache.datasketches.tuple.aninteger
+
+
Summary for generic tuple sketches of type Integer.
+
+
IntegerSummary(IntegerSummary.Mode) - Constructor for class org.apache.datasketches.tuple.aninteger.IntegerSummary
+
+
Creates an instance of IntegerSummary with a given mode.
+
+
IntegerSummary.Mode - Enum in org.apache.datasketches.tuple.aninteger
+
+
The aggregation modes for this Summary
+
+
IntegerSummaryDeserializer - Class in org.apache.datasketches.tuple.aninteger
+
 
+
IntegerSummaryDeserializer() - Constructor for class org.apache.datasketches.tuple.aninteger.IntegerSummaryDeserializer
+
 
+
IntegerSummaryFactory - Class in org.apache.datasketches.tuple.aninteger
+
+
Factory for IntegerSummary.
+
+
IntegerSummaryFactory(IntegerSummary.Mode) - Constructor for class org.apache.datasketches.tuple.aninteger.IntegerSummaryFactory
+
+
Creates an instance of IntegerSummaryFactory with a given mode
+
+
IntegerSummarySetOperations - Class in org.apache.datasketches.tuple.aninteger
+
+
Methods for defining how unions and intersections of two objects of type IntegerSummary + are performed.
+
+
IntegerSummarySetOperations(IntegerSummary.Mode, IntegerSummary.Mode) - Constructor for class org.apache.datasketches.tuple.aninteger.IntegerSummarySetOperations
+
+
Creates a new instance with two modes
+
+
intersect(Sketch) - Method in class org.apache.datasketches.theta.Intersection
+
+
Intersect the given sketch with the internal state.
+
+
intersect(Sketch, Sketch) - Method in class org.apache.datasketches.theta.Intersection
+
+
Perform intersect set operation on the two given sketch arguments and return the result as an + ordered CompactSketch on the heap.
+
+
intersect(Sketch, Sketch, boolean, WritableMemory) - Method in class org.apache.datasketches.theta.Intersection
+
+
Perform intersect set operation on the two given sketches and return the result as a + CompactSketch.
+
+
intersect(Sketch, S) - Method in class org.apache.datasketches.tuple.Intersection
+
+
Performs a stateful intersection of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary and rules + from the summarySetOps defined by the Intersection constructor.
+
+
intersect(ArrayOfDoublesSketch, ArrayOfDoublesCombiner) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection
+
+
Performs a stateful intersection of the internal set with the given tupleSketch.
+
+
intersect(Sketch<S>) - Method in class org.apache.datasketches.tuple.Intersection
+
+
Performs a stateful intersection of the internal set with the given tupleSketch.
+
+
intersect(Sketch<S>, Sketch, S) - Method in class org.apache.datasketches.tuple.Intersection
+
+
Perform a stateless intersect set operation on a tuple sketch and a theta sketch and returns the + result as an unordered CompactSketch on the heap.
+
+
intersect(Sketch<S>, Sketch<S>) - Method in class org.apache.datasketches.tuple.Intersection
+
+
Perform a stateless intersect set operation on the two given tuple sketches and returns the + result as an unordered CompactSketch on the heap.
+
+
intersection(DoubleSummary, DoubleSummary) - Method in class org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations
+
 
+
intersection(IntegerSummary, IntegerSummary) - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummarySetOperations
+
 
+
intersection(ArrayOfStringsSummary, ArrayOfStringsSummary) - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummarySetOperations
+
 
+
intersection(S, S) - Method in interface org.apache.datasketches.tuple.SummarySetOperations
+
+
This is called by the intersection operator when both sketches have the same hash value.
+
+
Intersection - Class in org.apache.datasketches.theta
+
+
The API for intersection operations
+
+
Intersection<S extends Summary> - Class in org.apache.datasketches.tuple
+
+
Computes an intersection of two or more generic tuple sketches or generic tuple sketches + combined with theta sketches.
+
+
Intersection() - Constructor for class org.apache.datasketches.theta.Intersection
+
 
+
Intersection(SummarySetOperations<S>) - Constructor for class org.apache.datasketches.tuple.Intersection
+
+
Creates new Intersection instance with instructions on how to process two summaries that + intersect.
+
+
INTERSECTION - org.apache.datasketches.common.Family
+
+
The Intersection family is an operation for the Theta Sketch Framework of sketches.
+
+
intToBytes(int, byte[]) - Static method in class org.apache.datasketches.common.Util
+
+
Returns a Little-Endian byte array extracted from the given int.
+
+
intToFixedLengthString(int, int) - Static method in class org.apache.datasketches.common.Util
+
+
Converts the given number to a string prepended with spaces, if necessary, to + match the given length.
+
+
INVERSE_GOLDEN - Static variable in class org.apache.datasketches.common.Util
+
+
The inverse golden ratio as a fraction.
+
+
INVERSE_GOLDEN_U64 - Static variable in class org.apache.datasketches.common.Util
+
+
The inverse golden ratio as an unsigned long.
+
+
invPow2(int) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the inverse integer power of 2: 1/(2^e) = 2^(-e).
+
+
isCompact() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
isCompact() - Method in class org.apache.datasketches.hll.Union
+
 
+
isCompact() - Method in class org.apache.datasketches.theta.CompactSketch
+
 
+
isCompact() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns true if this sketch is in compact form.
+
+
isCompact() - Method in class org.apache.datasketches.theta.UpdateSketch
+
 
+
isCompactMemoryFormat() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
isDirect() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
isDirect() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
isDirect() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns true if this union is off-heap (direct)
+
+
isDirect() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
isDirect() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Returns true if this union is direct
+
+
isDirect() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
+
+
isDirect() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns true if the this sketch's internal data structure is backed by direct (off-heap) + Memory.
+
+
isEmpty() - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return true if this sketch is empty
+
+
isEmpty() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns true if this sketch is empty
+
+
isEmpty() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns true if this sketch is empty
+
+
isEmpty() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
isEmpty() - Method in class org.apache.datasketches.hll.Union
+
 
+
isEmpty() - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
isEmpty() - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
isEmpty() - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
isEmpty() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
isEmpty() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
isEmpty() - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
isEmpty() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns true if this union is empty
+
+
isEmpty() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
isEmpty() - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
isEmpty() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Returns true if this union is empty
+
+
isEmpty() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Returns true if this sketch is empty.
+
+
isEmpty() - Method in interface org.apache.datasketches.quantilescommon.SortedView
+
+
Returns true if this sorted view is empty.
+
+
isEmpty() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
isEmpty() - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
isEmpty() - Method in class org.apache.datasketches.theta.Sketch
+
+ +
+
isEmpty() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+ +
+
isEmpty() - Method in class org.apache.datasketches.tuple.Sketch
+
+ +
+
isEstimationMode() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
isEstimationMode() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
isEstimationMode() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
isEstimationMode() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Returns true if this sketch is in estimation mode.
+
+
isEstimationMode() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
isEstimationMode() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns true if the sketch is Estimation Mode (as opposed to Exact Mode).
+
+
isEstimationMode() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Returns true if the sketch is Estimation Mode (as opposed to Exact Mode).
+
+
isEstimationMode() - Method in class org.apache.datasketches.tuple.Sketch
+
+
Returns true if the sketch is Estimation Mode (as opposed to Exact Mode).
+
+
isEven(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns true if given n is even.
+
+
isInitialized_ - Variable in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
isIntPowerOf2(int) - Static method in class org.apache.datasketches.common.Util
+
+
Returns true if given int argument is exactly a positive power of 2 and greater than zero.
+
+
isLessThanUnsigned(long, long) - Static method in class org.apache.datasketches.common.Util
+
+
Unsigned compare with longs.
+
+
isLongPowerOf2(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns true if given long argument is exactly a positive power of 2 and greater than zero.
+
+
isMemory() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
isMemory() - Method in class org.apache.datasketches.hll.Union
+
 
+
isMemoryUpdatableFormat() - Method in class org.apache.datasketches.kll.KllSketch
+
+
Returns true if the backing WritableMemory is in updatable format.
+
+
isMultipleOf8AndGT0(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns true if v is a multiple of 8 and greater than zero
+
+
isOdd(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns true if given n is odd.
+
+
isOffHeap() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
isOffHeap() - Method in class org.apache.datasketches.hll.Union
+
 
+
isOrdered() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns true if internal cache is ordered
+
+
isOrdered() - Method in class org.apache.datasketches.theta.UpdateSketch
+
 
+
isReadOnly() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
isReadOnly() - Method in class org.apache.datasketches.quantiles.CompactDoublesSketch
+
 
+
isReadOnly() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
isReadOnly() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
isReadOnly() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Returns true if this sketch is read only.
+
+
isSameResource(Memory) - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
isSameResource(Memory) - Method in class org.apache.datasketches.hll.Union
+
 
+
isSameResource(Memory) - Method in class org.apache.datasketches.kll.KllSketch
+
+
Returns true if the backing resource of this is identical with the backing resource + of that.
+
+
isSameResource(Memory) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns true if the backing resource of this is identical with the backing resource + of that.
+
+
isSameResource(Memory) - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns true if the backing resource of this is identical with the backing resource + of that.
+
+
isSameResource(Memory) - Method in class org.apache.datasketches.theta.SetOperation
+
+
Returns true if the backing resource of this is identical with the backing resource + of that.
+
+
isSameResource(Memory) - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns true if the backing resource of this is identical with the backing resource + of that.
+
+
items() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples
+
+
Returns a shallow copy of the array of sample items contained in the sketch.
+
+
items(int) - Method in class org.apache.datasketches.sampling.VarOptItemsSamples
+
+
Returns a single item from the samples contained in the sketch.
+
+
ITEMS_SKETCH - org.apache.datasketches.kll.KllSketch.SketchType
+
 
+
ItemsSketch<T> - Class in org.apache.datasketches.frequencies
+
+
This sketch is useful for tracking approximate frequencies of items of type <T> + with optional associated counts (<T> item, long count) that are members of a + multiset of such items.
+
+
ItemsSketch<T> - Class in org.apache.datasketches.quantiles
+
+
This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using generic items, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
+
+
ItemsSketch(int) - Constructor for class org.apache.datasketches.frequencies.ItemsSketch
+
+
Construct this sketch with the parameter maxMapSize and the default initialMapSize (8).
+
+
ItemsSketch.Row<T> - Class in org.apache.datasketches.frequencies
+
+
Row class that defines the return values from a getFrequentItems query.
+
+
ItemsSketchIterator<T> - Class in org.apache.datasketches.quantiles
+
+
Iterator over ItemsSketch.
+
+
ItemsSketchSortedView<T> - Class in org.apache.datasketches.quantiles
+
+
The SortedView of the Classic Quantiles ItemsSketch.
+
+
ItemsUnion<T> - Class in org.apache.datasketches.quantiles
+
+
The API for Union operations for generic ItemsSketches
+
+
iterator() - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
iterator() - Method in class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
 
+
iterator() - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
iterator() - Method in class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
 
+
iterator() - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
iterator() - Method in class org.apache.datasketches.kll.KllItemsSketchSortedView
+
 
+
iterator() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
iterator() - Method in class org.apache.datasketches.quantiles.DoublesSketchSortedView
+
 
+
iterator() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
iterator() - Method in class org.apache.datasketches.quantiles.ItemsSketchSortedView
+
 
+
iterator() - Method in interface org.apache.datasketches.quantilescommon.DoublesSortedView
+
 
+
iterator() - Method in interface org.apache.datasketches.quantilescommon.FloatsSortedView
+
 
+
iterator() - Method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
 
+
iterator() - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Gets the iterator for this sketch, which is not sorted.
+
+
iterator() - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Gets the iterator for this sketch, which is not sorted.
+
+
iterator() - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Gets the iterator for this sketch, which is not sorted.
+
+
iterator() - Method in interface org.apache.datasketches.quantilescommon.SortedView
+
+
Returns an iterator for this Sorted View.
+
+
iterator() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
iterator() - Method in class org.apache.datasketches.req.ReqSketchSortedView
+
 
+
iterator() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples
+
 
+
iterator() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns a HashIterator that can be used to iterate over the retained hash values of the + Theta sketch.
+
+
iterator() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
iterator() - Method in class org.apache.datasketches.tuple.CompactSketch
+
 
+
iterator() - Method in class org.apache.datasketches.tuple.Sketch
+
+
Returns a SketchIterator
+
+
+ + + +

J

+
+
jaccard(Sketch, Sketch) - Static method in class org.apache.datasketches.theta.JaccardSimilarity
+
+
Computes the Jaccard similarity index with upper and lower bounds.
+
+
jaccard(Sketch<S>, Sketch, S, SummarySetOperations<S>) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Computes the Jaccard similarity index with upper and lower bounds.
+
+
jaccard(Sketch<S>, Sketch<S>, SummarySetOperations<S>) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Computes the Jaccard similarity index with upper and lower bounds.
+
+
JaccardSimilarity - Class in org.apache.datasketches.theta
+
+
Jaccard similarity of two Theta Sketches.
+
+
JaccardSimilarity - Class in org.apache.datasketches.tuple
+
+
Jaccard similarity of two Tuple Sketches, or alternatively, of a Tuple and Theta Sketch.
+
+
JaccardSimilarity() - Constructor for class org.apache.datasketches.theta.JaccardSimilarity
+
 
+
JaccardSimilarity() - Constructor for class org.apache.datasketches.tuple.JaccardSimilarity
+
 
+
justification() - Method in annotation type org.apache.datasketches.common.SuppressFBWarnings
+
+
Optional explanation for the suppression.
+
+
+ + + +

K

+
+
KLL - org.apache.datasketches.common.Family
+
+
KLL quantiles sketch
+
+
KllDoublesSketch - Class in org.apache.datasketches.kll
+
+
This variation of the KllSketch implements primitive doubles.
+
+
KllDoublesSketchIterator - Class in org.apache.datasketches.kll
+
+
Iterator over KllDoublesSketch.
+
+
KllDoublesSketchSortedView - Class in org.apache.datasketches.kll
+
+
The SortedView of the KllDoublesSketch.
+
+
KllDoublesSketchSortedView(KllDoublesSketch) - Constructor for class org.apache.datasketches.kll.KllDoublesSketchSortedView
+
+
Constructs this Sorted View given the sketch
+
+
KllFloatsSketch - Class in org.apache.datasketches.kll
+
+
This variation of the KllSketch implements primitive floats.
+
+
KllFloatsSketchIterator - Class in org.apache.datasketches.kll
+
+
Iterator over KllFloatsSketch.
+
+
KllFloatsSketchSortedView - Class in org.apache.datasketches.kll
+
+
The SortedView of the KllFloatsSketch.
+
+
KllFloatsSketchSortedView(KllFloatsSketch) - Constructor for class org.apache.datasketches.kll.KllFloatsSketchSortedView
+
+
Constructs this Sorted View given the sketch
+
+
KllItemsSketch<T> - Class in org.apache.datasketches.kll
+
+
This variation of the KllSketch implements generic data types.
+
+
KllItemsSketchIterator<T> - Class in org.apache.datasketches.kll
+
+
Iterator over KllItemsSketch.
+
+
KllItemsSketchSortedView<T> - Class in org.apache.datasketches.kll
+
+
The SortedView of the KllItemsSketch.
+
+
KllSketch - Class in org.apache.datasketches.kll
+
+
This class is the root of the KLL sketch class hierarchy.
+
+
KllSketch.SketchStructure - Enum in org.apache.datasketches.kll
+
+
Used primarily to define the structure of the serialized sketch.
+
+
KllSketch.SketchType - Enum in org.apache.datasketches.kll
+
+
Used to define the variable type of the current instance of this class.
+
+
KllSketchIterator - Class in org.apache.datasketches.kll
+
+
The base implementation for the KLL sketch iterator hierarchy used for viewing the + non-ordered quantiles retained by a sketch.
+
+
+ + + +

L

+
+
le(Object, Object, Comparator<? super T>) - Static method in class org.apache.datasketches.common.Util
+
+
Is item1 Less-Than-Or-Equal-To item2
+
+
LE - org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A ≤ V < B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
LE - org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A ≤ V < B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
level - Variable in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
levelPartId - Variable in class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow
+
 
+
levelPartId - Variable in class org.apache.datasketches.partitions.Partitioner.StackElement
+
 
+
levelsArr - Variable in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
lg() - Method in enum org.apache.datasketches.common.ResizeFactor
+
+
Returns the Log-base 2 of the Resize Factor
+
+
log2(double) - Static method in class org.apache.datasketches.common.Util
+
+
The log2(value)
+
+
LOG2 - Static variable in class org.apache.datasketches.common.Util
+
+
The natural logarithm of 2.0.
+
+
logBaseOfX(double, double) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the logbase(x).
+
+
LONG_MAX_VALUE_AS_DOUBLE - Static variable in class org.apache.datasketches.common.Util
+
+
Long.MAX_VALUE as a double.
+
+
LongsSketch - Class in org.apache.datasketches.frequencies
+
+
This sketch is useful for tracking approximate frequencies of long items with optional + associated counts (long item, long count) that are members of a multiset of + such items.
+
+
LongsSketch(int) - Constructor for class org.apache.datasketches.frequencies.LongsSketch
+
+
Construct this sketch with the parameter maxMapSize and the default initialMapSize (8).
+
+
LongsSketch.Row - Class in org.apache.datasketches.frequencies
+
+
Row class that defines the return values from a getFrequentItems query.
+
+
longToBytes(long, byte[]) - Static method in class org.apache.datasketches.common.Util
+
+
Returns a Little-Endian byte array extracted from the given long.
+
+
longToHexBytes(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns a string of spaced hex bytes in Big-Endian order.
+
+
lowerBound - Variable in class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow
+
 
+
LS - Static variable in class org.apache.datasketches.common.Util
+
+
The java line separator character as a String.
+
+
lt(Object, Object, Comparator<? super T>) - Static method in class org.apache.datasketches.common.Util
+
+
Is item1 Less-Than item2
+
+
LT - org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality
+
+
Given a sorted array of increasing values arr[] and a key value v, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A < v ≤ B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
LT - org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Given a sorted array of increasing values arr[] and a key value v, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A < v ≤ B.
+ Let low = index of the lowest value in the range.
+ Let high = index of the highest value in the range.
+
+
+ + + +

M

+
+
Max - org.apache.datasketches.tuple.adouble.DoubleSummary.Mode
+
+
The aggregation mode is the maximum function.
+
+
Max - org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode
+
+
The aggregation mode is the maximum function.
+
+
MAX_K - Static variable in class org.apache.datasketches.kll.KllSketch
+
+
The maximum K
+
+
MAX_LG_NOM_LONGS - Static variable in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
The largest Log2 nom entries allowed: 26.
+
+
maxT(Object, Object, Comparator<? super T>) - Static method in class org.apache.datasketches.common.Util
+
+
Finds the maximum of two generic items
+
+
MEM_REQ_SVR_NULL_MSG - Static variable in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
 
+
memChecks(Memory) - Static method in class org.apache.datasketches.theta.Intersection
+
 
+
merge(ItemsSketch<T>) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
This function merges the other sketch into this one.
+
+
merge(LongsSketch) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
This function merges the other sketch into this one.
+
+
merge(KllSketch) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
merge(KllSketch) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
merge(KllSketch) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
merge(KllSketch) - Method in class org.apache.datasketches.kll.KllSketch
+
+
Merges another sketch into this one.
+
+
merge(ReqSketch) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
MergingValidation - Class in org.apache.datasketches.cpc
+
+
This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
+
+
MergingValidation(int, int, int, int, int, PrintStream, PrintWriter) - Constructor for class org.apache.datasketches.cpc.MergingValidation
+
 
+
milliSecToString(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the given time in milliseconds formatted as Hours:Min:Sec.mSec
+
+
Min - org.apache.datasketches.tuple.adouble.DoubleSummary.Mode
+
+
The aggregation mode is the minimum function.
+
+
Min - org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode
+
+
The aggregation mode is the minimum function.
+
+
MIN_LG_ARR_LONGS - Static variable in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
The smallest Log2 cache size allowed: 5.
+
+
MIN_LG_NOM_LONGS - Static variable in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
The smallest Log2 nom entries allowed: 4.
+
+
minLgHashTableSize(int, double) - Static method in class org.apache.datasketches.thetacommon.HashOperations
+
+
Returns the smallest log hash table size given the count of items and the rebuild threshold.
+
+
minT(Object, Object, Comparator<? super T>) - Static method in class org.apache.datasketches.common.Util
+
+
Finds the minimum of two generic items
+
+
modulo(long[], int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the + divisor.
+
+
modulo(long, long, int) - Static method in class org.apache.datasketches.hash.MurmurHash3Adaptor
+
+
Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the + divisor.
+
+
MurmurHash3 - Class in org.apache.datasketches.hash
+
+
+ The MurmurHash3 is a fast, non-cryptographic, 128-bit hash function that has + excellent avalanche and 2-way bit independence properties.
+
+
MurmurHash3Adaptor - Class in org.apache.datasketches.hash
+
+
A general purpose wrapper for the MurmurHash3.
+
+
+ + + +

N

+
+
nanoSecToString(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the given time in nanoseconds formatted as Sec.mSec_uSec_nSec
+
+
newDirectInstance(int, WritableMemory, MemoryRequestServer) - Static method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Create a new direct updatable instance of this sketch with a given k.
+
+
newDirectInstance(int, WritableMemory, MemoryRequestServer) - Static method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Create a new direct updatable instance of this sketch with a given k.
+
+
newDirectInstance(WritableMemory, MemoryRequestServer) - Static method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Create a new direct updatable instance of this sketch with the default k.
+
+
newDirectInstance(WritableMemory, MemoryRequestServer) - Static method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Create a new direct updatable instance of this sketch with the default k.
+
+
newHeapInstance() - Static method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Create a new heap instance of this sketch with the default k = 200.
+
+
newHeapInstance() - Static method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Create a new heap instance of this sketch with the default k = 200.
+
+
newHeapInstance(int) - Static method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Create a new heap instance of this sketch with a given parameter k.
+
+
newHeapInstance(int) - Static method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Create a new heap instance of this sketch with a given parameter k.
+
+
newHeapInstance(int, Comparator<? super T>, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.kll.KllItemsSketch
+
+
Create a new heap instance of this sketch with a given parameter k.
+
+
newHeapInstance(Comparator<? super T>, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.kll.KllItemsSketch
+
+
Create a new heap instance of this sketch with the default k = 200.
+
+
newInstance(int) - Static method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Construct a mergeable sampling sketch with up to k samples using the default resize + factor (8).
+
+
newInstance(int) - Static method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Creates an empty Union with a maximum reservoir capacity of size k.
+
+
newInstance(int) - Static method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Construct a mergeable reservoir sampling sketch with up to k samples using the default resize + factor (8).
+
+
newInstance(int) - Static method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Creates an empty Union with a maximum reservoir capacity of size k.
+
+
newInstance(int) - Static method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Construct a varopt sampling sketch with up to k samples using the default resize factor (8).
+
+
newInstance(int) - Static method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Creates an empty Union with a maximum capacity of size k.
+
+
newInstance(int, ResizeFactor) - Static method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Construct a mergeable sampling sketch with up to k samples using a specified resize factor.
+
+
newInstance(int, ResizeFactor) - Static method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Construct a mergeable reservoir sampling sketch with up to k samples using the default resize + factor (8).
+
+
newInstance(int, ResizeFactor) - Static method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Construct a varopt sampling sketch with up to k samples using the specified resize factor.
+
+
newSummary() - Method in class org.apache.datasketches.tuple.adouble.DoubleSummaryFactory
+
 
+
newSummary() - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummaryFactory
+
 
+
newSummary() - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryFactory
+
 
+
newSummary() - Method in interface org.apache.datasketches.tuple.SummaryFactory
+
 
+
newSummaryArray(S[], int) - Static method in class org.apache.datasketches.tuple.Util
+
 
+
next() - Method in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
next() - Method in class org.apache.datasketches.quantiles.DoublesSketchIterator
+
 
+
next() - Method in class org.apache.datasketches.quantiles.ItemsSketchIterator
+
 
+
next() - Method in interface org.apache.datasketches.quantilescommon.QuantilesSketchIterator
+
+
Advances the index and checks if it is valid.
+
+
next() - Method in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
+
Advances the index and checks if it is valid.
+
+
next() - Method in class org.apache.datasketches.req.ReqSketchIterator
+
 
+
next() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples.VarOptItemsIterator
+
 
+
next() - Method in interface org.apache.datasketches.theta.HashIterator
+
+
Returns true at the next hash value in sequence.
+
+
next() - Method in interface org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketchIterator
+
+
Advancing the iterator and checking existence of the next entry + is combined here for efficiency.
+
+
next() - Method in class org.apache.datasketches.tuple.TupleSketchIterator
+
+
Advancing the iterator and checking existence of the next entry + is combined here for efficiency.
+
+
NO_FALSE_NEGATIVES - org.apache.datasketches.frequencies.ErrorType
+
+
No Type II error samples will be excluded from the sample set, + which means all Truly Positive samples will be included in the sample set.
+
+
NO_FALSE_POSITIVES - org.apache.datasketches.frequencies.ErrorType
+
+
No Type I error samples will be included in the sample set, + which means all Truly Negative samples will be excluded from the sample set.
+
+
normalCDF(double) - Static method in class org.apache.datasketches.common.BoundsOnBinomialProportions
+
+
Computes an approximation to normalCDF(x).
+
+
NOT_SINGLE_ITEM_MSG - Static variable in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
 
+
notB(Sketch) - Method in class org.apache.datasketches.theta.AnotB
+
+
This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + second (or n+1th) argument B of A-AND-NOT-B.
+
+
notB(Sketch) - Method in class org.apache.datasketches.tuple.AnotB
+
+
This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + second (or n+1th) argument B of A-AND-NOT-B.
+
+
notB(Sketch<S>) - Method in class org.apache.datasketches.tuple.AnotB
+
+
This is part of a multistep, stateful AnotB operation and sets the given Tuple sketch as the + second (or n+1th) argument B of A-AND-NOT-B.
+
+
numberOfLeadingOnes(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the number of one bits preceding the highest-order ("leftmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
+
+
numberOfTrailingOnes(long) - Static method in class org.apache.datasketches.common.Util
+
+
Returns the number of one bits following the lowest-order ("rightmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
+
+
numDigits(int) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the number of decimal digits of the number n
+
+
numLevels - Variable in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
+ + + +

O

+
+
org.apache.datasketches - package org.apache.datasketches
+
+
This package is the parent package for all sketch families and common code areas.
+
+
org.apache.datasketches.common - package org.apache.datasketches.common
+
+
This package is for common classes that may be used across all the sketch families.
+
+
org.apache.datasketches.cpc - package org.apache.datasketches.cpc
+
+
Compressed Probabilistic Counting sketch family
+
+
org.apache.datasketches.fdt - package org.apache.datasketches.fdt
+
+
Frequent Distinct Tuples Sketch
+
+
org.apache.datasketches.frequencies - package org.apache.datasketches.frequencies
+
+
This package is dedicated to streaming algorithms that enable estimation of the + frequency of occurrence of items in a weighted multiset stream of items.
+
+
org.apache.datasketches.hash - package org.apache.datasketches.hash
+
+
The hash package contains a high-performing and extended Java implementations + of Austin Appleby's 128-bit MurmurHash3 hash function originally coded in C.
+
+
org.apache.datasketches.hll - package org.apache.datasketches.hll
+
+
The DataSketches™ HLL sketch family package
+
+
org.apache.datasketches.hllmap - package org.apache.datasketches.hllmap
+
+
The hllmap package contains a space efficient HLL mapping sketch of keys to approximate unique + count of identifiers.
+
+
org.apache.datasketches.kll - package org.apache.datasketches.kll
+
+
This package is for the implementations of the sketch algorithm developed by Zohar Karnin, Kevin Lang, + and Edo Liberty that is commonly referred to as the "KLL" sketch after the authors' last names.
+
+
org.apache.datasketches.partitions - package org.apache.datasketches.partitions
+
 
+
org.apache.datasketches.quantiles - package org.apache.datasketches.quantiles
+
+
The quantiles package contains stochastic streaming algorithms that enable single-pass + analysis of the distribution of a stream of quantiles.
+
+
org.apache.datasketches.quantilescommon - package org.apache.datasketches.quantilescommon
+
+
This package contains common tools and methods for the quantiles, kll and + req packages.
+
+
org.apache.datasketches.req - package org.apache.datasketches.req
+
+
This package is for the implementation of the Relative Error Quantiles sketch algorithm.
+
+
org.apache.datasketches.sampling - package org.apache.datasketches.sampling
+
+
This package is dedicated to streaming algorithms that enable fixed size, uniform sampling of + weighted and unweighted items from a stream.
+
+
org.apache.datasketches.theta - package org.apache.datasketches.theta
+
+
The theta package contains the basic sketch classes that are members of the + Theta Sketch Framework.
+
+
org.apache.datasketches.thetacommon - package org.apache.datasketches.thetacommon
+
+
This package contains common tools and methods for the theta, + tuple, tuple/* and fdt packages.
+
+
org.apache.datasketches.tuple - package org.apache.datasketches.tuple
+
+
The tuple package contains a number of sketches based on the same + fundamental algorithms of the Theta Sketch Framework and extend these + concepts for whole new families of sketches.
+
+
org.apache.datasketches.tuple.adouble - package org.apache.datasketches.tuple.adouble
+
+
This package is for a generic implementation of the Tuple sketch for single Double value.
+
+
org.apache.datasketches.tuple.aninteger - package org.apache.datasketches.tuple.aninteger
+
+
This package is for a generic implementation of the Tuple sketch for single Integer value.
+
+
org.apache.datasketches.tuple.arrayofdoubles - package org.apache.datasketches.tuple.arrayofdoubles
+
+
This package is for a concrete implementation of the Tuple sketch for an array of double values.
+
+
org.apache.datasketches.tuple.strings - package org.apache.datasketches.tuple.strings
+
+
This package is for a generic implementation of the Tuple sketch for single String value.
+
+
+ + + +

P

+
+
packBits(long, int, byte[], int, int) - Static method in class org.apache.datasketches.theta.BitPacking
+
 
+
part - Variable in class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow
+
 
+
part - Variable in class org.apache.datasketches.partitions.Partitioner.StackElement
+
 
+
partition(S) - Method in class org.apache.datasketches.partitions.Partitioner
+
+
This initiates the partitioning process
+
+
PartitionBoundaries - Interface in org.apache.datasketches.quantilescommon
+
+
This defines a set of results computed from the getParitionBoundaries() function and + encapsulates the basic methods needed to construct actual partitions based on generic items.
+
+
PartitionBoundsRow(Partitioner.StackElement<T>) - Constructor for class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow
+
 
+
Partitioner<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>> - Class in org.apache.datasketches.partitions
+
+
A partitioning process that can partition very large data sets into thousands + of partitions of approximately the same size.
+
+
Partitioner(long, int, SketchFillRequest<T, S>) - Constructor for class org.apache.datasketches.partitions.Partitioner
+
+
This constructor assumes a QuantileSearchCriteria of INCLUSIVE.
+
+
Partitioner(long, int, SketchFillRequest<T, S>, QuantileSearchCriteria) - Constructor for class org.apache.datasketches.partitions.Partitioner
+
+
This constructor includes the QuantileSearchCriteria criteria as a parameter.
+
+
Partitioner.PartitionBoundsRow<T> - Class in org.apache.datasketches.partitions
+
+
Defines a row for List of PartitionBounds.
+
+
Partitioner.StackElement<T> - Class in org.apache.datasketches.partitions
+
+
Holds data for a Stack element
+
+
PartitioningFeature<T> - Interface in org.apache.datasketches.quantilescommon
+
+
This enables the special functions for performing efficient partitioning of massive data.
+
+
PostProcessor - Class in org.apache.datasketches.fdt
+
+
This processes the contents of a FDT sketch to extract the + primary keys with the most frequent unique combinations of the non-primary dimensions.
+
+
PostProcessor(FdtSketch, Group, char) - Constructor for class org.apache.datasketches.fdt.PostProcessor
+
+
Construct with a populated FdtSketch
+
+
powerSeriesNextDouble(int, double, boolean, double) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the next larger double in the power series + point = logBase( i / ppb ) given the current point in the series.
+
+
PREAMBLE_LONGS - Static variable in class org.apache.datasketches.tuple.Sketch
+
 
+
putDoubleBE(byte[], int, double) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source double into the destination byte array starting at the given offset + in big endian order.
+
+
putDoubleLE(byte[], int, double) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source double into the destination byte array starting at the given offset + in little endian order.
+
+
putFloatBE(byte[], int, float) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source float into the destination byte array starting at the given offset + in big endian order.
+
+
putFloatLE(byte[], int, float) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source float into the destination byte array starting at the given offset + in little endian order.
+
+
putIntBE(byte[], int, int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source int into the destination byte array starting at the given offset + in big endian order.
+
+
putIntLE(byte[], int, int) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source int into the destination byte array starting at the given offset + in little endian order.
+
+
putLongBE(byte[], int, long) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source long into the destination byte array starting at the given offset + in big endian order.
+
+
putLongLE(byte[], int, long) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source long into the destination byte array starting at the given offset + in little endian order.
+
+
putMemory(WritableMemory) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Puts the current sketch into the given Memory in compact form if there is sufficient space, + otherwise, it throws an error.
+
+
putMemory(WritableMemory, boolean) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Puts the current sketch into the given Memory if there is sufficient space, otherwise, + throws an error.
+
+
putMemory(WritableMemory, ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Puts the current sketch into the given Memory if there is sufficient space.
+
+
putShortBE(byte[], int, short) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source short into the destination byte array starting at the given offset + in big endian order.
+
+
putShortLE(byte[], int, short) - Static method in class org.apache.datasketches.common.ByteArrayUtil
+
+
Put the source short into the destination byte array starting at the given offset + in little endian order.
+
+
pwr2SeriesNext(int, long) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the next larger integer point in the power series + point = 2( i / ppo ) given the current point in the series.
+
+
pwr2SeriesPrev(int, int) - Static method in class org.apache.datasketches.common.Util
+
+
Computes the previous, smaller integer point in the power series + point = 2( i / ppo ) given the current point in the series.
+
+
+ + + +

Q

+
+
QUANTILES - org.apache.datasketches.common.Family
+
+
The Quantiles family of sketches.
+
+
QuantilesAPI - Interface in org.apache.datasketches.quantilescommon
+
+
This is a stochastic streaming sketch that enables near-real time analysis of the + approximate distribution of items from a very large stream in a single pass, requiring only + that the items are comparable.
+
+
QuantilesDoublesAPI - Interface in org.apache.datasketches.quantilescommon
+
+
The Quantiles API for item type double.
+
+
QuantilesDoublesSketchIterator - Interface in org.apache.datasketches.quantilescommon
+
+
The quantiles sketch iterator for primitive type double.
+
+
QuantileSearchCriteria - Enum in org.apache.datasketches.quantilescommon
+
+
These search criteria are used by the KLL, REQ and Classic Quantiles sketches in the DataSketches library.
+
+
QuantilesFloatsAPI - Interface in org.apache.datasketches.quantilescommon
+
+
The Quantiles API for item type float.
+
+
QuantilesFloatsSketchIterator - Interface in org.apache.datasketches.quantilescommon
+
+
The quantiles sketch iterator for primitive type float.
+
+
QuantilesGenericAPI<T> - Interface in org.apache.datasketches.quantilescommon
+
+
The Quantiles API for item type generic.
+
+
QuantilesGenericSketchIterator<T> - Interface in org.apache.datasketches.quantilescommon
+
+
The quantiles sketch iterator for generic types.
+
+
QuantilesSketchIterator - Interface in org.apache.datasketches.quantilescommon
+
+
This is the base interface for the SketchIterator hierarchy used for viewing the + non-ordered quantiles retained by a sketch.
+
+
QuantilesUtil - Class in org.apache.datasketches.quantilescommon
+
+
Utilities for the quantiles sketches.
+
+
QuickMergingValidation - Class in org.apache.datasketches.cpc
+
+
This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
+
+
QuickMergingValidation(int, int, int, PrintStream, PrintWriter) - Constructor for class org.apache.datasketches.cpc.QuickMergingValidation
+
 
+
QuickSelect - Class in org.apache.datasketches.thetacommon
+
+
QuickSelect algorithm improved from Sedgewick.
+
+
QUICKSELECT - org.apache.datasketches.common.Family
+
+
The QuickSelect Sketch family is a member of the Theta Sketch Framework of sketches and + is the workhorse of the Theta Sketch Families and can be constructed for either on-heap or + off-heap operation.
+
+
QuickSelectSketch - org.apache.datasketches.tuple.SerializerDeserializer.SketchType
+
 
+
+ + + +

R

+
+
rand - Static variable in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Setting the seed makes the results of the sketch deterministic if the input items are + received in exactly the same order.
+
+
rebuild() - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Rebuilds the hash table to remove dirty values or to reduce the size + to nominal entries.
+
+
REBUILD_THRESHOLD - Static variable in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
The hash table rebuild threshold = 15.0/16.0.
+
+
RejectedDuplicate - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was rejected as a duplicate.
+
+
RejectedNullOrEmpty - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was rejected because it was null or empty.
+
+
RejectedOverTheta - org.apache.datasketches.theta.UpdateReturnState
+
+
The hash was rejected because the value was negative, zero or + greater than theta.
+
+
REQ - org.apache.datasketches.common.Family
+
+
Relative Error Quantiles Sketch
+
+
ReqDebug - Interface in org.apache.datasketches.req
+
+
The signaling interface that allows comprehensive analysis of the ReqSketch and ReqCompactor + while eliminating code clutter in the main classes.
+
+
ReqSketch - Class in org.apache.datasketches.req
+
+
This Relative Error Quantiles Sketch is the Java implementation based on the paper + "Relative Error Streaming Quantiles" by Graham Cormode, Zohar Karnin, Edo Liberty, + Justin Thaler, Pavel Veselý, and loosely derived from a Python prototype written by Pavel Veselý.
+
+
ReqSketchBuilder - Class in org.apache.datasketches.req
+
+
For building a new ReqSketch
+
+
ReqSketchBuilder() - Constructor for class org.apache.datasketches.req.ReqSketchBuilder
+
+
Constructor for the ReqSketchBuilder.
+
+
ReqSketchIterator - Class in org.apache.datasketches.req
+
+
Iterator over all retained items of the ReqSketch.
+
+
ReqSketchSortedView - Class in org.apache.datasketches.req
+
+
The SortedView of the ReqSketch.
+
+
ReqSketchSortedView(ReqSketch) - Constructor for class org.apache.datasketches.req.ReqSketchSortedView
+
+
Constructs this Sorted View given the sketch
+
+
RESERVOIR - org.apache.datasketches.common.Family
+
+
The Reservoir family of sketches.
+
+
RESERVOIR_UNION - org.apache.datasketches.common.Family
+
+
The reservoir sampling family of Union operations.
+
+
ReservoirItemsSketch<T> - Class in org.apache.datasketches.sampling
+
+
This sketch provides a reservoir sample over an input stream of items.
+
+
ReservoirItemsUnion<T> - Class in org.apache.datasketches.sampling
+
+
Class to union reservoir samples of generic items.
+
+
ReservoirLongsSketch - Class in org.apache.datasketches.sampling
+
+
This sketch provides a reservoir sample over an input stream of longs.
+
+
ReservoirLongsUnion - Class in org.apache.datasketches.sampling
+
+
Class to union reservoir samples of longs.
+
+
reset() - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Resets this sketch to empty but retains the original LgK and Seed.
+
+
reset() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Resets this sketch to a virgin state.
+
+
reset() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Resets this sketch to a virgin state.
+
+
reset() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
reset() - Method in class org.apache.datasketches.hll.Union
+
+
Resets to empty and retains the current lgK, but does not change the configured value of + lgMaxK.
+
+
reset() - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Resets this sketch to the empty state.
+
+
reset() - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Resets this sketch to the empty state.
+
+
reset() - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
reset() - Method in class org.apache.datasketches.quantiles.CompactDoublesSketch
+
 
+
reset() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Resets this sketch to the empty state.
+
+
reset() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Resets this Union to a virgin state.
+
+
reset() - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
reset() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Resets this Union to a virgin state.
+
+
reset() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Resets this sketch to the empty state.
+
+
reset() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
reset() - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Resets this sketch to the empty state, but retains the original value of k.
+
+
reset() - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Resets this sketch to the empty state, but retains the original value of k.
+
+
reset() - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Resets this sketch to the empty state, but retains the original value of k.
+
+
reset() - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Resets this sketch to the empty state, but retains the original value of max k.
+
+
reset() - Method in class org.apache.datasketches.theta.Intersection
+
+
Resets this Intersection for stateful operations only.
+
+
reset() - Method in class org.apache.datasketches.theta.Union
+
+
Resets this Union.
+
+
reset() - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Resets this sketch back to a virgin empty state.
+
+
reset() - Method in class org.apache.datasketches.tuple.AnotB
+
+
Resets this operation back to the empty state.
+
+
reset() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection
+
+
Resets the internal set to the initial state, which represents the Universal Set
+
+
reset() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Resets the union to an empty state
+
+
reset() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Resets this sketch an empty state.
+
+
reset() - Method in class org.apache.datasketches.tuple.Intersection
+
+
Resets the internal set to the initial state, which represents the Universal Set
+
+
reset() - Method in class org.apache.datasketches.tuple.Union
+
+
Resets the internal set to the initial state, which represents an empty set.
+
+
reset() - Method in class org.apache.datasketches.tuple.UpdatableSketchBuilder
+
+
Resets the Nominal Entries, Resize Factor and Sampling Probability to their default values.
+
+
RESIZE_THRESHOLD - Static variable in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
The resize threshold = 0.5; tuned for speed.
+
+
ResizeFactor - Enum in org.apache.datasketches.common
+
+
For the Families that accept this configuration parameter, it controls the size multiple that + affects how fast the internal cache grows, when more space is required.
+
+
rule - Variable in class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow
+
 
+
+ + + +

S

+
+
SampleSubsetSummary - Class in org.apache.datasketches.sampling
+
+
A simple object o capture the results of a subset sum query on a sampling sketch.
+
+
select(double[], int, int, int) - Static method in class org.apache.datasketches.thetacommon.QuickSelect
+
+
Gets the 0-based kth order statistic from the array.
+
+
select(long[], int, int, int) - Static method in class org.apache.datasketches.thetacommon.QuickSelect
+
+
Gets the 0-based kth order statistic from the array.
+
+
selectExcludingZeros(double[], int, int) - Static method in class org.apache.datasketches.thetacommon.QuickSelect
+
+
Gets the 1-based kth order statistic from the array excluding any zero values in the + array.
+
+
selectExcludingZeros(long[], int, int) - Static method in class org.apache.datasketches.thetacommon.QuickSelect
+
+
Gets the 1-based kth order statistic from the array excluding any zero values in the + array.
+
+
selectIncludingZeros(double[], int) - Static method in class org.apache.datasketches.thetacommon.QuickSelect
+
+
Gets the 1-based kth order statistic from the array including any zero values in the + array.
+
+
selectIncludingZeros(long[], int) - Static method in class org.apache.datasketches.thetacommon.QuickSelect
+
+
Gets the 1-based kth order statistic from the array including any zero values in the + array.
+
+
SerializerDeserializer - Class in org.apache.datasketches.tuple
+
+
Multipurpose serializer-deserializer for a collection of sketches defined by the enum.
+
+
SerializerDeserializer() - Constructor for class org.apache.datasketches.tuple.SerializerDeserializer
+
 
+
SerializerDeserializer.SketchType - Enum in org.apache.datasketches.tuple
+
+
Defines the sketch classes that this SerializerDeserializer can handle.
+
+
serializeToByteArray(Boolean) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
serializeToByteArray(Boolean[]) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
serializeToByteArray(Double) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
serializeToByteArray(Double[]) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
serializeToByteArray(Long) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
serializeToByteArray(Long[]) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
serializeToByteArray(Number) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
serializeToByteArray(Number[]) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
serializeToByteArray(String) - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
serializeToByteArray(String) - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
serializeToByteArray(String[]) - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
serializeToByteArray(String[]) - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
serializeToByteArray(T) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Serialize a single unserialized item to a byte array.
+
+
serializeToByteArray(T[]) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Serialize an array of unserialized items to a byte array of contiguous serialized items.
+
+
serializeToString() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns a String representation of this sketch
+
+
setA(Sketch) - Method in class org.apache.datasketches.theta.AnotB
+
+
This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + first argument A of A-AND-NOT-B.
+
+
setA(Sketch<S>) - Method in class org.apache.datasketches.tuple.AnotB
+
+
This is part of a multistep, stateful AnotB operation and sets the given Tuple sketch as the + first argument A of A-AND-NOT-B.
+
+
setClass(Class<?>) - Method in class org.apache.datasketches.sampling.VarOptItemsSamples
+
+
Specifies the class to use when copying the item array from the sketch.
+
+
setFamily(Family) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Set the Family.
+
+
setHighRankAccuracy(boolean) - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
+
This sets the parameter highRankAccuracy.
+
+
setK(int) - Method in class org.apache.datasketches.quantiles.DoublesSketchBuilder
+
+
Sets the parameter k that determines the accuracy and size of the sketch.
+
+
setK(int) - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
+
This sets the parameter k.
+
+
setLocalLogNominalEntries(int) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Alternative method of setting the Nominal Entries for a local concurrent sketch from the + log_base2 value.
+
+
setLocalNominalEntries(int) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the Nominal Entries for the concurrent local sketch.
+
+
setLogNominalEntries(int) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Alternative method of setting the Nominal Entries for this set operation from the log_base2 value.
+
+
setLogNominalEntries(int) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Alternative method of setting the Nominal Entries for this sketch from the log_base2 value.
+
+
setMaxConcurrencyError(double) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the Maximum Concurrency Error.
+
+
setMaxK(int) - Method in class org.apache.datasketches.quantiles.DoublesUnionBuilder
+
+
Sets the parameter masK that determines the maximum size of the sketch that + results from a union and its accuracy.
+
+
setMaxNumLocalThreads(int) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the Maximum Number of Local Threads.
+
+
setMemoryRequestServer(MemoryRequestServer) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Set the MemoryRequestServer
+
+
setMemoryRequestServer(MemoryRequestServer) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Set the MemoryRequestServer
+
+
setNominalEntries(int) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Sets the Maximum Nominal Entries (max K) for this set operation.
+
+
setNominalEntries(int) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the Nominal Entries for this sketch.
+
+
setNominalEntries(int) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
This is to set the nominal number of entries.
+
+
setNominalEntries(int) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
This is to set the nominal number of entries.
+
+
setNominalEntries(int) - Method in class org.apache.datasketches.tuple.UpdatableSketchBuilder
+
+
This is to set the nominal number of entries.
+
+
setNumberOfValues(int) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
This is to set the number of double values associated with each key
+
+
setNumberOfValues(int) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
This is to set the number of double values associated with each key
+
+
setNumPoolThreads(int) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the number of pool threads used for background propagation in the concurrent sketches.
+
+
SetOperation - Class in org.apache.datasketches.theta
+
+
The parent API for all Set Operations
+
+
setOperationBuilder() - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
SetOperationBuilder - Class in org.apache.datasketches.theta
+
+
For building a new SetOperation.
+
+
SetOperationBuilder() - Constructor for class org.apache.datasketches.theta.SetOperationBuilder
+
+
Constructor for building a new SetOperation.
+
+
SetOperationCornerCases - Class in org.apache.datasketches.thetacommon
+
+
Simplifies and speeds up set operations by resolving specific corner cases.
+
+
SetOperationCornerCases() - Constructor for class org.apache.datasketches.thetacommon.SetOperationCornerCases
+
 
+
SetOperationCornerCases.AnotbAction - Enum in org.apache.datasketches.thetacommon
+
 
+
SetOperationCornerCases.CornerCase - Enum in org.apache.datasketches.thetacommon
+
 
+
SetOperationCornerCases.IntersectAction - Enum in org.apache.datasketches.thetacommon
+
 
+
SetOperationCornerCases.UnionAction - Enum in org.apache.datasketches.thetacommon
+
 
+
setP(float) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Sets the upfront uniform sampling probability, p.
+
+
setP(float) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the upfront uniform sampling probability, p
+
+
setPropagateOrderedCompact(boolean) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the Propagate Ordered Compact flag to the given value.
+
+
setReqDebug(ReqDebug) - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
+
This sets the parameter reqDebug.
+
+
setResizeFactor(ResizeFactor) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Sets the cache Resize Factor
+
+
setResizeFactor(ResizeFactor) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the cache Resize Factor.
+
+
setResizeFactor(ResizeFactor) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
This is to set the resize factor.
+
+
setResizeFactor(ResizeFactor) - Method in class org.apache.datasketches.tuple.UpdatableSketchBuilder
+
+
This is to set the resize factor.
+
+
setSamplingProbability(float) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
This is to set sampling probability.
+
+
setSamplingProbability(float) - Method in class org.apache.datasketches.tuple.UpdatableSketchBuilder
+
+
This is to set sampling probability.
+
+
setSeed(long) - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
+
Sets the long seed value that is require by the hashing function.
+
+
setSeed(long) - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Sets the long seed value that is required by the hashing function.
+
+
setSeed(long) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
+
+
Sets the long seed value that is required by the hashing function.
+
+
setSeed(long) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
+
+
Sets the long seed value that is required by the hashing function.
+
+
similarityTest(Sketch, Sketch, double) - Static method in class org.apache.datasketches.theta.JaccardSimilarity
+
+
Tests similarity of a measured Sketch against an expected Sketch.
+
+
similarityTest(Sketch<S>, Sketch, S, SummarySetOperations<S>, double) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Tests similarity of a measured Sketch against an expected Sketch.
+
+
similarityTest(Sketch<S>, Sketch<S>, SummarySetOperations<S>, double) - Static method in class org.apache.datasketches.tuple.JaccardSimilarity
+
+
Tests similarity of a measured Sketch against an expected Sketch.
+
+
sizeOf(Boolean) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
sizeOf(Boolean[]) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
sizeOf(Double) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
sizeOf(Double[]) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
sizeOf(Long) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
sizeOf(Long[]) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
sizeOf(Number) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
sizeOf(Number[]) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
sizeOf(String) - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
sizeOf(String) - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
sizeOf(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
sizeOf(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
sizeOf(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Returns the serialized size in bytes of the number of contiguous serialized items in Memory.
+
+
sizeOf(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
sizeOf(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
sizeOf(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
sizeOf(Memory, long, int) - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
sizeOf(T) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Returns the serialized size in bytes of a single unserialized item.
+
+
sizeOf(T[]) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Returns the serialized size in bytes of the array of items.
+
+
Sketch - Class in org.apache.datasketches.theta
+
+
The top-level class for all theta sketches.
+
+
Sketch<S extends Summary> - Class in org.apache.datasketches.tuple
+
+
This is an equivalent to org.apache.datasketches.theta.Sketch with + addition of a user-defined Summary object associated with every unique entry + in the sketch.
+
+
SKETCH_A - org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
SKETCH_A - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
SKETCH_B - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
Sketches - Class in org.apache.datasketches.theta
+
+
This class brings together the common sketch and set operation creation methods and + the public static methods into one place.
+
+
Sketches - Class in org.apache.datasketches.tuple
+
+
Convenient static methods to instantiate generic tuple sketches.
+
+
Sketches() - Constructor for class org.apache.datasketches.tuple.Sketches
+
 
+
SketchesArgumentException - Exception in org.apache.datasketches.common
+
+
Illegal Arguments Exception class for the library
+
+
SketchesArgumentException(String) - Constructor for exception org.apache.datasketches.common.SketchesArgumentException
+
+
Constructs a new runtime exception with the specified detail message.
+
+
SketchesException - Exception in org.apache.datasketches.common
+
+
Exception class for the library
+
+
SketchesException(String) - Constructor for exception org.apache.datasketches.common.SketchesException
+
+
Constructs a new runtime exception with the specified detail message.
+
+
SketchesException(String, Throwable) - Constructor for exception org.apache.datasketches.common.SketchesException
+
+
Constructs a new runtime exception with the specified detail message and cause.
+
+
SketchesReadOnlyException - Exception in org.apache.datasketches.common
+
+
Write operation attempted on a read-only class.
+
+
SketchesReadOnlyException() - Constructor for exception org.apache.datasketches.common.SketchesReadOnlyException
+
+
Constructs a new runtime exception with the message: + "Write operation attempted on a read-only class."
+
+
SketchesReadOnlyException(String) - Constructor for exception org.apache.datasketches.common.SketchesReadOnlyException
+
+
Constructs a new runtime exception with the specified detail message.
+
+
SketchesStateException - Exception in org.apache.datasketches.common
+
+
Illegal State Exception class for the library
+
+
SketchesStateException(String) - Constructor for exception org.apache.datasketches.common.SketchesStateException
+
+
Constructs a new runtime exception with the specified detail message.
+
+
SketchFillRequest<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>> - Interface in org.apache.datasketches.partitions
+
+
This is a callback request to the data source to fill a quantiles sketch, + which is returned to the caller.
+
+
sketchStateId(boolean, int, long) - Static method in class org.apache.datasketches.thetacommon.SetOperationCornerCases
+
 
+
SortedView - Interface in org.apache.datasketches.quantilescommon
+
+
This is the base interface for the Sorted View interface hierarchy and defines the methods that are type independent.
+
+
SortedViewIterator - Class in org.apache.datasketches.quantilescommon
+
+
This is the base interface for the SortedViewIterator hierarchy used with a SortedView obtained + from a quantile-type sketch.
+
+
StackElement(GenericPartitionBoundaries<T>, int, String) - Constructor for class org.apache.datasketches.partitions.Partitioner.StackElement
+
 
+
start() - Method in class org.apache.datasketches.cpc.CompressionCharacterization
+
 
+
start() - Method in class org.apache.datasketches.cpc.MergingValidation
+
 
+
start() - Method in class org.apache.datasketches.cpc.QuickMergingValidation
+
 
+
start() - Method in class org.apache.datasketches.cpc.StreamingValidation
+
 
+
startingSubMultiple(int, int, int) - Static method in class org.apache.datasketches.thetacommon.ThetaUtil
+
+
Gets the smallest allowed exponent of 2 that it is a sub-multiple of the target by zero, + one or more resize factors.
+
+
StreamingValidation - Class in org.apache.datasketches.cpc
+
+
This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
+
+
StreamingValidation(int, int, int, int, PrintStream, PrintWriter) - Constructor for class org.apache.datasketches.cpc.StreamingValidation
+
 
+
STRIDE_MASK - Static variable in class org.apache.datasketches.thetacommon.HashOperations
+
+
The stride mask for the Open Address, Double Hashing (OADH) hash table algorithm.
+
+
stringArrHash(String[]) - Static method in class org.apache.datasketches.tuple.Util
+
 
+
stringConcat(String[]) - Static method in class org.apache.datasketches.tuple.Util
+
+
Concatenate array of Strings to a single String.
+
+
stringHash(String) - Static method in class org.apache.datasketches.tuple.Util
+
 
+
stringToByteArray(String) - Static method in class org.apache.datasketches.tuple.Util
+
+
Converts a String to a UTF_8 byte array.
+
+
stringToFamily(String) - Static method in enum org.apache.datasketches.common.Family
+
+
Returns the Family given the family name
+
+
Sum - org.apache.datasketches.tuple.adouble.DoubleSummary.Mode
+
+
The aggregation mode is the summation function.
+
+
Sum - org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode
+
+
The aggregation mode is the summation function.
+
+
Summary - Interface in org.apache.datasketches.tuple
+
+
Interface for user-defined Summary, which is associated with every hash in a tuple sketch
+
+
SummaryDeserializer<S extends Summary> - Interface in org.apache.datasketches.tuple
+
+
Interface for deserializing user-defined Summary
+
+
SummaryFactory<S extends Summary> - Interface in org.apache.datasketches.tuple
+
+
Interface for user-defined SummaryFactory
+
+
summaryFactory_ - Variable in class org.apache.datasketches.tuple.Sketch
+
 
+
SummarySetOperations<S extends Summary> - Interface in org.apache.datasketches.tuple
+
+
This is to provide methods of producing unions and intersections of two Summary objects.
+
+
SuppressFBWarnings - Annotation Type in org.apache.datasketches.common
+
+
Used to suppress SpotBug warnings.
+
+
+ + + +

T

+
+
TAB - Static variable in class org.apache.datasketches.common.Util
+
+
The tab character
+
+
tailRoundingFactor - Static variable in class org.apache.datasketches.quantilescommon.QuantilesUtil
+
 
+
TestUtil - Class in org.apache.datasketches.cpc
+
 
+
TestUtil() - Constructor for class org.apache.datasketches.cpc.TestUtil
+
 
+
TGT_IS_READ_ONLY_MSG - Static variable in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
 
+
TgtHllType - Enum in org.apache.datasketches.hll
+
+
Specifies the target type of HLL sketch to be created.
+
+
ThetaUtil - Class in org.apache.datasketches.thetacommon
+
+
Utility methods for the Theta Family of sketches
+
+
toByteArray() - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return this sketch as a compressed byte array.
+
+
toByteArray() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns a byte array representation of this sketch
+
+
toByteArray() - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
toByteArray() - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
toByteArray() - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
toByteArray() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
toByteArray() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Serialize this union to a byte array.
+
+
toByteArray() - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Returns a byte array representation of this sketch.
+
+
toByteArray() - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Returns a byte array representation of this sketch.
+
+
toByteArray() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
toByteArray() - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns a byte array representation of this sketch
+
+
toByteArray() - Method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Returns a byte array representation of this union
+
+
toByteArray() - Method in class org.apache.datasketches.theta.Intersection
+
+
Serialize this intersection to a byte array form.
+
+
toByteArray() - Method in class org.apache.datasketches.theta.Sketch
+
+
Serialize this sketch to a byte array form.
+
+
toByteArray() - Method in class org.apache.datasketches.theta.Union
+
+
Returns a byte array image of this Union object
+
+
toByteArray() - Method in class org.apache.datasketches.tuple.adouble.DoubleSummary
+
 
+
toByteArray() - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummary
+
 
+
toByteArray() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
toByteArray() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
 
+
toByteArray() - Method in class org.apache.datasketches.tuple.CompactSketch
+
 
+
toByteArray() - Method in class org.apache.datasketches.tuple.Sketch
+
+
This is to serialize a sketch instance to a byte array.
+
+
toByteArray() - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummary
+
 
+
toByteArray() - Method in interface org.apache.datasketches.tuple.Summary
+
+
This is to serialize a Summary instance to a byte array.
+
+
toByteArray(boolean) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Serialize this sketch in a byte array form.
+
+
toByteArray(boolean, ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Serialize this sketch to a byte array form.
+
+
toByteArray(ArrayOfItemsSerDe<? super T>) - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a byte array representation of this sketch.
+
+
toByteArray(ArrayOfItemsSerDe<? super T>) - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns a byte array representation of this sketch.
+
+
toByteArray(ArrayOfItemsSerDe<? super T>, Class<?>) - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a byte array representation of this sketch.
+
+
toByteArray(ArrayOfItemsSerDe<? super T>, Class<?>) - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns a byte array representation of this sketch.
+
+
toByteArray(ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns a byte array representation of this sketch
+
+
toByteArray(ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Serialize this sketch to a byte array form.
+
+
toByteArray(ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Serialize this union to a byte array.
+
+
toByteArray(ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Returns a byte array representation of this union
+
+
toByteArray(ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Returns a byte array representation of this union
+
+
toByteArray(ArrayOfItemsSerDe<T>, Class<?>) - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Returns a byte array representation of this union.
+
+
toByteArray(ArrayOfItemsSerDe<T>, Class<?>) - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Returns a byte array representation of this union.
+
+
toByteArrayCompressed() - Method in class org.apache.datasketches.theta.CompactSketch
+
 
+
toCompactByteArray() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
toCompactByteArray() - Method in class org.apache.datasketches.hll.Union
+
+
Gets the serialization of this union operator as a byte array in compact form, which is + designed to be heapified only.
+
+
toString() - Method in enum org.apache.datasketches.common.Family
+
 
+
toString() - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return a human-readable string summary of this sketch
+
+
toString() - Method in class org.apache.datasketches.fdt.Group
+
 
+
toString() - Method in class org.apache.datasketches.frequencies.ItemsSketch.Row
+
 
+
toString() - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns a human readable summary of this sketch.
+
+
toString() - Method in class org.apache.datasketches.frequencies.LongsSketch.Row
+
 
+
toString() - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns a human readable summary of this sketch.
+
+
toString() - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Returns a string with a human-readable summary of the UniqueCountMap and all the internal maps
+
+
toString() - Method in class org.apache.datasketches.kll.KllSketch
+
 
+
toString() - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
 
+
toString() - Method in class org.apache.datasketches.quantiles.DoublesSketchBuilder
+
+
Creates a human readable string that describes the current configuration of this builder.
+
+
toString() - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns summary information about the backing sketch.
+
+
toString() - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Returns summary information about the backing sketch.
+
+
toString() - Method in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
+
Returns a summary of the key parameters of the sketch.
+
+
toString() - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
toString() - Method in class org.apache.datasketches.req.ReqSketchBuilder
+
 
+
toString() - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a human-readable summary of the sketch, without items.
+
+
toString() - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Returns a human-readable summary of the sketch, without items.
+
+
toString() - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns a human-readable summary of the sketch, without items.
+
+
toString() - Method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Returns a human-readable summary of the sketch, without items.
+
+
toString() - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns a human-readable summary of the sketch.
+
+
toString() - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Returns a human-readable summary of the sketch, without items.
+
+
toString() - Method in class org.apache.datasketches.theta.SetOperationBuilder
+
 
+
toString() - Method in class org.apache.datasketches.theta.Sketch
+
+
Returns a human readable summary of the sketch.
+
+
toString() - Method in class org.apache.datasketches.theta.UpdateSketchBuilder
+
 
+
toString() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
 
+
toString() - Method in class org.apache.datasketches.tuple.Sketch
+
 
+
toString(boolean) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Return a human-readable string summary of this sketch
+
+
toString(boolean, boolean) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
toString(boolean, boolean) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
toString(boolean, boolean) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
toString(boolean, boolean) - Method in class org.apache.datasketches.kll.KllSketch
+
+
Returns a summary of the sketch as a string.
+
+
toString(boolean, boolean) - Method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns summary information about this sketch.
+
+
toString(boolean, boolean) - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns summary information about the backing sketch.
+
+
toString(boolean, boolean) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Returns summary information about this sketch.
+
+
toString(boolean, boolean) - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Returns summary information about the backing sketch.
+
+
toString(boolean, boolean, boolean, boolean) - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
toString(boolean, boolean, boolean, boolean) - Method in class org.apache.datasketches.hll.Union
+
 
+
toString(boolean, boolean, int, boolean) - Method in class org.apache.datasketches.theta.Sketch
+
+
Gets a human readable listing of contents and summary of the given sketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns a human readable string of the preamble of a byte array image of a ItemsSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns a human readable string of the preamble of a byte array image of a LongsSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.hll.HllSketch
+
+
Returns a human readable string of the preamble of a byte array image of an HllSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns a human readable string of the preamble of a byte array image of a DoublesSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Returns a human readable string of the preamble of a byte array image of an ItemsSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a human readable string of the preamble of a byte array image of a ReservoirItemsSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns a human readable string of the preamble of a byte array image of a ReservoirLongsSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns a human readable string of the preamble of a byte array image of a VarOptItemsSketch.
+
+
toString(byte[]) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Returns a human readable string of the preamble of a byte array image of a Theta Sketch.
+
+
toString(byte[], boolean) - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
Returns a human readable string of the preamble of a byte array image of a CpcSketch.
+
+
toString(Boolean) - Method in class org.apache.datasketches.common.ArrayOfBooleansSerDe
+
 
+
toString(Double) - Method in class org.apache.datasketches.common.ArrayOfDoublesSerDe
+
 
+
toString(Long) - Method in class org.apache.datasketches.common.ArrayOfLongsSerDe
+
 
+
toString(Number) - Method in class org.apache.datasketches.common.ArrayOfNumbersSerDe
+
 
+
toString(String) - Method in class org.apache.datasketches.common.ArrayOfStringsSerDe
+
 
+
toString(String) - Method in class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
 
+
toString(Memory) - Static method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Returns a human readable string of the preamble of a Memory image of a ItemsSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Returns a human readable string of the preamble of a Memory image of a LongsSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.hll.HllSketch
+
+
Returns a human readable string of the preamble of a Memory image of an HllSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Returns a human readable string of the preamble of a Memory image of a DoublesSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.quantiles.ItemsSketch
+
+
Returns a human readable string of the preamble of a Memory image of an ItemsSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Returns a human readable string of the preamble of a Memory image of a ReservoirItemsSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Returns a human readable string of the preamble of a Memory image of a ReservoirLongsSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Returns a human readable string of the preamble of a Memory image of a VarOptItemsSketch.
+
+
toString(Memory) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Returns a human readable string of the preamble of a Memory image of a Theta Sketch.
+
+
toString(Memory, boolean) - Static method in class org.apache.datasketches.cpc.CpcSketch
+
+
Returns a human readable string of the preamble of a Memory image of a CpcSketch.
+
+
toString(T) - Method in class org.apache.datasketches.common.ArrayOfItemsSerDe
+
+
Returns a human readable string of an item.
+
+
totalN - Variable in class org.apache.datasketches.quantilescommon.SortedViewIterator
+
 
+
toUpdatableByteArray() - Method in class org.apache.datasketches.hll.HllSketch
+
 
+
toUpdatableByteArray() - Method in class org.apache.datasketches.hll.Union
+
 
+
trim() - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Rebuilds reducing the actual number of entries to the nominal number of entries if needed
+
+
TRIM_A - org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
 
+
TRIM_A - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
TRIM_B - org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
 
+
TUPLE - org.apache.datasketches.common.Family
+
+
The Tuple family of sketches is a large family of sketches that are extensions of the + Theta Sketch Framework.
+
+
TupleSketchIterator<S extends Summary> - Class in org.apache.datasketches.tuple
+
+
Iterator over a generic tuple sketch
+
+
+ + + +

U

+
+
union(Memory) - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Iterative union operation, which means this method can be repeatedly called.
+
+
union(Memory) - Method in class org.apache.datasketches.theta.Union
+
+
Perform a Union operation with this union and the given Memory image of any sketch of the + Theta Family.
+
+
union(Memory, ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Iterative union operation, which means this method can be repeatedly called.
+
+
union(DoublesSketch) - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Iterative union operation, which means this method can be repeatedly called.
+
+
union(ItemsSketch<T>) - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Iterative union operation, which means this method can be repeatedly called.
+
+
union(Sketch) - Method in class org.apache.datasketches.theta.Union
+
+
Perform a Union operation with this union and the given on-heap sketch of the Theta Family.
+
+
union(Sketch, Sketch) - Method in class org.apache.datasketches.theta.Union
+
+
This implements a stateless, pair-wise union operation.
+
+
union(Sketch, Sketch, boolean, WritableMemory) - Method in class org.apache.datasketches.theta.Union
+
+
This implements a stateless, pair-wise union operation.
+
+
union(Sketch, S) - Method in class org.apache.datasketches.tuple.Union
+
+
Performs a stateful union of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary.
+
+
union(DoubleSummary, DoubleSummary) - Method in class org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations
+
 
+
union(IntegerSummary, IntegerSummary) - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummarySetOperations
+
 
+
union(ArrayOfDoublesSketch) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Updates the union by adding a set of entries from a given sketch, which can be on-heap or off-heap.
+
+
union(Sketch<S>) - Method in class org.apache.datasketches.tuple.Union
+
+
Performs a stateful union of the internal set with the given tupleSketch.
+
+
union(Sketch<S>, Sketch, S) - Method in class org.apache.datasketches.tuple.Union
+
+
Perform a stateless, pair-wise union operation between a tupleSketch and a thetaSketch.
+
+
union(Sketch<S>, Sketch<S>) - Method in class org.apache.datasketches.tuple.Union
+
+
Perform a stateless, pair-wise union operation between two tuple sketches.
+
+
union(ArrayOfStringsSummary, ArrayOfStringsSummary) - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummarySetOperations
+
 
+
union(S, S) - Method in interface org.apache.datasketches.tuple.SummarySetOperations
+
+
This is called by the union operator when both sketches have the same hash value.
+
+
Union - Class in org.apache.datasketches.hll
+
+
This performs union operations for all HllSketches.
+
+
Union - Class in org.apache.datasketches.theta
+
+
Compute the union of two or more theta sketches.
+
+
Union<S extends Summary> - Class in org.apache.datasketches.tuple
+
+
Compute the union of two or more generic tuple sketches or generic tuple sketches combined with + theta sketches.
+
+
Union() - Constructor for class org.apache.datasketches.hll.Union
+
+
Construct this Union operator with the default maximum log-base-2 of K.
+
+
Union() - Constructor for class org.apache.datasketches.theta.Union
+
 
+
Union(int) - Constructor for class org.apache.datasketches.hll.Union
+
+
Construct this Union operator with a given maximum log-base-2 of K.
+
+
Union(int, WritableMemory) - Constructor for class org.apache.datasketches.hll.Union
+
+
Construct this Union operator with a given maximum log-base-2 of K and the given + WritableMemory as the destination for this Union.
+
+
Union(int, SummarySetOperations<S>) - Constructor for class org.apache.datasketches.tuple.Union
+
+
Creates new Union instance.
+
+
Union(SummarySetOperations<S>) - Constructor for class org.apache.datasketches.tuple.Union
+
+
Creates new Union instance with instructions on how to process two summaries that + overlap.
+
+
UNION - org.apache.datasketches.common.Family
+
+
The Union family is an operation for the Theta Sketch Framework of sketches.
+
+
UniqueCountMap - Class in org.apache.datasketches.hllmap
+
+
This is a real-time, key-value HLL mapping sketch that tracks approximate unique counts of + identifiers (the values) associated with each key.
+
+
UniqueCountMap(int) - Constructor for class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Constructs a UniqueCountMap with an initial capacity of one million entries.
+
+
UniqueCountMap(int, int) - Constructor for class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Constructs a UniqueCountMap with a given initial number of entries.
+
+
unpackBits(long[], int, int, byte[], int, int) - Static method in class org.apache.datasketches.theta.BitPacking
+
 
+
UNSUPPORTED_MSG - Static variable in interface org.apache.datasketches.quantilescommon.QuantilesAPI
+
 
+
UPDATABLE - org.apache.datasketches.kll.KllSketch.SketchStructure
+
 
+
UpdatableSketch<U,​S extends UpdatableSummary<U>> - Class in org.apache.datasketches.tuple
+
+
An extension of QuickSelectSketch<S>, which can be updated with many types of keys.
+
+
UpdatableSketch(int, int, float, SummaryFactory<S>) - Constructor for class org.apache.datasketches.tuple.UpdatableSketch
+
+
This is to create a new instance of an UpdatableQuickSelectSketch.
+
+
UpdatableSketch(Memory, SummaryDeserializer<S>, SummaryFactory<S>) - Constructor for class org.apache.datasketches.tuple.UpdatableSketch
+
+
Deprecated. +
As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
+
+
+
UpdatableSketch(UpdatableSketch<U, S>) - Constructor for class org.apache.datasketches.tuple.UpdatableSketch
+
+
Copy Constructor
+
+
UpdatableSketchBuilder<U,​S extends UpdatableSummary<U>> - Class in org.apache.datasketches.tuple
+
+
For building a new generic tuple UpdatableSketch
+
+
UpdatableSketchBuilder(SummaryFactory<S>) - Constructor for class org.apache.datasketches.tuple.UpdatableSketchBuilder
+
+
Creates an instance of UpdatableSketchBuilder with default parameters
+
+
UpdatableSummary<U> - Interface in org.apache.datasketches.tuple
+
+
Interface for updating user-defined Summary
+
+
update(byte[]) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Present the given byte array as a potential unique item.
+
+
update(byte[]) - Method in class org.apache.datasketches.theta.Union
+
+
Update this union with the given byte array item.
+
+
update(byte[]) - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Present this sketch with the given byte array.
+
+
update(byte[], byte[]) - Method in class org.apache.datasketches.hllmap.UniqueCountMap
+
+
Updates the map with a given key and identifier and returns the estimate of the number of + unique identifiers encountered so far for the given key.
+
+
update(byte[], double[]) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Updates this sketch with a byte[] key and double values.
+
+
update(byte[], U) - Method in class org.apache.datasketches.tuple.UpdatableSketch
+
+
Updates this sketch with a byte[] key and U value.
+
+
update(char[]) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Present the given char array as a potential unique item.
+
+
update(char[]) - Method in class org.apache.datasketches.theta.Union
+
+
Update this union with the given char array item.
+
+
update(char[]) - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Present this sketch with the given char array.
+
+
update(double) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Present the given double (or float) datum as a potential unique item.
+
+
update(double) - Method in class org.apache.datasketches.kll.KllDoublesSketch
+
 
+
update(double) - Method in class org.apache.datasketches.quantiles.CompactDoublesSketch
+
 
+
update(double) - Method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Update this union with the given double (or float) data Item.
+
+
update(double) - Method in class org.apache.datasketches.quantiles.UpdateDoublesSketch
+
+
Updates this sketch with the given double data item
+
+
update(double) - Method in interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI
+
+
Updates this sketch with the given item.
+
+
update(double) - Method in class org.apache.datasketches.theta.Union
+
+
Update this union with the given double (or float) data item.
+
+
update(double) - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Present this sketch with the given double (or float) datum.
+
+
update(double, double[]) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Updates this sketch with a double key and double values.
+
+
update(double, U) - Method in class org.apache.datasketches.tuple.UpdatableSketch
+
+
Updates this sketch with a double key and U value.
+
+
update(float) - Method in class org.apache.datasketches.kll.KllFloatsSketch
+
 
+
update(float) - Method in interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI
+
+
Updates this sketch with the given item.
+
+
update(float) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
update(int[]) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Present the given integer array as a potential unique item.
+
+
update(int[]) - Method in class org.apache.datasketches.theta.Union
+
+
Update this union with the given integer array item.
+
+
update(int[]) - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Present this sketch with the given integer array.
+
+
update(int[], double[]) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Updates this sketch with a int[] key and double values.
+
+
update(int[], U) - Method in class org.apache.datasketches.tuple.UpdatableSketch
+
+
Updates this sketch with a int[] key and U value.
+
+
update(long) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Present the given long as a potential unique item.
+
+
update(long) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Update this sketch with an item and a frequency count of one.
+
+
update(long) - Method in class org.apache.datasketches.sampling.ReservoirLongsSketch
+
+
Randomly decide whether or not to include an item in the sample set.
+
+
update(long) - Method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Present this union with a long.
+
+
update(long) - Method in class org.apache.datasketches.theta.Union
+
+
Update this union with the given long data item.
+
+
update(long) - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Present this sketch with a long.
+
+
update(long[]) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Present the given long array as a potential unique item.
+
+
update(long[]) - Method in class org.apache.datasketches.theta.Union
+
+
Update this union with the given long array item.
+
+
update(long[]) - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Present this sketch with the given long array.
+
+
update(long[], double[]) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Updates this sketch with a long[] key and double values.
+
+
update(long[], U) - Method in class org.apache.datasketches.tuple.UpdatableSketch
+
+
Updates this sketch with a long[] key and U value.
+
+
update(long, double[]) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Updates this sketch with a long key and double values.
+
+
update(long, int, ArrayList<T>) - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Present this union with raw elements of a sketch.
+
+
update(long, long) - Method in class org.apache.datasketches.frequencies.LongsSketch
+
+
Update this sketch with a item and a positive frequency count (or weight).
+
+
update(long, Double) - Method in class org.apache.datasketches.tuple.adouble.DoubleSketch
+
 
+
update(long, Integer) - Method in class org.apache.datasketches.tuple.aninteger.IntegerSketch
+
 
+
update(long, U) - Method in class org.apache.datasketches.tuple.UpdatableSketch
+
+
Updates this sketch with a long key and U value.
+
+
update(Double) - Method in class org.apache.datasketches.tuple.adouble.DoubleSummary
+
 
+
update(Integer) - Method in class org.apache.datasketches.tuple.aninteger.IntegerSummary
+
 
+
update(String) - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Present the given String as a potential unique item.
+
+
update(String) - Method in class org.apache.datasketches.theta.Union
+
+
Update this union with the with the given String data item.
+
+
update(String) - Method in class org.apache.datasketches.theta.UpdateSketch
+
+
Present this sketch with the given String.
+
+
update(String[]) - Method in class org.apache.datasketches.fdt.FdtSketch
+
+
Update the sketch with the given string array tuple.
+
+
update(String[]) - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSummary
+
 
+
update(String[], String[]) - Method in class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch
+
+
Updates the sketch with String arrays for both key and value.
+
+
update(String, double[]) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Updates this sketch with a String key and double values.
+
+
update(String, Double) - Method in class org.apache.datasketches.tuple.adouble.DoubleSketch
+
 
+
update(String, Integer) - Method in class org.apache.datasketches.tuple.aninteger.IntegerSketch
+
 
+
update(String, U) - Method in class org.apache.datasketches.tuple.UpdatableSketch
+
+
Updates this sketch with a String key and U value.
+
+
update(CpcSketch) - Method in class org.apache.datasketches.cpc.CpcUnion
+
+
Update this union with a CpcSketch.
+
+
update(HllSketch) - Method in class org.apache.datasketches.hll.Union
+
+
Update this union operator with the given sketch.
+
+
update(Memory) - Method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Union the given Memory image of the sketch.
+
+
update(Memory, ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Union the given Memory image of the sketch.
+
+
update(Memory, ArrayOfItemsSerDe<T>) - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Union the given Memory image of the sketch.
+
+
update(ReservoirItemsSketch<T>) - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Union the given sketch.
+
+
update(ReservoirItemsSketch<T>) - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Union a reservoir sketch.
+
+
update(ReservoirLongsSketch) - Method in class org.apache.datasketches.sampling.ReservoirLongsUnion
+
+
Union the given sketch.
+
+
update(VarOptItemsSketch<T>) - Method in class org.apache.datasketches.sampling.VarOptItemsUnion
+
+
Union the given sketch.
+
+
update(ArrayOfDoublesSketch, ArrayOfDoublesSketch) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotB
+
+
Perform A-and-not-B set operation on the two given sketches.
+
+
update(ArrayOfDoublesSketch, ArrayOfDoublesSketch) - Method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotBImpl
+
 
+
update(T) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Update this sketch with an item and a frequency count of one.
+
+
update(T) - Method in class org.apache.datasketches.kll.KllItemsSketch
+
 
+
update(T) - Method in class org.apache.datasketches.quantiles.ItemsSketch
+
 
+
update(T) - Method in class org.apache.datasketches.quantiles.ItemsUnion
+
+
Update this union with the given dataItem.
+
+
update(T) - Method in interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI
+
+
Updates this sketch with the given item.
+
+
update(T) - Method in class org.apache.datasketches.sampling.ReservoirItemsSketch
+
+
Randomly decide whether or not to include an item in the sample set.
+
+
update(T) - Method in class org.apache.datasketches.sampling.ReservoirItemsUnion
+
+
Present this union with a single item to be added to the union.
+
+
update(T, double) - Method in class org.apache.datasketches.sampling.VarOptItemsSketch
+
+
Randomly decide whether or not to include an item in the sample set.
+
+
update(T, long) - Method in class org.apache.datasketches.frequencies.ItemsSketch
+
+
Update this sketch with an item and a positive frequency count.
+
+
update(U) - Method in interface org.apache.datasketches.tuple.UpdatableSummary
+
+
This is to provide a method of updating summaries.
+
+
UpdateDoublesSketch - Class in org.apache.datasketches.quantiles
+
 
+
UpdateReturnState - Enum in org.apache.datasketches.theta
+
+ +
+
UpdateSketch - Class in org.apache.datasketches.theta
+
+
The parent class for the Update Sketch families, such as QuickSelect and Alpha.
+
+
updateSketchBuilder() - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
UpdateSketchBuilder - Class in org.apache.datasketches.theta
+
+
For building a new UpdateSketch.
+
+
UpdateSketchBuilder() - Constructor for class org.apache.datasketches.theta.UpdateSketchBuilder
+
+
Constructor for building a new UpdateSketch.
+
+
upperBound - Variable in class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow
+
 
+
Util - Class in org.apache.datasketches.common
+
+
Common utility functions.
+
+
Util - Class in org.apache.datasketches.tuple
+
+
Common utility functions for Tuples
+
+
Util() - Constructor for class org.apache.datasketches.tuple.Util
+
 
+
+ + + +

V

+
+
validate() - Method in class org.apache.datasketches.cpc.CpcSketch
+
+
Convience function that this Sketch is valid.
+
+
validateFamily(byte, byte) - Static method in class org.apache.datasketches.tuple.SerializerDeserializer
+
+
Validates the preamble-Longs value given the family ID
+
+
validateItems(T[], Comparator<? super T>) - Static method in interface org.apache.datasketches.quantilescommon.GenericSortedView
+
+
Checks the sequential validity of the given array of generic items.
+
+
validateType(byte, SerializerDeserializer.SketchType) - Static method in class org.apache.datasketches.tuple.SerializerDeserializer
+
+
Validates the sketch type byte versus the expected value
+
+
value() - Method in annotation type org.apache.datasketches.common.SuppressFBWarnings
+
+
A list of comma-separated, quoted SpotBugs warnings that are to be suppressed in the associated + annotated element.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.common.Family
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.common.ResizeFactor
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.frequencies.ErrorType
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.hll.TgtHllType
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.kll.KllSketch.SketchStructure
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.kll.KllSketch.SketchType
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.partitions.BoundsRule
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.quantilescommon.QuantileSearchCriteria
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.theta.UpdateReturnState
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.tuple.adouble.DoubleSummary.Mode
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.datasketches.tuple.SerializerDeserializer.SketchType
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum org.apache.datasketches.common.Family
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.common.ResizeFactor
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.frequencies.ErrorType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.hll.TgtHllType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.kll.KllSketch.SketchStructure
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.kll.KllSketch.SketchType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.partitions.BoundsRule
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.quantilescommon.InequalitySearch
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.quantilescommon.QuantileSearchCriteria
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.theta.UpdateReturnState
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.tuple.adouble.DoubleSummary.Mode
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.datasketches.tuple.SerializerDeserializer.SketchType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
VAROPT - org.apache.datasketches.common.Family
+
+
The VarOpt family of sketches.
+
+
VAROPT_UNION - org.apache.datasketches.common.Family
+
+
The VarOpt family of sketches.
+
+
VarOptItemsSamples<T> - Class in org.apache.datasketches.sampling
+
+
This class provides access to the samples contained in a VarOptItemsSketch.
+
+
VarOptItemsSamples.VarOptItemsIterator - Class in org.apache.datasketches.sampling
+
+
The standard iterator
+
+
VarOptItemsSamples.WeightedSample - Class in org.apache.datasketches.sampling
+
+
A convenience class to allow easy iterator access to a VarOpt sample.
+
+
VarOptItemsSketch<T> - Class in org.apache.datasketches.sampling
+
+
This sketch provides a variance optimal sample over an input stream of weighted items.
+
+
VarOptItemsUnion<T> - Class in org.apache.datasketches.sampling
+
+
Provides a unioning operation over varopt sketches.
+
+
viewCompactorDetail(String, boolean) - Method in class org.apache.datasketches.req.ReqSketch
+
 
+
+ + + +

W

+
+
weight - Variable in class org.apache.datasketches.kll.KllSketchIterator
+
 
+
weights() - Method in class org.apache.datasketches.sampling.VarOptItemsSamples
+
+
Returns a copy of the array of weights contained in the sketch.
+
+
weights(int) - Method in class org.apache.datasketches.sampling.VarOptItemsSamples
+
+
Returns a single weight from the samples contained in the sketch.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.hll.HllSketch
+
+
Wraps the given read-only Memory that must be a image of a valid sketch, + which may be in compact or updatable form, and should have data.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Wrap a sketch around the given read only compact source Memory containing sketch data + that originated from this sketch.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Wrap a sketch around the given read only compact source Memory containing sketch data + that originated from this sketch.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.quantiles.DoublesSketch
+
+
Wrap this sketch around the given Memory image of a DoublesSketch, compact or updatable.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns a read-only Union object that wraps off-heap data of the given memory image of + a sketch.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.theta.CompactSketch
+
+
Wrap takes the CompactSketch image in given Memory and refers to it directly.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Wrap takes the SetOperation image in Memory and refers to it directly.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Wrap takes the sketch image in the given Memory and refers to it directly.
+
+
wrap(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Wrap the given Memory as an ArrayOfDoublesSketch
+
+
wrap(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Wrap the given Memory as an ArrayOfDoublesUnion
+
+
wrap(Memory, long) - Static method in class org.apache.datasketches.theta.CompactSketch
+
+
Wrap takes the sketch image in the given Memory and refers to it directly.
+
+
wrap(Memory, long) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Wrap takes the SetOperation image in Memory and refers to it directly.
+
+
wrap(Memory, long) - Static method in class org.apache.datasketches.theta.Sketch
+
+
Wrap takes the sketch image in the given Memory and refers to it directly.
+
+
wrap(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
+
+
Wrap the given Memory and seed as a ArrayOfDoublesSketch
+
+
wrap(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Wrap the given Memory and seed as an ArrayOfDoublesUnion
+
+
wrap(Memory, Comparator<? super T>, ArrayOfItemsSerDe<T>) - Static method in class org.apache.datasketches.kll.KllItemsSketch
+
+
Constructs a thin wrapper on the heap around a Memory (or WritableMemory) already initialized with a + validated sketch image of a type T consistent with the given comparator and serDe.
+
+
wrap(WritableMemory) - Static method in class org.apache.datasketches.quantiles.DoublesUnion
+
+
Returns an updatable Union object that wraps off-heap data of the given memory image of + a sketch.
+
+
wrap(WritableMemory) - Static method in class org.apache.datasketches.quantiles.UpdateDoublesSketch
+
+
Wrap this sketch around the given non-compact Memory image of a DoublesSketch.
+
+
wrap(WritableMemory) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Wrap takes the SetOperation image in Memory and refers to it directly.
+
+
wrap(WritableMemory) - Static method in class org.apache.datasketches.theta.UpdateSketch
+
+
Wrap takes the sketch image in Memory and refers to it directly.
+
+
wrap(WritableMemory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Wrap the given WritableMemory as an ArrayOfDoublesUnion
+
+
wrap(WritableMemory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Wrap the given WritableMemory as an ArrayOfDoublesUpdatableSketch
+
+
wrap(WritableMemory, long) - Static method in class org.apache.datasketches.theta.SetOperation
+
+
Wrap takes the SetOperation image in Memory and refers to it directly.
+
+
wrap(WritableMemory, long) - Static method in class org.apache.datasketches.theta.UpdateSketch
+
+
Wrap takes the sketch image in Memory and refers to it directly.
+
+
wrap(WritableMemory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
+
+
Wrap the given WritableMemory and seed as an ArrayOfDoublesUnion
+
+
wrap(WritableMemory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch
+
+
Wrap the given WritableMemory and seed as a ArrayOfDoublesUpdatableSketch
+
+
wrapCompactSketch(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapCompactSketch(Memory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapIntersection(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+
Convenience method, calls SetOperation.wrap(Memory) and casts the result to a Intersection
+
+
wrapIntersection(WritableMemory) - Static method in class org.apache.datasketches.theta.Sketches
+
+
Convenience method, calls SetOperation.wrap(Memory) and casts the result to a Intersection
+
+
wrapSetOperation(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapSetOperation(Memory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapSetOperation(WritableMemory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapSetOperation(WritableMemory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapSketch(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapSketch(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given Memory as an ArrayOfDoublesSketch
+
+
wrapSketch(Memory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapSketch(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given Memory and seed as a ArrayOfDoublesSketch
+
+
wrapUnion(Memory) - Static method in class org.apache.datasketches.theta.Sketches
+
+
Convenience method, calls SetOperation.wrap(Memory) and casts the result to a Union
+
+
wrapUnion(Memory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given Memory as an ArrayOfDoublesUnion
+
+
wrapUnion(Memory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given Memory and seed as an ArrayOfDoublesUnion
+
+
wrapUnion(WritableMemory) - Static method in class org.apache.datasketches.theta.Sketches
+
+
Convenience method, calls SetOperation.wrap(Memory) and casts the result to a Union
+
+
wrapUnion(WritableMemory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given Memory as an ArrayOfDoublesUnion
+
+
wrapUnion(WritableMemory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given Memory and seed as an ArrayOfDoublesUnion
+
+
wrapUpdatableSketch(WritableMemory) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given WritableMemory as an ArrayOfDoublesUpdatableSketch
+
+
wrapUpdatableSketch(WritableMemory, long) - Static method in class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+
Wrap the given WritableMemory and seed as a ArrayOfDoublesUpdatableSketch
+
+
wrapUpdateSketch(WritableMemory) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
wrapUpdateSketch(WritableMemory, long) - Static method in class org.apache.datasketches.theta.Sketches
+
+ +
+
writableWrap(WritableMemory) - Static method in class org.apache.datasketches.hll.HllSketch
+
+
Wraps the given WritableMemory, which must be a image of a valid updatable sketch, + and may have data.
+
+
writableWrap(WritableMemory) - Static method in class org.apache.datasketches.hll.Union
+
+
Wraps the given WritableMemory, which must be a image of a valid updatable HLL_8 sketch, + and may have data.
+
+
writableWrap(WritableMemory, MemoryRequestServer) - Static method in class org.apache.datasketches.kll.KllDoublesSketch
+
+
Wrap a sketch around the given source Writable Memory containing sketch data + that originated from this sketch.
+
+
writableWrap(WritableMemory, MemoryRequestServer) - Static method in class org.apache.datasketches.kll.KllFloatsSketch
+
+
Wrap a sketch around the given source Writable Memory containing sketch data + that originated from this sketch.
+
+
+ + + +

X

+
+
X1 - org.apache.datasketches.common.ResizeFactor
+
+
Do not resize.
+
+
X2 - org.apache.datasketches.common.ResizeFactor
+
+
Resize factor is 2.
+
+
X4 - org.apache.datasketches.common.ResizeFactor
+
+
Resize factor is 4.
+
+
X8 - org.apache.datasketches.common.ResizeFactor
+
+
Resize factor is 8.
+
+
XxHash - Class in org.apache.datasketches.hash
+
+
The XxHash is a fast, non-cryptographic, 64-bit hash function that has + excellent avalanche and 2-way bit independence properties.
+
+
XxHash() - Constructor for class org.apache.datasketches.hash.XxHash
+
 
+
+ + + +

Z

+
+
zeroPad(String, int) - Static method in class org.apache.datasketches.common.Util
+
+
Prepend the given string with zeros.
+
+
+A B C D E F G H I J K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/docs/5.0.X/index.html b/docs/5.0.X/index.html new file mode 100644 index 000000000..d4f168806 --- /dev/null +++ b/docs/5.0.X/index.html @@ -0,0 +1,310 @@ + + + + + +Overview (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

datasketches-java 5.0.2 API

+
+
+

Sketching Core Library

+

Overview

+ +

The Sketching Core Library provides a range of stochastic streaming algorithms and closely + related java technologies that are particularly useful when integrating this technology into + systems that must deal with massive data. +

+ +

This library is divided into packages that constitute distinct groups of functionality:

+ +Note: In general, if the requirements or promises of any method's contract are not fulfilled +(that is, if there is a bug in either the method or its caller), +then an unchecked exception will be thrown. +The precise type of such an unchecked exception does not form part of any method's contract.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
org.apache.datasketches +
This package is the parent package for all sketch families and common code areas.
+
org.apache.datasketches.common +
This package is for common classes that may be used across all the sketch families.
+
org.apache.datasketches.cpc +
Compressed Probabilistic Counting sketch family
+
org.apache.datasketches.fdt +
Frequent Distinct Tuples Sketch
+
org.apache.datasketches.frequencies +
This package is dedicated to streaming algorithms that enable estimation of the + frequency of occurrence of items in a weighted multiset stream of items.
+
org.apache.datasketches.hash +
The hash package contains a high-performing and extended Java implementations + of Austin Appleby's 128-bit MurmurHash3 hash function originally coded in C.
+
org.apache.datasketches.hll +
The DataSketches™ HLL sketch family package
+
org.apache.datasketches.hllmap +
The hllmap package contains a space efficient HLL mapping sketch of keys to approximate unique + count of identifiers.
+
org.apache.datasketches.kll +
This package is for the implementations of the sketch algorithm developed by Zohar Karnin, Kevin Lang, + and Edo Liberty that is commonly referred to as the "KLL" sketch after the authors' last names.
+
org.apache.datasketches.partitions 
org.apache.datasketches.quantiles +
The quantiles package contains stochastic streaming algorithms that enable single-pass + analysis of the distribution of a stream of quantiles.
+
org.apache.datasketches.quantilescommon +
This package contains common tools and methods for the quantiles, kll and + req packages.
+
org.apache.datasketches.req +
This package is for the implementation of the Relative Error Quantiles sketch algorithm.
+
org.apache.datasketches.sampling +
This package is dedicated to streaming algorithms that enable fixed size, uniform sampling of + weighted and unweighted items from a stream.
+
org.apache.datasketches.theta +
The theta package contains the basic sketch classes that are members of the + Theta Sketch Framework.
+
org.apache.datasketches.thetacommon +
This package contains common tools and methods for the theta, + tuple, tuple/* and fdt packages.
+
org.apache.datasketches.tuple +
The tuple package contains a number of sketches based on the same + fundamental algorithms of the Theta Sketch Framework and extend these + concepts for whole new families of sketches.
+
org.apache.datasketches.tuple.adouble +
This package is for a generic implementation of the Tuple sketch for single Double value.
+
org.apache.datasketches.tuple.aninteger +
This package is for a generic implementation of the Tuple sketch for single Integer value.
+
org.apache.datasketches.tuple.arrayofdoubles +
This package is for a concrete implementation of the Tuple sketch for an array of double values.
+
org.apache.datasketches.tuple.strings +
This package is for a generic implementation of the Tuple sketch for single String value.
+
+
+
+ + + diff --git a/docs/5.0.X/jquery-ui.overrides.css b/docs/5.0.X/jquery-ui.overrides.css new file mode 100644 index 000000000..facf852c2 --- /dev/null +++ b/docs/5.0.X/jquery-ui.overrides.css @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; + border: 1px solid #F8981D; +} diff --git a/docs/5.0.X/jquery/external/jquery/jquery.js b/docs/5.0.X/jquery/external/jquery/jquery.js new file mode 100644 index 000000000..50937333b --- /dev/null +++ b/docs/5.0.X/jquery/external/jquery/jquery.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/docs/5.0.X/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/docs/5.0.X/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 000000000..93d8bc8ef --- /dev/null +++ b/docs/5.0.X/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/docs/5.0.X/jquery/jszip-utils/dist/jszip-utils.js b/docs/5.0.X/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 000000000..775895ec9 --- /dev/null +++ b/docs/5.0.X/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker: function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if (this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker: function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compression. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":37}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":38}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with information about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing information + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emitted metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + // NOTE: we use a null prototype because we do not + // want filenames like "toString" coming from a zip file + // to overwrite methods and attributes in a normal Object. + this.files = Object.create(null); + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.7.1"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function (data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function (data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment: input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions: input.unixPermissions, + dosPermissions: input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + if (Buffer.from && Buffer.from !== Uint8Array.from) { + return Buffer.from(data, encoding); + } else { + if (typeof data === "number") { + // Safeguard for old Node.js versions. On newer versions, + // Buffer.from(number) / Buffer(number, encoding) already throw. + throw new Error("The \"data\" argument must not be a number"); + } + return new Buffer(data, encoding); + } + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + var buf = new Buffer(size); + buf.fill(0); + return buf; + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + /* jshint ignore:start */ + // ignore warning about unwanted properties because this.files is a null prototype object + for (filename in this.files) { + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + /* jshint ignore:end */ + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is preferred but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurrence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurrence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('set-immediate-shim'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static information and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index + 4 < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + + reader.setIndex(end); + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfBooleansSerDe

+
+
+ +
+
    +
  • +
    +
    public class ArrayOfBooleansSerDe
    +extends ArrayOfItemsSerDe<Boolean>
    +
    Methods of serializing and deserializing arrays of Boolean as a bit array.
    +
    +
    Author:
    +
    Jon Malkin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfBooleansSerDe

        +
        public ArrayOfBooleansSerDe()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        computeBytesNeeded

        +
        public static int computeBytesNeeded​(int arrayLength)
        +
        Computes number of bytes needed for packed bit encoding of the array of booleans. Rounds + partial bytes up to return a whole number of bytes.
        +
        +
        Parameters:
        +
        arrayLength - Number of items in the array to serialize
        +
        Returns:
        +
        Number of bytes needed to encode the array
        +
        +
      • +
      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Boolean item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize a single unserialized item to a byte array.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Boolean>
        +
        Parameters:
        +
        item - the item to be serialized
        +
        Returns:
        +
        serialized representation of the given item
        +
        +
      • +
      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Boolean[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize an array of unserialized items to a byte array of contiguous serialized items.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Boolean>
        +
        Parameters:
        +
        items - array of items to be serialized
        +
        Returns:
        +
        contiguous, serialized representation of the given array of unserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        @Deprecated
        +public Boolean[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                       int numItems)
        +
        Deprecated.
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Boolean>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        public Boolean[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                       long offsetBytes,
        +                                       int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Boolean>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Boolean item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of a single unserialized item.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Boolean>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        the serialized size in bytes of a single unserialized item.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Boolean[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the array of items.
        +
        +
        Overrides:
        +
        sizeOf in class ArrayOfItemsSerDe<Boolean>
        +
        Parameters:
        +
        items - an array of items.
        +
        Returns:
        +
        the serialized size in bytes of the array of items.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(org.apache.datasketches.memory.Memory mem,
        +                  long offsetBytes,
        +                  int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the number of contiguous serialized items in Memory. + The capacity of the given Memory can be much larger that the required size of the items.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Boolean>
        +
        Parameters:
        +
        mem - the given Memory.
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - the number of serialized items contained in the Memory
        +
        Returns:
        +
        the serialized size in bytes of the given number of items.
        +
        +
      • +
      + + + + + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ArrayOfDoublesSerDe.html b/docs/5.0.X/org/apache/datasketches/common/ArrayOfDoublesSerDe.html new file mode 100644 index 000000000..c01dfc64d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ArrayOfDoublesSerDe.html @@ -0,0 +1,553 @@ + + + + + +ArrayOfDoublesSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesSerDe

+
+
+ +
+
    +
  • +
    +
    public class ArrayOfDoublesSerDe
    +extends ArrayOfItemsSerDe<Double>
    +
    Methods of serializing and deserializing arrays of Double.
    +
    +
    Author:
    +
    Alexander Saydakov
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfDoublesSerDe

        +
        public ArrayOfDoublesSerDe()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Double item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize a single unserialized item to a byte array.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        item - the item to be serialized
        +
        Returns:
        +
        serialized representation of the given item
        +
        +
      • +
      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Double[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize an array of unserialized items to a byte array of contiguous serialized items.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        items - array of items to be serialized
        +
        Returns:
        +
        contiguous, serialized representation of the given array of unserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        @Deprecated
        +public Double[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      int numItems)
        +
        Deprecated.
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        public Double[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      long offsetBytes,
        +                                      int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Double item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of a single unserialized item.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        the serialized size in bytes of a single unserialized item.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Double[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the array of items.
        +
        +
        Overrides:
        +
        sizeOf in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        items - an array of items.
        +
        Returns:
        +
        the serialized size in bytes of the array of items.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(org.apache.datasketches.memory.Memory mem,
        +                  long offsetBytes,
        +                  int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the number of contiguous serialized items in Memory. + The capacity of the given Memory can be much larger that the required size of the items.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        mem - the given Memory.
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - the number of serialized items contained in the Memory
        +
        Returns:
        +
        the serialized size in bytes of the given number of items.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(Double item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns a human readable string of an item.
        +
        +
        Specified by:
        +
        toString in class ArrayOfItemsSerDe<Double>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        a human readable string of an item.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ArrayOfItemsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/ArrayOfItemsSerDe.html new file mode 100644 index 000000000..7130db05a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ArrayOfItemsSerDe.html @@ -0,0 +1,545 @@ + + + + + +ArrayOfItemsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfItemsSerDe<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.common.ArrayOfItemsSerDe<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfItemsSerDe

        +
        public ArrayOfItemsSerDe()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        serializeToByteArray

        +
        public abstract byte[] serializeToByteArray​(T item)
        +
        Serialize a single unserialized item to a byte array.
        +
        +
        Parameters:
        +
        item - the item to be serialized
        +
        Returns:
        +
        serialized representation of the given item
        +
        +
      • +
      + + + + + +
        +
      • +

        serializeToByteArray

        +
        public abstract byte[] serializeToByteArray​(T[] items)
        +
        Serialize an array of unserialized items to a byte array of contiguous serialized items.
        +
        +
        Parameters:
        +
        items - array of items to be serialized
        +
        Returns:
        +
        contiguous, serialized representation of the given array of unserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        @Deprecated
        +public abstract T[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                          int numItems)
        + +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        public abstract T[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                          long offsetBytes,
        +                                          int numItems)
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + + + +
        +
      • +

        sizeOf

        +
        public abstract int sizeOf​(T item)
        +
        Returns the serialized size in bytes of a single unserialized item.
        +
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        the serialized size in bytes of a single unserialized item.
        +
        +
      • +
      + + + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(T[] items)
        +
        Returns the serialized size in bytes of the array of items.
        +
        +
        Parameters:
        +
        items - an array of items.
        +
        Returns:
        +
        the serialized size in bytes of the array of items.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public abstract int sizeOf​(org.apache.datasketches.memory.Memory mem,
        +                           long offsetBytes,
        +                           int numItems)
        +
        Returns the serialized size in bytes of the number of contiguous serialized items in Memory. + The capacity of the given Memory can be much larger that the required size of the items.
        +
        +
        Parameters:
        +
        mem - the given Memory.
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - the number of serialized items contained in the Memory
        +
        Returns:
        +
        the serialized size in bytes of the given number of items.
        +
        +
      • +
      + + + + + +
        +
      • +

        toString

        +
        public abstract String toString​(T item)
        +
        Returns a human readable string of an item.
        +
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        a human readable string of an item.
        +
        +
      • +
      + + + +
        +
      • +

        getClassOfT

        +
        public abstract Class<?> getClassOfT()
        +
        Returns the concrete class of type T
        +
        +
        Returns:
        +
        the concrete class of type T
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ArrayOfLongsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/ArrayOfLongsSerDe.html new file mode 100644 index 000000000..0df85bedc --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ArrayOfLongsSerDe.html @@ -0,0 +1,553 @@ + + + + + +ArrayOfLongsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfLongsSerDe

+
+
+ +
+
    +
  • +
    +
    public class ArrayOfLongsSerDe
    +extends ArrayOfItemsSerDe<Long>
    +
    Methods of serializing and deserializing arrays of Long.
    +
    +
    Author:
    +
    Alexander Saydakov
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfLongsSerDe

        +
        public ArrayOfLongsSerDe()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Long item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize a single unserialized item to a byte array.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        item - the item to be serialized
        +
        Returns:
        +
        serialized representation of the given item
        +
        +
      • +
      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Long[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize an array of unserialized items to a byte array of contiguous serialized items.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        items - array of items to be serialized
        +
        Returns:
        +
        contiguous, serialized representation of the given array of unserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        @Deprecated
        +public Long[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                    int numItems)
        +
        Deprecated.
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        public Long[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                    long offsetBytes,
        +                                    int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Long item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of a single unserialized item.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        the serialized size in bytes of a single unserialized item.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Long[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the array of items.
        +
        +
        Overrides:
        +
        sizeOf in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        items - an array of items.
        +
        Returns:
        +
        the serialized size in bytes of the array of items.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(org.apache.datasketches.memory.Memory mem,
        +                  long offsetBytes,
        +                  int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the number of contiguous serialized items in Memory. + The capacity of the given Memory can be much larger that the required size of the items.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        mem - the given Memory.
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - the number of serialized items contained in the Memory
        +
        Returns:
        +
        the serialized size in bytes of the given number of items.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(Long item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns a human readable string of an item.
        +
        +
        Specified by:
        +
        toString in class ArrayOfItemsSerDe<Long>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        a human readable string of an item.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ArrayOfNumbersSerDe.html b/docs/5.0.X/org/apache/datasketches/common/ArrayOfNumbersSerDe.html new file mode 100644 index 000000000..67c20b53e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ArrayOfNumbersSerDe.html @@ -0,0 +1,561 @@ + + + + + +ArrayOfNumbersSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfNumbersSerDe

+
+
+ +
+
    +
  • +
    +
    public class ArrayOfNumbersSerDe
    +extends ArrayOfItemsSerDe<Number>
    +
    Methods of serializing and deserializing arrays of the object version of primitive types of + Number. The array can be a mix of primitive object types. + +

    This class serializes numbers with a leading byte (ASCII character) indicating the type. + The class keeps the values byte aligned, even though only 3 bits are strictly necessary to + encode one of the 6 different primitives with object types that extend Number.

    + +

    Classes handled are: Long, Integer, Short, + Byte, Double, and Float.

    +
    +
    Author:
    +
    Jon Malkin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfNumbersSerDe

        +
        public ArrayOfNumbersSerDe()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Number item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize a single unserialized item to a byte array.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        item - the item to be serialized
        +
        Returns:
        +
        serialized representation of the given item
        +
        +
      • +
      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(Number[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize an array of unserialized items to a byte array of contiguous serialized items.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        items - array of items to be serialized
        +
        Returns:
        +
        contiguous, serialized representation of the given array of unserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        @Deprecated
        +public Number[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      int numItems)
        +
        Deprecated.
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        public Number[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      long offsetBytes,
        +                                      int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Number item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of a single unserialized item.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        the serialized size in bytes of a single unserialized item.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(Number[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the array of items.
        +
        +
        Overrides:
        +
        sizeOf in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        items - an array of items.
        +
        Returns:
        +
        the serialized size in bytes of the array of items.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(org.apache.datasketches.memory.Memory mem,
        +                  long offsetBytes,
        +                  int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the number of contiguous serialized items in Memory. + The capacity of the given Memory can be much larger that the required size of the items.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        mem - the given Memory.
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - the number of serialized items contained in the Memory
        +
        Returns:
        +
        the serialized size in bytes of the given number of items.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(Number item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns a human readable string of an item.
        +
        +
        Specified by:
        +
        toString in class ArrayOfItemsSerDe<Number>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        a human readable string of an item.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ArrayOfStringsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/ArrayOfStringsSerDe.html new file mode 100644 index 000000000..5b8147278 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ArrayOfStringsSerDe.html @@ -0,0 +1,540 @@ + + + + + +ArrayOfStringsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfStringsSerDe

+
+
+ +
+
    +
  • +
    +
    public class ArrayOfStringsSerDe
    +extends ArrayOfItemsSerDe<String>
    +
    Methods of serializing and deserializing arrays of String. + This class serializes strings in UTF-8 format, which is more compact compared to + ArrayOfUtf16StringsSerDe. In an extreme case when all strings are in ASCII, + this method is 2 times more compact, but it takes more time to encode and decode + by a factor of 1.5 to 2. + +

    The serialization

    +
    +
    Author:
    +
    Alexander Saydakov
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfStringsSerDe

        +
        public ArrayOfStringsSerDe()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(String item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize a single unserialized item to a byte array.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        item - the item to be serialized
        +
        Returns:
        +
        serialized representation of the given item
        +
        +
      • +
      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(String[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize an array of unserialized items to a byte array of contiguous serialized items.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        items - array of items to be serialized
        +
        Returns:
        +
        contiguous, serialized representation of the given array of unserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        @Deprecated
        +public String[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      int numItems)
        +
        Deprecated.
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        public String[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      long offsetBytes,
        +                                      int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(String item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of a single unserialized item.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        the serialized size in bytes of a single unserialized item.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(org.apache.datasketches.memory.Memory mem,
        +                  long offsetBytes,
        +                  int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the number of contiguous serialized items in Memory. + The capacity of the given Memory can be much larger that the required size of the items.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        mem - the given Memory.
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - the number of serialized items contained in the Memory
        +
        Returns:
        +
        the serialized size in bytes of the given number of items.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(String item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns a human readable string of an item.
        +
        +
        Specified by:
        +
        toString in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        a human readable string of an item.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.html new file mode 100644 index 000000000..ba47c6cd5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.html @@ -0,0 +1,538 @@ + + + + + +ArrayOfUtf16StringsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfUtf16StringsSerDe

+
+
+ +
+
    +
  • +
    +
    public class ArrayOfUtf16StringsSerDe
    +extends ArrayOfItemsSerDe<String>
    +
    Methods of serializing and deserializing arrays of String. + This class serializes strings using internal Java representation as char[], where each char + is a 16-bit code. The result is larger than one from ArrayOfStringsSerDe. + In an extreme case when all strings are in ASCII, the size is doubled. However it takes + less time to serialize and deserialize by a factor of 1.5 to 2.
    +
    +
    Author:
    +
    Alexander Saydakov
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfUtf16StringsSerDe

        +
        public ArrayOfUtf16StringsSerDe()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(String item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize a single unserialized item to a byte array.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        item - the item to be serialized
        +
        Returns:
        +
        serialized representation of the given item
        +
        +
      • +
      + + + +
        +
      • +

        serializeToByteArray

        +
        public byte[] serializeToByteArray​(String[] items)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Serialize an array of unserialized items to a byte array of contiguous serialized items.
        +
        +
        Specified by:
        +
        serializeToByteArray in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        items - array of items to be serialized
        +
        Returns:
        +
        contiguous, serialized representation of the given array of unserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        @Deprecated
        +public String[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      int numItems)
        +
        Deprecated.
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        deserializeFromMemory

        +
        public String[] deserializeFromMemory​(org.apache.datasketches.memory.Memory mem,
        +                                      long offsetBytes,
        +                                      int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Deserialize a contiguous sequence of serialized items from a given Memory.
        +
        +
        Specified by:
        +
        deserializeFromMemory in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        mem - Memory containing a contiguous sequence of serialized items
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - number of items in the contiguous serialized sequence.
        +
        Returns:
        +
        array of deserialized items
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(String item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of a single unserialized item.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        the serialized size in bytes of a single unserialized item.
        +
        +
      • +
      + + + +
        +
      • +

        sizeOf

        +
        public int sizeOf​(org.apache.datasketches.memory.Memory mem,
        +                  long offsetBytes,
        +                  int numItems)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns the serialized size in bytes of the number of contiguous serialized items in Memory. + The capacity of the given Memory can be much larger that the required size of the items.
        +
        +
        Specified by:
        +
        sizeOf in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        mem - the given Memory.
        +
        offsetBytes - the starting offset in the given Memory.
        +
        numItems - the number of serialized items contained in the Memory
        +
        Returns:
        +
        the serialized size in bytes of the given number of items.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(String item)
        +
        Description copied from class: ArrayOfItemsSerDe
        +
        Returns a human readable string of an item.
        +
        +
        Specified by:
        +
        toString in class ArrayOfItemsSerDe<String>
        +
        Parameters:
        +
        item - a specific item
        +
        Returns:
        +
        a human readable string of an item.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/BoundsOnBinomialProportions.html b/docs/5.0.X/org/apache/datasketches/common/BoundsOnBinomialProportions.html new file mode 100644 index 000000000..453622877 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/BoundsOnBinomialProportions.html @@ -0,0 +1,473 @@ + + + + + +BoundsOnBinomialProportions (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BoundsOnBinomialProportions

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.common.BoundsOnBinomialProportions
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class BoundsOnBinomialProportions
    +extends Object
    +
    Confidence intervals for binomial proportions. + +

    This class computes an approximation to the Clopper-Pearson confidence interval + for a binomial proportion. Exact Clopper-Pearson intervals are strictly + conservative, but these approximations are not.

    + +

    The main inputs are numbers n and k, which are not the same as other things + that are called n and k in our sketching library. There is also a third + parameter, numStdDev, that specifies the desired confidence level.

    +
      +
    • n is the number of independent randomized trials. It is given and therefore known.
    • +
    • p is the probability of a trial being a success. It is unknown.
    • +
    • k is the number of trials (out of n) that turn out to be successes. It is + a random variable governed by a binomial distribution. After any given + batch of n independent trials, the random variable k has a specific + value which is observed and is therefore known.
    • +
    • pHat = k / n is an unbiased estimate of the unknown success + probability p.
    • +
    + +

    Alternatively, consider a coin with unknown heads probability p. Where + n is the number of independent flips of that coin, and k is the number + of times that the coin comes up heads during a given batch of n flips. + This class computes a frequentist confidence interval [lowerBoundOnP, upperBoundOnP] for the + unknown p.

    + +

    Conceptually, the desired confidence level is specified by a tail probability delta.

    + +

    Ideally, over a large ensemble of independent batches of trials, + the fraction of batches in which the true p lies below lowerBoundOnP would be at most + delta, and the fraction of batches in which the true p lies above upperBoundOnP + would also be at most delta. + +

    Setting aside the philosophical difficulties attaching to that statement, it isn't quite + true because we are approximating the Clopper-Pearson interval.

    + +

    Finally, we point out that in this class's interface, the confidence parameter delta is + not specified directly, but rather through a "number of standard deviations" numStdDev. + The library effectively converts that to a delta via delta = normalCDF (-1.0 * numStdDev).

    + +

    It is perhaps worth emphasizing that the library is NOT merely adding and subtracting + numStdDev standard deviations to the estimate. It is doing something better, that to some + extent accounts for the fact that the binomial distribution has a non-gaussian shape.

    + +

    In particular, it is using an approximation to the inverse of the incomplete beta function + that appears as formula 26.5.22 on page 945 of the "Handbook of Mathematical Functions" + by Abramowitz and Stegun.

    +
    +
    Author:
    +
    Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static doubleapproximateLowerBoundOnP​(long n, + long k, + double numStdDevs) +
      Computes lower bound of approximate Clopper-Pearson confidence interval for a binomial + proportion.
      +
      static doubleapproximateUpperBoundOnP​(long n, + long k, + double numStdDevs) +
      Computes upper bound of approximate Clopper-Pearson confidence interval for a binomial + proportion.
      +
      static doubleerf​(double x) +
      Computes an approximation to the erf() function.
      +
      static doubleestimateUnknownP​(long n, + long k) +
      Computes an estimate of an unknown binomial proportion.
      +
      static doublenormalCDF​(double x) +
      Computes an approximation to normalCDF(x).
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        approximateLowerBoundOnP

        +
        public static double approximateLowerBoundOnP​(long n,
        +                                              long k,
        +                                              double numStdDevs)
        +
        Computes lower bound of approximate Clopper-Pearson confidence interval for a binomial + proportion. + +

        Implementation Notes:
        + The approximateLowerBoundOnP is defined with respect to the right tail of the binomial + distribution.

        +
          +
        • We want to solve for the p for which sumj,k,nbino(j;n,p) + = delta.
        • +
        • We now restate that in terms of the left tail.
        • +
        • We want to solve for the p for which sumj,0,(k-1)bino(j;n,p) + = 1 - delta.
        • +
        • Define x = 1-p.
        • +
        • We want to solve for the x for which Ix(n-k+1,k) = 1 - delta.
        • +
        • We specify 1-delta via numStdDevs through the right tail of the standard normal + distribution.
        • +
        • Smaller values of numStdDevs correspond to bigger values of 1-delta and hence to smaller + values of delta. In fact, usefully small values of delta correspond to negative values of + numStdDevs.
        • +
        • return p = 1-x.
        • +
        +
        +
        Parameters:
        +
        n - is the number of trials. Must be non-negative.
        +
        k - is the number of successes. Must be non-negative, and cannot exceed n.
        +
        numStdDevs - the number of standard deviations defining the confidence interval
        +
        Returns:
        +
        the lower bound of the approximate Clopper-Pearson confidence interval for the + unknown success probability.
        +
        +
      • +
      + + + +
        +
      • +

        approximateUpperBoundOnP

        +
        public static double approximateUpperBoundOnP​(long n,
        +                                              long k,
        +                                              double numStdDevs)
        +
        Computes upper bound of approximate Clopper-Pearson confidence interval for a binomial + proportion. + +

        Implementation Notes:
        + The approximateUpperBoundOnP is defined with respect to the left tail of the binomial + distribution.

        +
          +
        • We want to solve for the p for which sumj,0,kbino(j;n,p) + = delta.
        • +
        • Define x = 1-p.
        • +
        • We want to solve for the x for which Ix(n-k,k+1) = delta.
        • +
        • We specify delta via numStdDevs through the right tail of the standard normal + distribution.
        • +
        • Bigger values of numStdDevs correspond to smaller values of delta.
        • +
        • return p = 1-x.
        • +
        +
        +
        Parameters:
        +
        n - is the number of trials. Must be non-negative.
        +
        k - is the number of successes. Must be non-negative, and cannot exceed n.
        +
        numStdDevs - the number of standard deviations defining the confidence interval
        +
        Returns:
        +
        the upper bound of the approximate Clopper-Pearson confidence interval for the + unknown success probability.
        +
        +
      • +
      + + + +
        +
      • +

        estimateUnknownP

        +
        public static double estimateUnknownP​(long n,
        +                                      long k)
        +
        Computes an estimate of an unknown binomial proportion.
        +
        +
        Parameters:
        +
        n - is the number of trials. Must be non-negative.
        +
        k - is the number of successes. Must be non-negative, and cannot exceed n.
        +
        Returns:
        +
        the estimate of the unknown binomial proportion.
        +
        +
      • +
      + + + +
        +
      • +

        erf

        +
        public static double erf​(double x)
        +
        Computes an approximation to the erf() function.
        +
        +
        Parameters:
        +
        x - is the input to the erf function
        +
        Returns:
        +
        returns erf(x), accurate to roughly 7 decimal digits.
        +
        +
      • +
      + + + +
        +
      • +

        normalCDF

        +
        public static double normalCDF​(double x)
        +
        Computes an approximation to normalCDF(x).
        +
        +
        Parameters:
        +
        x - is the input to the normalCDF function
        +
        Returns:
        +
        returns the approximation to normalCDF(x).
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/BoundsOnRatiosInSampledSets.html b/docs/5.0.X/org/apache/datasketches/common/BoundsOnRatiosInSampledSets.html new file mode 100644 index 000000000..9de67ed32 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/BoundsOnRatiosInSampledSets.html @@ -0,0 +1,404 @@ + + + + + +BoundsOnRatiosInSampledSets (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BoundsOnRatiosInSampledSets

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.common.BoundsOnRatiosInSampledSets
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class BoundsOnRatiosInSampledSets
    +extends Object
    +
    This class is used to compute the bounds on the estimate of the ratio |B| / |A|, where: +
      +
    • |A| is the unknown size of a set A of unique identifiers.
    • +
    • |B| is the unknown size of a subset B of A.
    • +
    • a = |SA| is the observed size of a sample of A + that was obtained by Bernoulli sampling with a known inclusion probability f.
    • +
    • b = |SA ∩ B| is the observed size of a subset + of SA.
    • +
    +
    +
    Author:
    +
    Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getLowerBoundForBoverA

        +
        public static double getLowerBoundForBoverA​(long a,
        +                                            long b,
        +                                            double f)
        +
        Return the approximate lower bound based on a 95% confidence interval
        +
        +
        Parameters:
        +
        a - See class javadoc
        +
        b - See class javadoc
        +
        f - the inclusion probability used to produce the set with size a and should + generally be less than 0.5. Above this value, the results not be reliable. + When f = 1.0 this returns the estimate.
        +
        Returns:
        +
        the approximate upper bound
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBoundForBoverA

        +
        public static double getUpperBoundForBoverA​(long a,
        +                                            long b,
        +                                            double f)
        +
        Return the approximate upper bound based on a 95% confidence interval
        +
        +
        Parameters:
        +
        a - See class javadoc
        +
        b - See class javadoc
        +
        f - the inclusion probability used to produce the set with size a.
        +
        Returns:
        +
        the approximate lower bound
        +
        +
      • +
      + + + +
        +
      • +

        getEstimateOfBoverA

        +
        public static double getEstimateOfBoverA​(long a,
        +                                         long b)
        +
        Return the estimate of b over a
        +
        +
        Parameters:
        +
        a - See class javadoc
        +
        b - See class javadoc
        +
        Returns:
        +
        the estimate of b over a
        +
        +
      • +
      + + + +
        +
      • +

        getEstimateOfA

        +
        public static double getEstimateOfA​(long a,
        +                                    double f)
        +
        Return the estimate of A. See class javadoc.
        +
        +
        Parameters:
        +
        a - See class javadoc
        +
        f - the inclusion probability used to produce the set with size a.
        +
        Returns:
        +
        the approximate lower bound
        +
        +
      • +
      + + + +
        +
      • +

        getEstimateOfB

        +
        public static double getEstimateOfB​(long b,
        +                                    double f)
        +
        Return the estimate of B. See class javadoc.
        +
        +
        Parameters:
        +
        b - See class javadoc
        +
        f - the inclusion probability used to produce the set with size b.
        +
        Returns:
        +
        the approximate lower bound
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ByteArrayUtil.html b/docs/5.0.X/org/apache/datasketches/common/ByteArrayUtil.html new file mode 100644 index 000000000..cbc68817f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ByteArrayUtil.html @@ -0,0 +1,921 @@ + + + + + +ByteArrayUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ByteArrayUtil

+
+
+ +
+
    +
  • +
    +
    public final class ByteArrayUtil
    +extends Object
    +
    Useful methods for byte arrays.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ByteArrayUtil() 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static voidcopyBytes​(byte[] source, + int srcStart, + byte[] target, + int tgtStart, + int numBytes) +
      Copies bytes from source to target with offsets on both the source and target.
      +
      static doublegetDoubleBE​(byte[] array, + int offset) +
      Get a double from the given byte array starting at the given offset + in big endian order.
      +
      static doublegetDoubleLE​(byte[] array, + int offset) +
      Get a double from the given byte array starting at the given offset + in little endian order.
      +
      static floatgetFloatBE​(byte[] array, + int offset) +
      Get a float from the given byte array starting at the given offset + in big endian order.
      +
      static floatgetFloatLE​(byte[] array, + int offset) +
      Get a float from the given byte array starting at the given offset + in little endian order.
      +
      static intgetIntBE​(byte[] array, + int offset) +
      Get a int from the given byte array starting at the given offset + in big endian order.
      +
      static intgetIntLE​(byte[] array, + int offset) +
      Get a int from the given byte array starting at the given offset + in little endian order.
      +
      static longgetLongBE​(byte[] array, + int offset) +
      Get a long from the source byte array starting at the given offset + in big endian order.
      +
      static longgetLongLE​(byte[] array, + int offset) +
      Get a long from the given byte array starting at the given offset + in little endian order.
      +
      static shortgetShortBE​(byte[] array, + int offset) +
      Get a short from the given byte array starting at the given offset + in big endian order.
      +
      static shortgetShortLE​(byte[] array, + int offset) +
      Get a short from the given byte array starting at the given offset + in little endian order.
      +
      static voidputDoubleBE​(byte[] array, + int offset, + double value) +
      Put the source double into the destination byte array starting at the given offset + in big endian order.
      +
      static voidputDoubleLE​(byte[] array, + int offset, + double value) +
      Put the source double into the destination byte array starting at the given offset + in little endian order.
      +
      static voidputFloatBE​(byte[] array, + int offset, + float value) +
      Put the source float into the destination byte array starting at the given offset + in big endian order.
      +
      static voidputFloatLE​(byte[] array, + int offset, + float value) +
      Put the source float into the destination byte array starting at the given offset + in little endian order.
      +
      static voidputIntBE​(byte[] array, + int offset, + int value) +
      Put the source int into the destination byte array starting at the given offset + in big endian order.
      +
      static voidputIntLE​(byte[] array, + int offset, + int value) +
      Put the source int into the destination byte array starting at the given offset + in little endian order.
      +
      static voidputLongBE​(byte[] array, + int offset, + long value) +
      Put the source long into the destination byte array starting at the given offset + in big endian order.
      +
      static voidputLongLE​(byte[] array, + int offset, + long value) +
      Put the source long into the destination byte array starting at the given offset + in little endian order.
      +
      static voidputShortBE​(byte[] array, + int offset, + short value) +
      Put the source short into the destination byte array starting at the given offset + in big endian order.
      +
      static voidputShortLE​(byte[] array, + int offset, + short value) +
      Put the source short into the destination byte array starting at the given offset + in little endian order.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ByteArrayUtil

        +
        public ByteArrayUtil()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        copyBytes

        +
        public static void copyBytes​(byte[] source,
        +                             int srcStart,
        +                             byte[] target,
        +                             int tgtStart,
        +                             int numBytes)
        +
        Copies bytes from source to target with offsets on both the source and target.
        +
        +
        Parameters:
        +
        source - the given source
        +
        srcStart - the source starting index
        +
        target - the give target
        +
        tgtStart - the target starting index
        +
        numBytes - the number of bytes to be transferred.
        +
        +
      • +
      + + + +
        +
      • +

        getShortLE

        +
        public static short getShortLE​(byte[] array,
        +                               int offset)
        +
        Get a short from the given byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the short
        +
        +
      • +
      + + + +
        +
      • +

        putShortLE

        +
        public static void putShortLE​(byte[] array,
        +                              int offset,
        +                              short value)
        +
        Put the source short into the destination byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source short
        +
        +
      • +
      + + + +
        +
      • +

        getShortBE

        +
        public static short getShortBE​(byte[] array,
        +                               int offset)
        +
        Get a short from the given byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the short
        +
        +
      • +
      + + + +
        +
      • +

        putShortBE

        +
        public static void putShortBE​(byte[] array,
        +                              int offset,
        +                              short value)
        +
        Put the source short into the destination byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source short
        +
        +
      • +
      + + + +
        +
      • +

        getIntLE

        +
        public static int getIntLE​(byte[] array,
        +                           int offset)
        +
        Get a int from the given byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the int
        +
        +
      • +
      + + + +
        +
      • +

        putIntLE

        +
        public static void putIntLE​(byte[] array,
        +                            int offset,
        +                            int value)
        +
        Put the source int into the destination byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source int
        +
        +
      • +
      + + + +
        +
      • +

        getIntBE

        +
        public static int getIntBE​(byte[] array,
        +                           int offset)
        +
        Get a int from the given byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the int
        +
        +
      • +
      + + + +
        +
      • +

        putIntBE

        +
        public static void putIntBE​(byte[] array,
        +                            int offset,
        +                            int value)
        +
        Put the source int into the destination byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source int
        +
        +
      • +
      + + + +
        +
      • +

        getLongLE

        +
        public static long getLongLE​(byte[] array,
        +                             int offset)
        +
        Get a long from the given byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the long
        +
        +
      • +
      + + + +
        +
      • +

        putLongLE

        +
        public static void putLongLE​(byte[] array,
        +                             int offset,
        +                             long value)
        +
        Put the source long into the destination byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source long
        +
        +
      • +
      + + + +
        +
      • +

        getLongBE

        +
        public static long getLongBE​(byte[] array,
        +                             int offset)
        +
        Get a long from the source byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source starting point
        +
        Returns:
        +
        the long
        +
        +
      • +
      + + + +
        +
      • +

        putLongBE

        +
        public static void putLongBE​(byte[] array,
        +                             int offset,
        +                             long value)
        +
        Put the source long into the destination byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination starting point
        +
        value - source long
        +
        +
      • +
      + + + +
        +
      • +

        getFloatLE

        +
        public static float getFloatLE​(byte[] array,
        +                               int offset)
        +
        Get a float from the given byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the float
        +
        +
      • +
      + + + +
        +
      • +

        putFloatLE

        +
        public static void putFloatLE​(byte[] array,
        +                              int offset,
        +                              float value)
        +
        Put the source float into the destination byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source float
        +
        +
      • +
      + + + +
        +
      • +

        getFloatBE

        +
        public static float getFloatBE​(byte[] array,
        +                               int offset)
        +
        Get a float from the given byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the float
        +
        +
      • +
      + + + +
        +
      • +

        putFloatBE

        +
        public static void putFloatBE​(byte[] array,
        +                              int offset,
        +                              float value)
        +
        Put the source float into the destination byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source float
        +
        +
      • +
      + + + +
        +
      • +

        getDoubleLE

        +
        public static double getDoubleLE​(byte[] array,
        +                                 int offset)
        +
        Get a double from the given byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the double
        +
        +
      • +
      + + + +
        +
      • +

        putDoubleLE

        +
        public static void putDoubleLE​(byte[] array,
        +                               int offset,
        +                               double value)
        +
        Put the source double into the destination byte array starting at the given offset + in little endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source double
        +
        +
      • +
      + + + +
        +
      • +

        getDoubleBE

        +
        public static double getDoubleBE​(byte[] array,
        +                                 int offset)
        +
        Get a double from the given byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - source byte array
        +
        offset - source offset
        +
        Returns:
        +
        the double
        +
        +
      • +
      + + + +
        +
      • +

        putDoubleBE

        +
        public static void putDoubleBE​(byte[] array,
        +                               int offset,
        +                               double value)
        +
        Put the source double into the destination byte array starting at the given offset + in big endian order. + There is no bounds checking.
        +
        +
        Parameters:
        +
        array - destination byte array
        +
        offset - destination offset
        +
        value - source double
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/Family.html b/docs/5.0.X/org/apache/datasketches/common/Family.html new file mode 100644 index 000000000..6af21576d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/Family.html @@ -0,0 +1,846 @@ + + + + + +Family (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum Family

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<Family>
    +
    +
    +
    public enum Family
    +extends Enum<Family>
    +
    Defines the various families of sketch and set operation classes. A family defines a set of + classes that share fundamental algorithms and behaviors. The classes within a family may + still differ by how they are stored and accessed. For example, internally there are separate + classes for the QuickSelect sketch algorithm that operate on the Java heap and off-heap. + Not all of these families have parallel forms on and off-heap but are included for completeness.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      A_NOT_B +
      The A and not B family is an operation for the Theta Sketch Framework of sketches.
      +
      ALPHA +
      The Alpha Sketch family is a member of the Theta Sketch Framework of sketches and is best + suited for real-time processes where both the updating of the sketch and getting the estimate + is performed directly on the sketch.
      +
      COMPACT +
      The Compact Sketch family is a member of the Theta Sketch Framework of sketches.
      +
      COUNTMIN +
      CountMin Sketch
      +
      CPC +
      Compressed Probabilistic Counting (CPC) Sketch
      +
      FREQUENCY +
      The Frequency family of sketches.
      +
      HLL +
      The HLL family of sketches.
      +
      INTERSECTION +
      The Intersection family is an operation for the Theta Sketch Framework of sketches.
      +
      KLL +
      KLL quantiles sketch
      +
      QUANTILES +
      The Quantiles family of sketches.
      +
      QUICKSELECT +
      The QuickSelect Sketch family is a member of the Theta Sketch Framework of sketches and + is the workhorse of the Theta Sketch Families and can be constructed for either on-heap or + off-heap operation.
      +
      REQ +
      Relative Error Quantiles Sketch
      +
      RESERVOIR +
      The Reservoir family of sketches.
      +
      RESERVOIR_UNION +
      The reservoir sampling family of Union operations.
      +
      TUPLE +
      The Tuple family of sketches is a large family of sketches that are extensions of the + Theta Sketch Framework.
      +
      UNION +
      The Union family is an operation for the Theta Sketch Framework of sketches.
      +
      VAROPT +
      The VarOpt family of sketches.
      +
      VAROPT_UNION +
      The VarOpt family of sketches.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        ALPHA

        +
        public static final Family ALPHA
        +
        The Alpha Sketch family is a member of the Theta Sketch Framework of sketches and is best + suited for real-time processes where both the updating of the sketch and getting the estimate + is performed directly on the sketch. In this situation the AlphaSketch has roughly a + 30% improvement (~1/sqrt(2*k)) in its error distribution as compared to the QuickSelect + (or similar KMV-derived) sketches. + +

        If the AlphaSketch is fed into any SetOperation, the error distribution reverts back to the + normal QuickSelect/KMV error distribution (~1/sqrt(k)). For this reason, the AlphaSketch + does not have a sister class for off-heap operation. The Alpha Sketch has a roughly 30% faster + overall update time as compared to the QuickSelect sketch family.

        + +

        The Alpha Sketch is created using the UpdateSketch.builder(). + See Alpha TCF and + Theta Sketch Framework

        +
      • +
      + + + +
        +
      • +

        QUICKSELECT

        +
        public static final Family QUICKSELECT
        +
        The QuickSelect Sketch family is a member of the Theta Sketch Framework of sketches and + is the workhorse of the Theta Sketch Families and can be constructed for either on-heap or + off-heap operation. + The QuickSelect Sketch is created using the UpdateSketch.builder(). + See Quick Select TCF
        +
      • +
      + + + +
        +
      • +

        COMPACT

        +
        public static final Family COMPACT
        +
        The Compact Sketch family is a member of the Theta Sketch Framework of sketches. + The are read-only and cannot be updated, but can participate in any of the Set Operations. + The compact sketches are never created directly with a constructor or Builder. + Instead they are created as a result of the compact() + method of an UpdateSketch or as a result of a getSketchSamples() of a SetOperation.
        +
      • +
      + + + +
        +
      • +

        UNION

        +
        public static final Family UNION
        +
        The Union family is an operation for the Theta Sketch Framework of sketches. + The Union is constructed using the SetOperation.builder().
        +
      • +
      + + + +
        +
      • +

        INTERSECTION

        +
        public static final Family INTERSECTION
        +
        The Intersection family is an operation for the Theta Sketch Framework of sketches. + The Intersection is constructed using the SetOperation.builder().
        +
      • +
      + + + +
        +
      • +

        A_NOT_B

        +
        public static final Family A_NOT_B
        +
        The A and not B family is an operation for the Theta Sketch Framework of sketches. + The AnotB operation is constructed using the SetOperation.builder().
        +
      • +
      + + + +
        +
      • +

        HLL

        +
        public static final Family HLL
        +
        The HLL family of sketches. (Not part of TSF.)
        +
      • +
      + + + +
        +
      • +

        QUANTILES

        +
        public static final Family QUANTILES
        +
        The Quantiles family of sketches. (Not part of TSF.)
        +
      • +
      + + + +
        +
      • +

        TUPLE

        +
        public static final Family TUPLE
        +
        The Tuple family of sketches is a large family of sketches that are extensions of the + Theta Sketch Framework.
        +
      • +
      + + + +
        +
      • +

        FREQUENCY

        +
        public static final Family FREQUENCY
        +
        The Frequency family of sketches. (Not part of TSF.)
        +
      • +
      + + + +
        +
      • +

        RESERVOIR

        +
        public static final Family RESERVOIR
        +
        The Reservoir family of sketches. (Not part of TSF.)
        +
      • +
      + + + +
        +
      • +

        RESERVOIR_UNION

        +
        public static final Family RESERVOIR_UNION
        +
        The reservoir sampling family of Union operations. (Not part of TSF.)
        +
      • +
      + + + +
        +
      • +

        VAROPT

        +
        public static final Family VAROPT
        +
        The VarOpt family of sketches. (Not part of TSF.)
        +
      • +
      + + + +
        +
      • +

        VAROPT_UNION

        +
        public static final Family VAROPT_UNION
        +
        The VarOpt family of sketches. (Not part of TSF.)
        +
      • +
      + + + +
        +
      • +

        KLL

        +
        public static final Family KLL
        +
        KLL quantiles sketch
        +
      • +
      + + + +
        +
      • +

        CPC

        +
        public static final Family CPC
        +
        Compressed Probabilistic Counting (CPC) Sketch
        +
      • +
      + + + +
        +
      • +

        REQ

        +
        public static final Family REQ
        +
        Relative Error Quantiles Sketch
        +
      • +
      + + + +
        +
      • +

        COUNTMIN

        +
        public static final Family COUNTMIN
        +
        CountMin Sketch
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static Family[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (Family c : Family.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static Family valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getID

        +
        public int getID()
        +
        Returns the byte ID for this family
        +
        +
        Returns:
        +
        the byte ID for this family
        +
        +
      • +
      + + + +
        +
      • +

        checkFamilyID

        +
        public void checkFamilyID​(int id)
        +
        +
        Parameters:
        +
        id - the given id, a value < 128.
        +
        +
      • +
      + + + +
        +
      • +

        getFamilyName

        +
        public String getFamilyName()
        +
        Returns the name for this family
        +
        +
        Returns:
        +
        the name for this family
        +
        +
      • +
      + + + +
        +
      • +

        getMinPreLongs

        +
        public int getMinPreLongs()
        +
        Returns the minimum preamble size for this family in longs
        +
        +
        Returns:
        +
        the minimum preamble size for this family in longs
        +
        +
      • +
      + + + +
        +
      • +

        getMaxPreLongs

        +
        public int getMaxPreLongs()
        +
        Returns the maximum preamble size for this family in longs
        +
        +
        Returns:
        +
        the maximum preamble size for this family in longs
        +
        +
      • +
      + + + + + + + +
        +
      • +

        idToFamily

        +
        public static Family idToFamily​(int id)
        +
        Returns the Family given the ID
        +
        +
        Parameters:
        +
        id - the given ID
        +
        Returns:
        +
        the Family given the ID
        +
        +
      • +
      + + + +
        +
      • +

        stringToFamily

        +
        public static Family stringToFamily​(String famName)
        +
        Returns the Family given the family name
        +
        +
        Parameters:
        +
        famName - the family name
        +
        Returns:
        +
        the Family given the family name
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/ResizeFactor.html b/docs/5.0.X/org/apache/datasketches/common/ResizeFactor.html new file mode 100644 index 000000000..9e982868c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/ResizeFactor.html @@ -0,0 +1,489 @@ + + + + + +ResizeFactor (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum ResizeFactor

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<ResizeFactor>
    +
    +
    +
    public enum ResizeFactor
    +extends Enum<ResizeFactor>
    +
    For the Families that accept this configuration parameter, it controls the size multiple that + affects how fast the internal cache grows, when more space is required. + See Resize Factor
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        X1

        +
        public static final ResizeFactor X1
        +
        Do not resize. Sketch will be configured to full size.
        +
      • +
      + + + +
        +
      • +

        X2

        +
        public static final ResizeFactor X2
        +
        Resize factor is 2.
        +
      • +
      + + + +
        +
      • +

        X4

        +
        public static final ResizeFactor X4
        +
        Resize factor is 4.
        +
      • +
      + + + +
        +
      • +

        X8

        +
        public static final ResizeFactor X8
        +
        Resize factor is 8.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static ResizeFactor[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (ResizeFactor c : ResizeFactor.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static ResizeFactor valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        lg

        +
        public int lg()
        +
        Returns the Log-base 2 of the Resize Factor
        +
        +
        Returns:
        +
        the Log-base 2 of the Resize Factor
        +
        +
      • +
      + + + +
        +
      • +

        getRF

        +
        public static ResizeFactor getRF​(int lg)
        +
        Returns the Resize Factor given the Log-base 2 of the Resize Factor
        +
        +
        Parameters:
        +
        lg - a value between zero and 3, inclusive.
        +
        Returns:
        +
        the Resize Factor given the Log-base 2 of the Resize Factor
        +
        +
      • +
      + + + +
        +
      • +

        getValue

        +
        public int getValue()
        +
        Returns the Resize Factor
        +
        +
        Returns:
        +
        the Resize Factor
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/SketchesArgumentException.html b/docs/5.0.X/org/apache/datasketches/common/SketchesArgumentException.html new file mode 100644 index 000000000..a5ec2e75c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/SketchesArgumentException.html @@ -0,0 +1,317 @@ + + + + + +SketchesArgumentException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SketchesArgumentException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class SketchesArgumentException
    +extends SketchesException
    +
    Illegal Arguments Exception class for the library
    +
    +
    Author:
    +
    Lee Rhodes
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SketchesArgumentException

        +
        public SketchesArgumentException​(String message)
        +
        Constructs a new runtime exception with the specified detail message. The cause is not + initialized, and may subsequently be initialized by a call to + Throwable.initCause(java.lang.Throwable).
        +
        +
        Parameters:
        +
        message - the detail message. The detail message is saved for later retrieval by the + Throwable.getMessage() method.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/SketchesException.html b/docs/5.0.X/org/apache/datasketches/common/SketchesException.html new file mode 100644 index 000000000..f7bc383e7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/SketchesException.html @@ -0,0 +1,344 @@ + + + + + +SketchesException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SketchesException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SketchesException

        +
        public SketchesException​(String message)
        +
        Constructs a new runtime exception with the specified detail message. The cause is not + initialized, and may subsequently be initialized by a call to + Throwable.initCause(java.lang.Throwable).
        +
        +
        Parameters:
        +
        message - the detail message. The detail message is saved for later retrieval by the + Throwable.getMessage() method.
        +
        +
      • +
      + + + +
        +
      • +

        SketchesException

        +
        public SketchesException​(String message,
        +                         Throwable cause)
        +
        Constructs a new runtime exception with the specified detail message and cause. + +

        Note that the detail message associated with cause is not automatically incorporated + in this runtime exception's detail message.

        +
        +
        Parameters:
        +
        message - the detail message (which is saved for later retrieval by the + Throwable.getMessage() method).
        +
        cause - the cause (which is saved for later retrieval by the Throwable.getCause() + method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/SketchesReadOnlyException.html b/docs/5.0.X/org/apache/datasketches/common/SketchesReadOnlyException.html new file mode 100644 index 000000000..84221407f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/SketchesReadOnlyException.html @@ -0,0 +1,338 @@ + + + + + +SketchesReadOnlyException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SketchesReadOnlyException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class SketchesReadOnlyException
    +extends SketchesException
    +
    Write operation attempted on a read-only class.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SketchesReadOnlyException

        +
        public SketchesReadOnlyException()
        +
        Constructs a new runtime exception with the message: + "Write operation attempted on a read-only class." + +

        The cause is not initialized, and may subsequently be initialized by a call to + Throwable.initCause(java.lang.Throwable).

        +
      • +
      + + + +
        +
      • +

        SketchesReadOnlyException

        +
        public SketchesReadOnlyException​(String message)
        +
        Constructs a new runtime exception with the specified detail message. The cause is not + initialized, and may subsequently be initialized by a call to + Throwable.initCause(java.lang.Throwable).
        +
        +
        Parameters:
        +
        message - the detail message. The detail message is saved for later retrieval by the + Throwable.getMessage() method.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/SketchesStateException.html b/docs/5.0.X/org/apache/datasketches/common/SketchesStateException.html new file mode 100644 index 000000000..0e7f7fd0d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/SketchesStateException.html @@ -0,0 +1,317 @@ + + + + + +SketchesStateException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SketchesStateException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SketchesStateException

        +
        public SketchesStateException​(String message)
        +
        Constructs a new runtime exception with the specified detail message. The cause is not + initialized, and may subsequently be initialized by a call to + Throwable.initCause(java.lang.Throwable).
        +
        +
        Parameters:
        +
        message - the detail message. The detail message is saved for later retrieval by the + Throwable.getMessage() method.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/SuppressFBWarnings.html b/docs/5.0.X/org/apache/datasketches/common/SuppressFBWarnings.html new file mode 100644 index 000000000..334dc991e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/SuppressFBWarnings.html @@ -0,0 +1,290 @@ + + + + + +SuppressFBWarnings (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Annotation Type SuppressFBWarnings

+
+
+
+
    +
  • +
    +
    @Retention(CLASS)
    +public @interface SuppressFBWarnings
    +
    Used to suppress SpotBug warnings.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Optional Element Summary

      + + + + + + + + + + + + + + + + + +
      Optional Elements 
      Modifier and TypeOptional ElementDescription
      Stringjustification +
      Optional explanation for the suppression.
      +
      String[]value +
      A list of comma-separated, quoted SpotBugs warnings that are to be suppressed in the associated + annotated element.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Element Detail

      + + + +
        +
      • +

        value

        +
        String[] value
        +
        A list of comma-separated, quoted SpotBugs warnings that are to be suppressed in the associated + annotated element. The value can be a bug category, kind or pattern.
        +
        +
        Returns:
        +
        list of relevant bug descriptors
        +
        +
        +
        Default:
        +
        {}
        +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + +
        +
      • +

        justification

        +
        String justification
        +
        Optional explanation for the suppression.
        +
        +
        Returns:
        +
        explanation
        +
        +
        +
        Default:
        +
        ""
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/Util.html b/docs/5.0.X/org/apache/datasketches/common/Util.html new file mode 100644 index 000000000..ac8d14d25 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/Util.html @@ -0,0 +1,1680 @@ + + + + + +Util (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Util

+
+
+ +
+
    +
  • +
    +
    public final class Util
    +extends Object
    +
    Common utility functions.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static doubleINVERSE_GOLDEN +
      The inverse golden ratio as a fraction.
      +
      static longINVERSE_GOLDEN_U64 +
      The inverse golden ratio as an unsigned long.
      +
      static doubleLOG2 +
      The natural logarithm of 2.0.
      +
      static doubleLONG_MAX_VALUE_AS_DOUBLE +
      Long.MAX_VALUE as a double.
      +
      static StringLS +
      The java line separator character as a String.
      +
      static charTAB +
      The tab character
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static intbytesToInt​(byte[] arr) +
      Returns an int extracted from a Little-Endian byte array.
      +
      static longbytesToLong​(byte[] arr) +
      Returns a long extracted from a Little-Endian byte array.
      +
      static StringbytesToString​(byte[] arr, + boolean signed, + boolean littleEndian, + String sep) +
      Returns a string view of a byte array
      +
      static intceilingIntPowerOf2​(int n) +
      Computes the int ceiling power of 2 within the range [1, 2^30].
      +
      static longceilingLongPowerOf2​(long n) +
      Computes the long ceiling power of 2 within the range [1, 2^62].
      +
      static doubleceilingPowerBaseOfDouble​(double base, + double n) +
      Returns the ceiling of a given n given a base, where the ceiling is an integral power of the base.
      +
      static StringcharacterPad​(String s, + int fieldLength, + char padChar, + boolean postpend) +
      Prepend or postpend the given string with the given character to fill the given field length.
      +
      static voidcheckBounds​(long reqOff, + long reqLen, + long allocSize) +
      Check the requested offset and length against the allocated size.
      +
      static voidcheckIfIntPowerOf2​(int powerOf2, + String argName) +
      Checks the given int argument to make sure it is a positive power of 2 and greater than zero.
      +
      static voidcheckIfLongPowerOf2​(long powerOf2, + String argName) +
      Checks the given long argument to make sure it is a positive power of 2 and greater than zero.
      +
      static voidcheckIfMultipleOf8AndGT0​(long v, + String argName) +
      Checks if parameter v is a multiple of 8 and greater than zero.
      +
      static voidcheckProbability​(double p, + String argName) +
      Checks the given parameter to make sure it is positive and between 0.0 inclusive and 1.0 + inclusive.
      +
      static intexactLog2OfInt​(int powerOf2) +
      Returns the log2 of the given int value if it is an exact power of 2 and greater than zero.
      +
      static intexactLog2OfInt​(int powerOf2, + String argName) +
      Returns the log2 of the given int value if it is an exact power of 2 and greater than zero.
      +
      static intexactLog2OfLong​(long powerOf2) +
      Returns the log2 of the given long value if it is an exact power of 2 and greater than zero.
      +
      static intexactLog2OfLong​(long powerOf2, + String argName) +
      Returns the log2 of the given long value if it is an exact power of 2 and greater than zero.
      +
      static doublefloorPowerBaseOfDouble​(double base, + double n) +
      Computes the floor of a given n given base, where the floor is an integral power of the base.
      +
      static intfloorPowerOf2​(int n) +
      Computes the floor power of 2 given n is in the range [1, 2^31-1].
      +
      static longfloorPowerOf2​(long n) +
      Computes the floor power of 2 given n is in the range [1, 2^63-1].
      +
      static byte[]intToBytes​(int v, + byte[] arr) +
      Returns a Little-Endian byte array extracted from the given int.
      +
      static StringintToFixedLengthString​(int number, + int length) +
      Converts the given number to a string prepended with spaces, if necessary, to + match the given length.
      +
      static doubleinvPow2​(int e) +
      Computes the inverse integer power of 2: 1/(2^e) = 2^(-e).
      +
      static booleanisEven​(long n) +
      Returns true if given n is even.
      +
      static booleanisIntPowerOf2​(int powerOf2) +
      Returns true if given int argument is exactly a positive power of 2 and greater than zero.
      +
      static booleanisLessThanUnsigned​(long n1, + long n2) +
      Unsigned compare with longs.
      +
      static booleanisLongPowerOf2​(long powerOf2) +
      Returns true if given long argument is exactly a positive power of 2 and greater than zero.
      +
      static booleanisMultipleOf8AndGT0​(long v) +
      Returns true if v is a multiple of 8 and greater than zero
      +
      static booleanisOdd​(long n) +
      Returns true if given n is odd.
      +
      static <T> booleanle​(Object item1, + Object item2, + Comparator<? super T> c) +
      Is item1 Less-Than-Or-Equal-To item2
      +
      static doublelog2​(double value) +
      The log2(value)
      +
      static doublelogBaseOfX​(double base, + double x) +
      Returns the logbase(x).
      +
      static byte[]longToBytes​(long v, + byte[] arr) +
      Returns a Little-Endian byte array extracted from the given long.
      +
      static StringlongToHexBytes​(long v) +
      Returns a string of spaced hex bytes in Big-Endian order.
      +
      static <T> booleanlt​(Object item1, + Object item2, + Comparator<? super T> c) +
      Is item1 Less-Than item2
      +
      static <T> ObjectmaxT​(Object item1, + Object item2, + Comparator<? super T> c) +
      Finds the maximum of two generic items
      +
      static StringmilliSecToString​(long mS) +
      Returns the given time in milliseconds formatted as Hours:Min:Sec.mSec
      +
      static <T> ObjectminT​(Object item1, + Object item2, + Comparator<? super T> c) +
      Finds the minimum of two generic items
      +
      static StringnanoSecToString​(long nS) +
      Returns the given time in nanoseconds formatted as Sec.mSec_uSec_nSec
      +
      static intnumberOfLeadingOnes​(long v) +
      Returns the number of one bits preceding the highest-order ("leftmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
      +
      static intnumberOfTrailingOnes​(long v) +
      Returns the number of one bits following the lowest-order ("rightmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
      +
      static intnumDigits​(int n) +
      Computes the number of decimal digits of the number n
      +
      static doublepowerSeriesNextDouble​(int ppb, + double curPoint, + boolean roundToLong, + double logBase) +
      Computes the next larger double in the power series + point = logBase( i / ppb ) given the current point in the series.
      +
      static longpwr2SeriesNext​(int ppo, + long curPoint) +
      Computes the next larger integer point in the power series + point = 2( i / ppo ) given the current point in the series.
      +
      static intpwr2SeriesPrev​(int ppo, + int curPoint) +
      Computes the previous, smaller integer point in the power series + point = 2( i / ppo ) given the current point in the series.
      +
      static StringzeroPad​(String s, + int fieldLength) +
      Prepend the given string with zeros.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        LS

        +
        public static final String LS
        +
        The java line separator character as a String.
        +
      • +
      + + + + + + + +
        +
      • +

        LOG2

        +
        public static final double LOG2
        +
        The natural logarithm of 2.0.
        +
      • +
      + + + +
        +
      • +

        INVERSE_GOLDEN_U64

        +
        public static final long INVERSE_GOLDEN_U64
        +
        The inverse golden ratio as an unsigned long.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        INVERSE_GOLDEN

        +
        public static final double INVERSE_GOLDEN
        +
        The inverse golden ratio as a fraction. + This has more precision than using the formula: (Math.sqrt(5.0) - 1.0) / 2.0.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        LONG_MAX_VALUE_AS_DOUBLE

        +
        public static final double LONG_MAX_VALUE_AS_DOUBLE
        +
        Long.MAX_VALUE as a double.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        bytesToInt

        +
        public static int bytesToInt​(byte[] arr)
        +
        Returns an int extracted from a Little-Endian byte array.
        +
        +
        Parameters:
        +
        arr - the given byte array
        +
        Returns:
        +
        an int extracted from a Little-Endian byte array.
        +
        +
      • +
      + + + +
        +
      • +

        bytesToLong

        +
        public static long bytesToLong​(byte[] arr)
        +
        Returns a long extracted from a Little-Endian byte array.
        +
        +
        Parameters:
        +
        arr - the given byte array
        +
        Returns:
        +
        a long extracted from a Little-Endian byte array.
        +
        +
      • +
      + + + +
        +
      • +

        intToBytes

        +
        public static byte[] intToBytes​(int v,
        +                                byte[] arr)
        +
        Returns a Little-Endian byte array extracted from the given int.
        +
        +
        Parameters:
        +
        v - the given int
        +
        arr - a given array of 4 bytes that will be returned with the data
        +
        Returns:
        +
        a Little-Endian byte array extracted from the given int.
        +
        +
      • +
      + + + +
        +
      • +

        longToBytes

        +
        public static byte[] longToBytes​(long v,
        +                                 byte[] arr)
        +
        Returns a Little-Endian byte array extracted from the given long.
        +
        +
        Parameters:
        +
        v - the given long
        +
        arr - a given array of 8 bytes that will be returned with the data
        +
        Returns:
        +
        a Little-Endian byte array extracted from the given long.
        +
        +
      • +
      + + + +
        +
      • +

        longToHexBytes

        +
        public static String longToHexBytes​(long v)
        +
        Returns a string of spaced hex bytes in Big-Endian order.
        +
        +
        Parameters:
        +
        v - the given long
        +
        Returns:
        +
        string of spaced hex bytes in Big-Endian order.
        +
        +
      • +
      + + + +
        +
      • +

        bytesToString

        +
        public static String bytesToString​(byte[] arr,
        +                                   boolean signed,
        +                                   boolean littleEndian,
        +                                   String sep)
        +
        Returns a string view of a byte array
        +
        +
        Parameters:
        +
        arr - the given byte array
        +
        signed - set true if you want the byte values signed.
        +
        littleEndian - set true if you want Little-Endian order
        +
        sep - the separator string between bytes
        +
        Returns:
        +
        a string view of a byte array
        +
        +
      • +
      + + + +
        +
      • +

        nanoSecToString

        +
        public static String nanoSecToString​(long nS)
        +
        Returns the given time in nanoseconds formatted as Sec.mSec_uSec_nSec
        +
        +
        Parameters:
        +
        nS - the given nanoseconds
        +
        Returns:
        +
        the given time in nanoseconds formatted as Sec.mSec_uSec_nSec
        +
        +
      • +
      + + + +
        +
      • +

        milliSecToString

        +
        public static String milliSecToString​(long mS)
        +
        Returns the given time in milliseconds formatted as Hours:Min:Sec.mSec
        +
        +
        Parameters:
        +
        mS - the given milliseconds
        +
        Returns:
        +
        the given time in milliseconds formatted as Hours:Min:Sec.mSec
        +
        +
      • +
      + + + +
        +
      • +

        zeroPad

        +
        public static String zeroPad​(String s,
        +                             int fieldLength)
        +
        Prepend the given string with zeros. If the given string is equal or greater than the given + field length, it will be returned without modification.
        +
        +
        Parameters:
        +
        s - the given string
        +
        fieldLength - desired total field length including the given string
        +
        Returns:
        +
        the given string prepended with zeros.
        +
        +
      • +
      + + + +
        +
      • +

        characterPad

        +
        public static String characterPad​(String s,
        +                                  int fieldLength,
        +                                  char padChar,
        +                                  boolean postpend)
        +
        Prepend or postpend the given string with the given character to fill the given field length. + If the given string is equal to or greater than the given field length, it will be returned without modification.
        +
        +
        Parameters:
        +
        s - the given string
        +
        fieldLength - the desired field length
        +
        padChar - the desired pad character
        +
        postpend - if true append the pacCharacters to the end of the string.
        +
        Returns:
        +
        prepended or postpended given string with the given character to fill the given field length.
        +
        +
      • +
      + + + +
        +
      • +

        checkIfMultipleOf8AndGT0

        +
        public static void checkIfMultipleOf8AndGT0​(long v,
        +                                            String argName)
        +
        Checks if parameter v is a multiple of 8 and greater than zero.
        +
        +
        Parameters:
        +
        v - The parameter to check
        +
        argName - This name will be part of the error message if the check fails.
        +
        +
      • +
      + + + +
        +
      • +

        isMultipleOf8AndGT0

        +
        public static boolean isMultipleOf8AndGT0​(long v)
        +
        Returns true if v is a multiple of 8 and greater than zero
        +
        +
        Parameters:
        +
        v - The parameter to check
        +
        Returns:
        +
        true if v is a multiple of 8 and greater than zero
        +
        +
      • +
      + + + +
        +
      • +

        isIntPowerOf2

        +
        public static boolean isIntPowerOf2​(int powerOf2)
        +
        Returns true if given int argument is exactly a positive power of 2 and greater than zero.
        +
        +
        Parameters:
        +
        powerOf2 - The input argument.
        +
        Returns:
        +
        true if argument is exactly a positive power of 2 and greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        isLongPowerOf2

        +
        public static boolean isLongPowerOf2​(long powerOf2)
        +
        Returns true if given long argument is exactly a positive power of 2 and greater than zero.
        +
        +
        Parameters:
        +
        powerOf2 - The input argument.
        +
        Returns:
        +
        true if argument is exactly a positive power of 2 and greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        checkIfIntPowerOf2

        +
        public static void checkIfIntPowerOf2​(int powerOf2,
        +                                      String argName)
        +
        Checks the given int argument to make sure it is a positive power of 2 and greater than zero. + If not it throws an exception with the user supplied local argument name.
        +
        +
        Parameters:
        +
        powerOf2 - The input int argument must be a power of 2 and greater than zero.
        +
        argName - Used in the thrown exception.
        +
        Throws:
        +
        SketchesArgumentException - if not a power of 2 nor greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        checkIfLongPowerOf2

        +
        public static void checkIfLongPowerOf2​(long powerOf2,
        +                                       String argName)
        +
        Checks the given long argument to make sure it is a positive power of 2 and greater than zero. + If not, it throws an exception with the user supplied local argument name.
        +
        +
        Parameters:
        +
        powerOf2 - The input long argument must be a power of 2 and greater than zero.
        +
        argName - Used in the thrown exception.
        +
        Throws:
        +
        SketchesArgumentException - if not a power of 2 nor greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        ceilingIntPowerOf2

        +
        public static int ceilingIntPowerOf2​(int n)
        +
        Computes the int ceiling power of 2 within the range [1, 2^30]. This is the smallest positive power + of 2 that is equal to or greater than the given n and a mathematical integer. + +

        For: +

          +
        • n ≤ 1: returns 1
        • +
        • 2^30 ≤ n ≤ 2^31 -1 : returns 2^30
        • +
        • n == an exact power of 2 : returns n
        • +
        • otherwise returns the smallest power of 2 ≥ n and equal to a mathematical integer
        • +
        +
        +
        Parameters:
        +
        n - The input int argument.
        +
        Returns:
        +
        the ceiling power of 2.
        +
        +
      • +
      + + + +
        +
      • +

        ceilingLongPowerOf2

        +
        public static long ceilingLongPowerOf2​(long n)
        +
        Computes the long ceiling power of 2 within the range [1, 2^62]. This is the smallest positive power + of 2 that is equal to or greater than the given n and a mathematical long. + +

        For: +

          +
        • n ≤ 1: returns 1
        • +
        • 2^62 ≤ n ≤ 2^63 -1 : returns 2^62
        • +
        • n == an exact power of 2 : returns n
        • +
        • otherwise returns the smallest power of 2 ≥ n and equal to a mathematical integer
        • +
        +
        +
        Parameters:
        +
        n - The input long argument.
        +
        Returns:
        +
        the ceiling power of 2.
        +
        +
      • +
      + + + +
        +
      • +

        floorPowerOf2

        +
        public static int floorPowerOf2​(int n)
        +
        Computes the floor power of 2 given n is in the range [1, 2^31-1]. + This is the largest positive power of 2 that equal to or less than the given n and equal + to a mathematical integer. + +

        For: +

          +
        • n ≤ 1: returns 1
        • +
        • 2^30 ≤ n ≤ 2^31 -1 : returns 2^30
        • +
        • n == a power of 2 : returns n
        • +
        • otherwise returns the largest power of 2 less than n and equal to a mathematical + integer.
        • +
        +
        +
        Parameters:
        +
        n - The given int argument.
        +
        Returns:
        +
        the floor power of 2 as an int.
        +
        +
      • +
      + + + +
        +
      • +

        floorPowerOf2

        +
        public static long floorPowerOf2​(long n)
        +
        Computes the floor power of 2 given n is in the range [1, 2^63-1]. + This is the largest positive power of 2 that is equal to or less than the given n and + equal to a mathematical integer. + +

        For: +

          +
        • n ≤ 1: returns 1
        • +
        • 2^62 ≤ n ≤ 2^63 -1 : returns 2^62
        • +
        • n == a power of 2 : returns n
        • +
        • otherwise returns the largest power of 2 less than n and equal to a mathematical + integer.
        • +
        +
        +
        Parameters:
        +
        n - The given long argument.
        +
        Returns:
        +
        the floor power of 2 as a long
        +
        +
      • +
      + + + +
        +
      • +

        invPow2

        +
        public static double invPow2​(int e)
        +
        Computes the inverse integer power of 2: 1/(2^e) = 2^(-e).
        +
        +
        Parameters:
        +
        e - a positive value between 0 and 1023 inclusive
        +
        Returns:
        +
        the inverse integer power of 2: 1/(2^e) = 2^(-e)
        +
        +
      • +
      + + + +
        +
      • +

        pwr2SeriesNext

        +
        public static long pwr2SeriesNext​(int ppo,
        +                                  long curPoint)
        +
        Computes the next larger integer point in the power series + point = 2( i / ppo ) given the current point in the series. + For illustration, this can be used in a loop as follows: + +
        
        +     int maxP = 1024;
        +     int minP = 1;
        +     int ppo = 2;
        +
        +     for (int p = minP; p <= maxP; p = pwr2LawNext(ppo, p)) {
        +       System.out.print(p + " ");
        +     }
        +     //generates the following series:
        +     //1 2 3 4 6 8 11 16 23 32 45 64 91 128 181 256 362 512 724 1024
        + 
        +
        +
        Parameters:
        +
        ppo - Points-Per-Octave, or the number of points per integer powers of 2 in the series.
        +
        curPoint - the current point of the series. Must be ≥ 1.
        +
        Returns:
        +
        the next point in the power series.
        +
        +
      • +
      + + + +
        +
      • +

        pwr2SeriesPrev

        +
        public static int pwr2SeriesPrev​(int ppo,
        +                                 int curPoint)
        +
        Computes the previous, smaller integer point in the power series + point = 2( i / ppo ) given the current point in the series. + For illustration, this can be used in a loop as follows: + +
        
        +     int maxP = 1024;
        +     int minP = 1;
        +     int ppo = 2;
        +
        +     for (int p = maxP; p >= minP; p = pwr2LawPrev(ppo, p)) {
        +       System.out.print(p + " ");
        +     }
        +     //generates the following series:
        +     //1024 724 512 362 256 181 128 91 64 45 32 23 16 11 8 6 4 3 2 1
        + 
        +
        +
        Parameters:
        +
        ppo - Points-Per-Octave, or the number of points per integer powers of 2 in the series.
        +
        curPoint - the current point of the series. Must be ≥ 1.
        +
        Returns:
        +
        the previous, smaller point in the power series. + A returned value of zero terminates the series.
        +
        +
      • +
      + + + +
        +
      • +

        powerSeriesNextDouble

        +
        public static double powerSeriesNextDouble​(int ppb,
        +                                           double curPoint,
        +                                           boolean roundToLong,
        +                                           double logBase)
        +
        Computes the next larger double in the power series + point = logBase( i / ppb ) given the current point in the series. + For illustration, this can be used in a loop as follows: + +
        
        +     double maxP = 1024.0;
        +     double minP = 1.0;
        +     int ppb = 2;
        +     double logBase = 2.0;
        +
        +     for (double p = minP; p <= maxP; p = powerSeriesNextDouble(ppb, p, true, logBase)) {
        +       System.out.print(p + " ");
        +     }
        +     //generates the following series:
        +     //1 2 3 4 6 8 11 16 23 32 45 64 91 128 181 256 362 512 724 1024
        + 
        +
        +
        Parameters:
        +
        ppb - Points-Per-Base, or the number of points per integer powers of base in the series.
        +
        curPoint - the current point of the series. Must be ≥ 1.0.
        +
        roundToLong - if true the output will be rounded to the nearest long.
        +
        logBase - the desired base of the logarithms
        +
        Returns:
        +
        the next point in the power series.
        +
        +
      • +
      + + + +
        +
      • +

        ceilingPowerBaseOfDouble

        +
        public static double ceilingPowerBaseOfDouble​(double base,
        +                                              double n)
        +
        Returns the ceiling of a given n given a base, where the ceiling is an integral power of the base. + This is the smallest positive power of base that is equal to or greater than the given n + and equal to a mathematical integer. + The result of this function is consistent with ceilingIntPowerOf2(int) for values + less than one. I.e., if n < 1, the result is 1. + +

        The formula is: baseceiling(logbase(x))

        +
        +
        Parameters:
        +
        base - The number in the expression ⌈basen⌉.
        +
        n - The input argument.
        +
        Returns:
        +
        the ceiling power of base as a double and equal to a mathematical integer.
        +
        +
      • +
      + + + +
        +
      • +

        floorPowerBaseOfDouble

        +
        public static double floorPowerBaseOfDouble​(double base,
        +                                            double n)
        +
        Computes the floor of a given n given base, where the floor is an integral power of the base. + This is the largest positive power of base that is equal to or less than the given n + and equal to a mathematical integer. + The result of this function is consistent with floorPowerOf2(int) for values + less than one. I.e., if n < 1, the result is 1. + +

        The formula is: basefloor(logbase(x))

        +
        +
        Parameters:
        +
        base - The number in the expression ⌊basen⌋.
        +
        n - The input argument.
        +
        Returns:
        +
        the floor power of 2 and equal to a mathematical integer.
        +
        +
      • +
      + + + +
        +
      • +

        log2

        +
        public static double log2​(double value)
        +
        The log2(value)
        +
        +
        Parameters:
        +
        value - the given value
        +
        Returns:
        +
        log2(value)
        +
        +
      • +
      + + + +
        +
      • +

        logBaseOfX

        +
        public static double logBaseOfX​(double base,
        +                                double x)
        +
        Returns the logbase(x). Example, if base = 2.0: logB(2.0, x) = log(x) / log(2.0).
        +
        +
        Parameters:
        +
        base - The number in the expression log(x) / log(base).
        +
        x - the given value
        +
        Returns:
        +
        the logbase(x)
        +
        +
      • +
      + + + +
        +
      • +

        numberOfTrailingOnes

        +
        public static int numberOfTrailingOnes​(long v)
        +
        Returns the number of one bits following the lowest-order ("rightmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
        +
        +
        Parameters:
        +
        v - the value whose number of trailing ones is to be computed.
        +
        Returns:
        +
        the number of one bits following the lowest-order ("rightmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
        +
        +
      • +
      + + + +
        +
      • +

        numberOfLeadingOnes

        +
        public static int numberOfLeadingOnes​(long v)
        +
        Returns the number of one bits preceding the highest-order ("leftmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
        +
        +
        Parameters:
        +
        v - the value whose number of leading ones is to be computed.
        +
        Returns:
        +
        the number of one bits preceding the lowest-order ("rightmost") zero-bit in the + two's complement binary representation of the specified long value, or 64 if the value is equal + to minus one.
        +
        +
      • +
      + + + +
        +
      • +

        exactLog2OfInt

        +
        public static int exactLog2OfInt​(int powerOf2,
        +                                 String argName)
        +
        Returns the log2 of the given int value if it is an exact power of 2 and greater than zero. + If not, it throws an exception with the user supplied local argument name.
        +
        +
        Parameters:
        +
        powerOf2 - must be a power of 2 and greater than zero.
        +
        argName - the argument name used in the exception if thrown.
        +
        Returns:
        +
        the log2 of the given value if it is an exact power of 2 and greater than zero.
        +
        Throws:
        +
        SketchesArgumentException - if not a power of 2 nor greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        exactLog2OfLong

        +
        public static int exactLog2OfLong​(long powerOf2,
        +                                  String argName)
        +
        Returns the log2 of the given long value if it is an exact power of 2 and greater than zero. + If not, it throws an exception with the user supplied local argument name.
        +
        +
        Parameters:
        +
        powerOf2 - must be a power of 2 and greater than zero.
        +
        argName - the argument name used in the exception if thrown.
        +
        Returns:
        +
        the log2 of the given value if it is an exact power of 2 and greater than zero.
        +
        Throws:
        +
        SketchesArgumentException - if not a power of 2 nor greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        exactLog2OfInt

        +
        public static int exactLog2OfInt​(int powerOf2)
        +
        Returns the log2 of the given int value if it is an exact power of 2 and greater than zero. + If not, it throws an exception.
        +
        +
        Parameters:
        +
        powerOf2 - must be a power of 2 and greater than zero.
        +
        Returns:
        +
        the log2 of the given int value if it is an exact power of 2 and greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        exactLog2OfLong

        +
        public static int exactLog2OfLong​(long powerOf2)
        +
        Returns the log2 of the given long value if it is an exact power of 2 and greater than zero. + If not, it throws an exception.
        +
        +
        Parameters:
        +
        powerOf2 - must be a power of 2 and greater than zero.
        +
        Returns:
        +
        the log2 of the given long value if it is an exact power of 2 and greater than zero.
        +
        +
      • +
      + + + +
        +
      • +

        checkBounds

        +
        public static void checkBounds​(long reqOff,
        +                               long reqLen,
        +                               long allocSize)
        +
        Check the requested offset and length against the allocated size. + The invariants equation is: 0 <= reqOff <= reqLen <= reqOff + reqLen <= allocSize. + If this equation is violated an SketchesArgumentException will be thrown.
        +
        +
        Parameters:
        +
        reqOff - the requested offset
        +
        reqLen - the requested length
        +
        allocSize - the allocated size.
        +
        +
      • +
      + + + +
        +
      • +

        checkProbability

        +
        public static void checkProbability​(double p,
        +                                    String argName)
        +
        Checks the given parameter to make sure it is positive and between 0.0 inclusive and 1.0 + inclusive.
        +
        +
        Parameters:
        +
        p - See Sampling Probability, p
        +
        argName - Used in the thrown exception.
        +
        +
      • +
      + + + +
        +
      • +

        isLessThanUnsigned

        +
        public static boolean isLessThanUnsigned​(long n1,
        +                                         long n2)
        +
        Unsigned compare with longs.
        +
        +
        Parameters:
        +
        n1 - A long to be treated as if unsigned.
        +
        n2 - A long to be treated as if unsigned.
        +
        Returns:
        +
        true if n1 > n2.
        +
        +
      • +
      + + + +
        +
      • +

        isEven

        +
        public static boolean isEven​(long n)
        +
        Returns true if given n is even.
        +
        +
        Parameters:
        +
        n - the given n
        +
        Returns:
        +
        true if given n is even.
        +
        +
      • +
      + + + +
        +
      • +

        isOdd

        +
        public static boolean isOdd​(long n)
        +
        Returns true if given n is odd.
        +
        +
        Parameters:
        +
        n - the given n
        +
        Returns:
        +
        true if given n is odd.
        +
        +
      • +
      + + + +
        +
      • +

        numDigits

        +
        public static int numDigits​(int n)
        +
        Computes the number of decimal digits of the number n
        +
        +
        Parameters:
        +
        n - the given number
        +
        Returns:
        +
        the number of decimal digits of the number n
        +
        +
      • +
      + + + +
        +
      • +

        intToFixedLengthString

        +
        public static String intToFixedLengthString​(int number,
        +                                            int length)
        +
        Converts the given number to a string prepended with spaces, if necessary, to + match the given length. + +

        For example, assume a sequence of integers from 1 to 1000. The largest value has + four decimal digits. Convert the entire sequence of strings to the form " 1" to "1000". + When these strings are sorted they will be in numerical sequence: " 1", " 2", ... "1000".

        +
        +
        Parameters:
        +
        number - the given number
        +
        length - the desired string length.
        +
        Returns:
        +
        the given number to a string prepended with spaces
        +
        +
      • +
      + + + +
        +
      • +

        minT

        +
        public static <T> Object minT​(Object item1,
        +                              Object item2,
        +                              Comparator<? super T> c)
        +
        Finds the minimum of two generic items
        +
        +
        Type Parameters:
        +
        T - the type
        +
        Parameters:
        +
        item1 - item one
        +
        item2 - item two
        +
        c - the given comparator
        +
        Returns:
        +
        the minimum value
        +
        +
      • +
      + + + +
        +
      • +

        maxT

        +
        public static <T> Object maxT​(Object item1,
        +                              Object item2,
        +                              Comparator<? super T> c)
        +
        Finds the maximum of two generic items
        +
        +
        Type Parameters:
        +
        T - the type
        +
        Parameters:
        +
        item1 - item one
        +
        item2 - item two
        +
        c - the given comparator
        +
        Returns:
        +
        the maximum value
        +
        +
      • +
      + + + +
        +
      • +

        lt

        +
        public static <T> boolean lt​(Object item1,
        +                             Object item2,
        +                             Comparator<? super T> c)
        +
        Is item1 Less-Than item2
        +
        +
        Type Parameters:
        +
        T - the type
        +
        Parameters:
        +
        item1 - item one
        +
        item2 - item two
        +
        c - the given comparator
        +
        Returns:
        +
        true if item1 Less-Than item2
        +
        +
      • +
      + + + +
        +
      • +

        le

        +
        public static <T> boolean le​(Object item1,
        +                             Object item2,
        +                             Comparator<? super T> c)
        +
        Is item1 Less-Than-Or-Equal-To item2
        +
        +
        Type Parameters:
        +
        T - the type
        +
        Parameters:
        +
        item1 - item one
        +
        item2 - item two
        +
        c - the given comparator
        +
        Returns:
        +
        true if item1 Less-Than-Or-Equal-To item2
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfBooleansSerDe.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfBooleansSerDe.html new file mode 100644 index 000000000..e2cb84789 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfBooleansSerDe.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.ArrayOfBooleansSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ArrayOfBooleansSerDe

+
+
No usage of org.apache.datasketches.common.ArrayOfBooleansSerDe
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfDoublesSerDe.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfDoublesSerDe.html new file mode 100644 index 000000000..953c95d37 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfDoublesSerDe.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.ArrayOfDoublesSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ArrayOfDoublesSerDe

+
+
No usage of org.apache.datasketches.common.ArrayOfDoublesSerDe
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfItemsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfItemsSerDe.html new file mode 100644 index 000000000..680aa6cdd --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfItemsSerDe.html @@ -0,0 +1,549 @@ + + + + + +Uses of Class org.apache.datasketches.common.ArrayOfItemsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ArrayOfItemsSerDe

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfLongsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfLongsSerDe.html new file mode 100644 index 000000000..b9165acb0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfLongsSerDe.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.ArrayOfLongsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ArrayOfLongsSerDe

+
+
No usage of org.apache.datasketches.common.ArrayOfLongsSerDe
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfNumbersSerDe.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfNumbersSerDe.html new file mode 100644 index 000000000..bf4dcc195 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfNumbersSerDe.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.ArrayOfNumbersSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ArrayOfNumbersSerDe

+
+
No usage of org.apache.datasketches.common.ArrayOfNumbersSerDe
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfStringsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfStringsSerDe.html new file mode 100644 index 000000000..d86508906 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfStringsSerDe.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.ArrayOfStringsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ArrayOfStringsSerDe

+
+
No usage of org.apache.datasketches.common.ArrayOfStringsSerDe
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfUtf16StringsSerDe.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfUtf16StringsSerDe.html new file mode 100644 index 000000000..b6fc82d10 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ArrayOfUtf16StringsSerDe.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.ArrayOfUtf16StringsSerDe (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ArrayOfUtf16StringsSerDe

+
+
No usage of org.apache.datasketches.common.ArrayOfUtf16StringsSerDe
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnBinomialProportions.html b/docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnBinomialProportions.html new file mode 100644 index 000000000..86c358399 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnBinomialProportions.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.BoundsOnBinomialProportions (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.BoundsOnBinomialProportions

+
+
No usage of org.apache.datasketches.common.BoundsOnBinomialProportions
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnRatiosInSampledSets.html b/docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnRatiosInSampledSets.html new file mode 100644 index 000000000..502663cc1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/BoundsOnRatiosInSampledSets.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.BoundsOnRatiosInSampledSets (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.BoundsOnRatiosInSampledSets

+
+
No usage of org.apache.datasketches.common.BoundsOnRatiosInSampledSets
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ByteArrayUtil.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ByteArrayUtil.html new file mode 100644 index 000000000..205d0d8d5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ByteArrayUtil.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.ByteArrayUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ByteArrayUtil

+
+
No usage of org.apache.datasketches.common.ByteArrayUtil
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/Family.html b/docs/5.0.X/org/apache/datasketches/common/class-use/Family.html new file mode 100644 index 000000000..b95625406 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/Family.html @@ -0,0 +1,361 @@ + + + + + +Uses of Class org.apache.datasketches.common.Family (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.Family

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/ResizeFactor.html b/docs/5.0.X/org/apache/datasketches/common/class-use/ResizeFactor.html new file mode 100644 index 000000000..7eb83be22 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/ResizeFactor.html @@ -0,0 +1,439 @@ + + + + + +Uses of Class org.apache.datasketches.common.ResizeFactor (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.ResizeFactor

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesArgumentException.html b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesArgumentException.html new file mode 100644 index 000000000..6061aae31 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesArgumentException.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.SketchesArgumentException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.SketchesArgumentException

+
+
No usage of org.apache.datasketches.common.SketchesArgumentException
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesException.html b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesException.html new file mode 100644 index 000000000..8159d3033 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesException.html @@ -0,0 +1,211 @@ + + + + + +Uses of Class org.apache.datasketches.common.SketchesException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.SketchesException

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesReadOnlyException.html b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesReadOnlyException.html new file mode 100644 index 000000000..f8b86eab5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesReadOnlyException.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.SketchesReadOnlyException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.SketchesReadOnlyException

+
+
No usage of org.apache.datasketches.common.SketchesReadOnlyException
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesStateException.html b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesStateException.html new file mode 100644 index 000000000..683750453 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/SketchesStateException.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.SketchesStateException (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.SketchesStateException

+
+
No usage of org.apache.datasketches.common.SketchesStateException
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/SuppressFBWarnings.html b/docs/5.0.X/org/apache/datasketches/common/class-use/SuppressFBWarnings.html new file mode 100644 index 000000000..e63a7812e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/SuppressFBWarnings.html @@ -0,0 +1,460 @@ + + + + + +Uses of Class org.apache.datasketches.common.SuppressFBWarnings (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.SuppressFBWarnings

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/class-use/Util.html b/docs/5.0.X/org/apache/datasketches/common/class-use/Util.html new file mode 100644 index 000000000..3452c801a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/class-use/Util.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.common.Util (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.common.Util

+
+
No usage of org.apache.datasketches.common.Util
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/package-summary.html b/docs/5.0.X/org/apache/datasketches/common/package-summary.html new file mode 100644 index 000000000..1ff674f4b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/package-summary.html @@ -0,0 +1,319 @@ + + + + + +org.apache.datasketches.common (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.common

+
+
+
+ + +
This package is for common classes that may be used across all the sketch families.
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ArrayOfBooleansSerDe +
    Methods of serializing and deserializing arrays of Boolean as a bit array.
    +
    ArrayOfDoublesSerDe +
    Methods of serializing and deserializing arrays of Double.
    +
    ArrayOfItemsSerDe<T> +
    Base class for serializing and deserializing custom types.
    +
    ArrayOfLongsSerDe +
    Methods of serializing and deserializing arrays of Long.
    +
    ArrayOfNumbersSerDe +
    Methods of serializing and deserializing arrays of the object version of primitive types of + Number.
    +
    ArrayOfStringsSerDe +
    Methods of serializing and deserializing arrays of String.
    +
    ArrayOfUtf16StringsSerDe +
    Methods of serializing and deserializing arrays of String.
    +
    BoundsOnBinomialProportions +
    Confidence intervals for binomial proportions.
    +
    BoundsOnRatiosInSampledSets +
    This class is used to compute the bounds on the estimate of the ratio |B| / |A|, where: + + |A| is the unknown size of a set A of unique identifiers. + |B| is the unknown size of a subset B of A. + a = |SA| is the observed size of a sample of A + that was obtained by Bernoulli sampling with a known inclusion probability f. + b = |SA ∩ B| is the observed size of a subset + of SA. +
    +
    ByteArrayUtil +
    Useful methods for byte arrays.
    +
    Util +
    Common utility functions.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    Family +
    Defines the various families of sketch and set operation classes.
    +
    ResizeFactor +
    For the Families that accept this configuration parameter, it controls the size multiple that + affects how fast the internal cache grows, when more space is required.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    SketchesArgumentException +
    Illegal Arguments Exception class for the library
    +
    SketchesException +
    Exception class for the library
    +
    SketchesReadOnlyException +
    Write operation attempted on a read-only class.
    +
    SketchesStateException +
    Illegal State Exception class for the library
    +
    +
  • +
  • + + + + + + + + + + + + +
    Annotation Types Summary 
    Annotation TypeDescription
    SuppressFBWarnings +
    Used to suppress SpotBug warnings.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/package-tree.html b/docs/5.0.X/org/apache/datasketches/common/package-tree.html new file mode 100644 index 000000000..42a5d3bfe --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/package-tree.html @@ -0,0 +1,217 @@ + + + + + +org.apache.datasketches.common Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.common

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Annotation Type Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/common/package-use.html b/docs/5.0.X/org/apache/datasketches/common/package-use.html new file mode 100644 index 000000000..3921e6db3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/common/package-use.html @@ -0,0 +1,498 @@ + + + + + +Uses of Package org.apache.datasketches.common (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.common

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/CompressionCharacterization.html b/docs/5.0.X/org/apache/datasketches/cpc/CompressionCharacterization.html new file mode 100644 index 000000000..43fb67e27 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/CompressionCharacterization.html @@ -0,0 +1,331 @@ + + + + + +CompressionCharacterization (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CompressionCharacterization

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.cpc.CompressionCharacterization
    • +
    +
  • +
+
+
    +
  • +
    +
    public class CompressionCharacterization
    +extends Object
    +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing. To be + accessible for both, this code is part of the main hierarchy. It is not used during normal + production runtime.
    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CompressionCharacterization

        +
        public CompressionCharacterization​(int lgMinK,
        +                                   int lgMaxK,
        +                                   int lgMinT,
        +                                   int lgMaxT,
        +                                   int lgMulK,
        +                                   int uPPO,
        +                                   int incLgK,
        +                                   PrintStream pS,
        +                                   PrintWriter pW)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        start

        +
        public void start()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/CpcSketch.html b/docs/5.0.X/org/apache/datasketches/cpc/CpcSketch.html new file mode 100644 index 000000000..c15fdb6ef --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/CpcSketch.html @@ -0,0 +1,1000 @@ + + + + + +CpcSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CpcSketch

+
+
+ +
+
    +
  • +
    +
    public final class CpcSketch
    +extends Object
    +
    This is a unique-counting sketch that implements the + Compressed Probabilistic Counting (CPC, a.k.a FM85) algorithms developed by Kevin Lang in + his paper + Back to the Future: an Even More Nearly + Optimal Cardinality Estimation Algorithm. + +

    This sketch is extremely space-efficient when serialized. In an apples-to-apples empirical + comparison against compressed HyperLogLog sketches, this new algorithm simultaneously wins on + the two dimensions of the space/accuracy tradeoff and produces sketches that are + smaller than the entropy of HLL, so no possible implementation of compressed HLL can match its + space efficiency for a given accuracy. As described in the paper this sketch implements a newly + developed ICON estimator algorithm that survives unioning operations, another + well-known estimator, the + Historical Inverse Probability (HIP) estimator + does not. + The update speed performance of this sketch is quite fast and is comparable to the speed of HLL. + The unioning (merging) capability of this sketch also allows for merging of sketches with + different configurations of K. + +

    For additional security this sketch can be configured with a user-specified hash seed.

    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static intDEFAULT_LG_K +
      The default Log_base2 of K
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      CpcSketch() +
      Constructor with default log_base2 of k
      +
      CpcSketch​(int lgK) +
      Constructor with log_base2 of k.
      +
      CpcSketch​(int lgK, + long seed) +
      Constructor with log_base2 of k and seed.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      doublegetEstimate() +
      Returns the best estimate of the cardinality of the sketch.
      +
      static FamilygetFamily() +
      Return the DataSketches identifier for this CPC family of sketches.
      +
      intgetLgK() +
      Return the parameter LgK.
      +
      doublegetLowerBound​(int kappa) +
      Returns the best estimate of the lower bound of the confidence interval given kappa, + the number of standard deviations from the mean.
      +
      static intgetMaxSerializedBytes​(int lgK) +
      The actual size of a compressed CPC sketch has a small random variance, but the following + empirically measured size should be large enough for at least 99.9 percent of sketches.
      +
      doublegetUpperBound​(int kappa) +
      Returns the best estimate of the upper bound of the confidence interval given kappa, + the number of standard deviations from the mean.
      +
      static CpcSketchheapify​(byte[] byteArray) +
      Return the given byte array as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
      +
      static CpcSketchheapify​(byte[] byteArray, + long seed) +
      Return the given byte array as a CpcSketch on the Java heap.
      +
      static CpcSketchheapify​(org.apache.datasketches.memory.Memory mem) +
      Return the given Memory as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
      +
      static CpcSketchheapify​(org.apache.datasketches.memory.Memory mem, + long seed) +
      Return the given Memory as a CpcSketch on the Java heap.
      +
      booleanisEmpty() +
      Return true if this sketch is empty
      +
      voidreset() +
      Resets this sketch to empty but retains the original LgK and Seed.
      +
      byte[]toByteArray() +
      Return this sketch as a compressed byte array.
      +
      StringtoString() +
      Return a human-readable string summary of this sketch
      +
      StringtoString​(boolean detail) +
      Return a human-readable string summary of this sketch
      +
      static StringtoString​(byte[] byteArr, + boolean detail) +
      Returns a human readable string of the preamble of a byte array image of a CpcSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem, + boolean detail) +
      Returns a human readable string of the preamble of a Memory image of a CpcSketch.
      +
      voidupdate​(byte[] data) +
      Present the given byte array as a potential unique item.
      +
      voidupdate​(char[] data) +
      Present the given char array as a potential unique item.
      +
      voidupdate​(double datum) +
      Present the given double (or float) datum as a potential unique item.
      +
      voidupdate​(int[] data) +
      Present the given integer array as a potential unique item.
      +
      voidupdate​(long datum) +
      Present the given long as a potential unique item.
      +
      voidupdate​(long[] data) +
      Present the given long array as a potential unique item.
      +
      voidupdate​(String datum) +
      Present the given String as a potential unique item.
      +
      booleanvalidate() +
      Convience function that this Sketch is valid.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_LG_K

        +
        public static final int DEFAULT_LG_K
        +
        The default Log_base2 of K
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CpcSketch

        +
        public CpcSketch()
        +
        Constructor with default log_base2 of k
        +
      • +
      + + + +
        +
      • +

        CpcSketch

        +
        public CpcSketch​(int lgK)
        +
        Constructor with log_base2 of k.
        +
        +
        Parameters:
        +
        lgK - the given log_base2 of k
        +
        +
      • +
      + + + +
        +
      • +

        CpcSketch

        +
        public CpcSketch​(int lgK,
        +                 long seed)
        +
        Constructor with log_base2 of k and seed.
        +
        +
        Parameters:
        +
        lgK - the given log_base2 of k
        +
        seed - the given seed
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        Returns the best estimate of the cardinality of the sketch.
        +
        +
        Returns:
        +
        the best estimate of the cardinality of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public static Family getFamily()
        +
        Return the DataSketches identifier for this CPC family of sketches.
        +
        +
        Returns:
        +
        the DataSketches identifier for this CPC family of sketches.
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Return the parameter LgK.
        +
        +
        Returns:
        +
        the parameter LgK.
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int kappa)
        +
        Returns the best estimate of the lower bound of the confidence interval given kappa, + the number of standard deviations from the mean.
        +
        +
        Parameters:
        +
        kappa - the given number of standard deviations from the mean: 1, 2 or 3.
        +
        Returns:
        +
        the best estimate of the lower bound of the confidence interval given kappa.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxSerializedBytes

        +
        public static int getMaxSerializedBytes​(int lgK)
        +
        The actual size of a compressed CPC sketch has a small random variance, but the following + empirically measured size should be large enough for at least 99.9 percent of sketches. + +

        For small values of n the size can be much smaller.

        +
        +
        Parameters:
        +
        lgK - the given value of lgK.
        +
        Returns:
        +
        the estimated maximum compressed serialized size of a sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int kappa)
        +
        Returns the best estimate of the upper bound of the confidence interval given kappa, + the number of standard deviations from the mean.
        +
        +
        Parameters:
        +
        kappa - the given number of standard deviations from the mean: 1, 2 or 3.
        +
        Returns:
        +
        the best estimate of the upper bound of the confidence interval given kappa.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static CpcSketch heapify​(org.apache.datasketches.memory.Memory mem)
        +
        Return the given Memory as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        the given Memory as a CpcSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static CpcSketch heapify​(byte[] byteArray)
        +
        Return the given byte array as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
        +
        +
        Parameters:
        +
        byteArray - the given byte array
        +
        Returns:
        +
        the given byte array as a CpcSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static CpcSketch heapify​(org.apache.datasketches.memory.Memory mem,
        +                                long seed)
        +
        Return the given Memory as a CpcSketch on the Java heap.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        seed - the seed used to create the original sketch from which the Memory was derived.
        +
        Returns:
        +
        the given Memory as a CpcSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static CpcSketch heapify​(byte[] byteArray,
        +                                long seed)
        +
        Return the given byte array as a CpcSketch on the Java heap.
        +
        +
        Parameters:
        +
        byteArray - the given byte array
        +
        seed - the seed used to create the original sketch from which the byte array was derived.
        +
        Returns:
        +
        the given byte array as a CpcSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Return true if this sketch is empty
        +
        +
        Returns:
        +
        true if this sketch is empty
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public final void reset()
        +
        Resets this sketch to empty but retains the original LgK and Seed.
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Return this sketch as a compressed byte array.
        +
        +
        Returns:
        +
        this sketch as a compressed byte array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long datum)
        +
        Present the given long as a potential unique item.
        +
        +
        Parameters:
        +
        datum - The given long datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(double datum)
        +
        Present the given double (or float) datum as a potential unique item. + The double will be converted to a long using Double.doubleToLongBits(datum), + which normalizes all NaN values to a single NaN representation. + Plus and minus zero will be normalized to plus zero. + The special floating-point values NaN and +/- Infinity are treated as distinct.
        +
        +
        Parameters:
        +
        datum - The given double datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(String datum)
        +
        Present the given String as a potential unique item. + The string is converted to a byte array using UTF8 encoding. + If the string is null or empty no update attempt is made and the method returns. + +

        Note: About 2X faster performance can be obtained by first converting the String to a + char[] and updating the sketch with that. This bypasses the complexity of the Java UTF_8 + encoding. This, of course, will not produce the same internal hash values as updating directly + with a String. So be consistent! Unioning two sketches, one fed with strings and the other + fed with char[] will be meaningless. +

        +
        +
        Parameters:
        +
        datum - The given String.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(byte[] data)
        +
        Present the given byte array as a potential unique item. + If the byte array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given byte array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(char[] data)
        +
        Present the given char array as a potential unique item. + If the char array is null or empty no update attempt is made and the method returns. + +

        Note: this will not produce the same output hash values as the update(String) + method but will be a little faster as it avoids the complexity of the UTF8 encoding.

        +
        +
        Parameters:
        +
        data - The given char array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(int[] data)
        +
        Present the given integer array as a potential unique item. + If the integer array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given int array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long[] data)
        +
        Present the given long array as a potential unique item. + If the long array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given long array.
        +
        +
      • +
      + + + +
        +
      • +

        validate

        +
        public boolean validate()
        +
        Convience function that this Sketch is valid. This is a troubleshooting tool + for sketches that have been heapified from serialized images. + +

        If you are starting with a serialized image as a byte array, first heapify + the byte array to a sketch, which performs a number of checks. Then use this + function as one additional check on the sketch.

        +
        +
        Returns:
        +
        true if this sketch is validated.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Return a human-readable string summary of this sketch
        +
        +
        Overrides:
        +
        toString in class Object
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean detail)
        +
        Return a human-readable string summary of this sketch
        +
        +
        Parameters:
        +
        detail - include data detail
        +
        Returns:
        +
        a human-readable string summary of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr,
        +                              boolean detail)
        +
        Returns a human readable string of the preamble of a byte array image of a CpcSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        detail - if true, a dump of the compressed window and surprising value streams will be + included.
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a CpcSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem,
        +                              boolean detail)
        +
        Returns a human readable string of the preamble of a Memory image of a CpcSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        detail - if true, a dump of the compressed window and surprising value streams will be + included.
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a CpcSketch.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/CpcUnion.html b/docs/5.0.X/org/apache/datasketches/cpc/CpcUnion.html new file mode 100644 index 000000000..b80fd72b2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/CpcUnion.html @@ -0,0 +1,430 @@ + + + + + +CpcUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CpcUnion

+
+
+ +
+
    +
  • +
    +
    public class CpcUnion
    +extends Object
    +
    The union (merge) operation for the CPC sketches.
    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CpcUnion

        +
        public CpcUnion()
        +
        Construct this unioning object with the default LgK and the default update seed.
        +
      • +
      + + + +
        +
      • +

        CpcUnion

        +
        public CpcUnion​(int lgK)
        +
        Construct this unioning object with LgK and the default update seed.
        +
        +
        Parameters:
        +
        lgK - The given log2 of K.
        +
        +
      • +
      + + + +
        +
      • +

        CpcUnion

        +
        public CpcUnion​(int lgK,
        +                long seed)
        +
        Construct this unioning object with LgK and a given seed.
        +
        +
        Parameters:
        +
        lgK - The given log2 of K.
        +
        seed - The given seed.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public void update​(CpcSketch sketch)
        +
        Update this union with a CpcSketch.
        +
        +
        Parameters:
        +
        sketch - the given CpcSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public CpcSketch getResult()
        +
        Returns the result of union operations as a CPC sketch.
        +
        +
        Returns:
        +
        the result of union operations as a CPC sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Returns the current value of Log_base2 of K. Note that due to merging with source sketches that + may have a lower value of LgK, this value can be less than what the union object was configured + with.
        +
        +
        Returns:
        +
        the current value of Log_base2 of K.
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public static Family getFamily()
        +
        Return the DataSketches identifier for this CPC family of sketches.
        +
        +
        Returns:
        +
        the DataSketches identifier for this CPC family of sketches.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/CpcWrapper.html b/docs/5.0.X/org/apache/datasketches/cpc/CpcWrapper.html new file mode 100644 index 000000000..ca7431827 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/CpcWrapper.html @@ -0,0 +1,439 @@ + + + + + +CpcWrapper (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CpcWrapper

+
+
+ +
+
    +
  • +
    +
    public final class CpcWrapper
    +extends Object
    +
    This provides a read-only view of a serialized image of a CpcSketch, which can be + on-heap or off-heap represented as a Memory object, or on-heap represented as a byte array.
    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      CpcWrapper​(byte[] byteArray) +
      Construct a read-only view of the given byte array that contains a CpcSketch.
      +
      CpcWrapper​(org.apache.datasketches.memory.Memory mem) +
      Construct a read-only view of the given Memory that contains a CpcSketch
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CpcWrapper

        +
        public CpcWrapper​(org.apache.datasketches.memory.Memory mem)
        +
        Construct a read-only view of the given Memory that contains a CpcSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        CpcWrapper

        +
        public CpcWrapper​(byte[] byteArray)
        +
        Construct a read-only view of the given byte array that contains a CpcSketch.
        +
        +
        Parameters:
        +
        byteArray - the given byte array
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        Returns the best estimate of the cardinality of the sketch.
        +
        +
        Returns:
        +
        the best estimate of the cardinality of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public static Family getFamily()
        +
        Return the DataSketches identifier for this CPC family of sketches.
        +
        +
        Returns:
        +
        the DataSketches identifier for this CPC family of sketches.
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Returns the configured Log_base2 of K of this sketch.
        +
        +
        Returns:
        +
        the configured Log_base2 of K of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int kappa)
        +
        Returns the best estimate of the lower bound of the confidence interval given kappa, + the number of standard deviations from the mean.
        +
        +
        Parameters:
        +
        kappa - the given number of standard deviations from the mean: 1, 2 or 3.
        +
        Returns:
        +
        the best estimate of the lower bound of the confidence interval given kappa.
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int kappa)
        +
        Returns the best estimate of the upper bound of the confidence interval given kappa, + the number of standard deviations from the mean.
        +
        +
        Parameters:
        +
        kappa - the given number of standard deviations from the mean: 1, 2 or 3.
        +
        Returns:
        +
        the best estimate of the upper bound of the confidence interval given kappa.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/MergingValidation.html b/docs/5.0.X/org/apache/datasketches/cpc/MergingValidation.html new file mode 100644 index 000000000..7764fab5f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/MergingValidation.html @@ -0,0 +1,337 @@ + + + + + +MergingValidation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class MergingValidation

+
+
+ +
+
    +
  • +
    +
    public class MergingValidation
    +extends Object
    +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing. To be + accessible for both, this code is part of the main hierarchy. It is not used during normal + production runtime.
    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MergingValidation

        +
        public MergingValidation​(int lgMinK,
        +                         int lgMaxK,
        +                         int lgMulK,
        +                         int uPPO,
        +                         int incLgK,
        +                         PrintStream pS,
        +                         PrintWriter pW)
        +
        +
        Parameters:
        +
        lgMinK - lgMinK
        +
        lgMaxK - lgMaxK
        +
        lgMulK - lgMulK
        +
        uPPO - uPPO
        +
        incLgK - incLgK
        +
        pS - pS
        +
        pW - pW
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        start

        +
        public void start()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/QuickMergingValidation.html b/docs/5.0.X/org/apache/datasketches/cpc/QuickMergingValidation.html new file mode 100644 index 000000000..2b8b249d8 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/QuickMergingValidation.html @@ -0,0 +1,334 @@ + + + + + +QuickMergingValidation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class QuickMergingValidation

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.cpc.QuickMergingValidation
    • +
    +
  • +
+
+
    +
  • +
    +
    public class QuickMergingValidation
    +extends Object
    +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing. To be + accessible for both, this code is part of the main hierarchy. It is not used during normal + production runtime. + +

    This test of merging is the equal K case and is less exhaustive than TestAlltest + but is more practical for large values of K.

    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        QuickMergingValidation

        +
        public QuickMergingValidation​(int lgMinK,
        +                              int lgMaxK,
        +                              int incLgK,
        +                              PrintStream ps,
        +                              PrintWriter pw)
        +
        +
        Parameters:
        +
        lgMinK - lgMinK
        +
        lgMaxK - lgMaxK
        +
        incLgK - incLgK
        +
        ps - ps
        +
        pw - pw
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        start

        +
        public void start()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/StreamingValidation.html b/docs/5.0.X/org/apache/datasketches/cpc/StreamingValidation.html new file mode 100644 index 000000000..4fd6b5230 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/StreamingValidation.html @@ -0,0 +1,334 @@ + + + + + +StreamingValidation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class StreamingValidation

+
+
+ +
+
    +
  • +
    +
    public class StreamingValidation
    +extends Object
    +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing. To be + accessible for both, this code is part of the main hierarchy. It is not used during normal + production runtime.
    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        StreamingValidation

        +
        public StreamingValidation​(int lgMinK,
        +                           int lgMaxK,
        +                           int trials,
        +                           int ppoN,
        +                           PrintStream pS,
        +                           PrintWriter pW)
        +
        +
        Parameters:
        +
        lgMinK - lgMinK
        +
        lgMaxK - lgMaxK
        +
        trials - trials
        +
        ppoN - ppoN
        +
        pS - pS
        +
        pW - pW
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        start

        +
        public void start()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/TestUtil.html b/docs/5.0.X/org/apache/datasketches/cpc/TestUtil.html new file mode 100644 index 000000000..2c44cdebb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/TestUtil.html @@ -0,0 +1,273 @@ + + + + + +TestUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TestUtil

+
+
+ +
+
    +
  • +
    +
    public class TestUtil
    +extends Object
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TestUtil

        +
        public TestUtil()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/CompressionCharacterization.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CompressionCharacterization.html new file mode 100644 index 000000000..974159df6 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CompressionCharacterization.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.CompressionCharacterization (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.CompressionCharacterization

+
+
No usage of org.apache.datasketches.cpc.CompressionCharacterization
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcSketch.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcSketch.html new file mode 100644 index 000000000..f9ba8ef11 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcSketch.html @@ -0,0 +1,244 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.CpcSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.CpcSketch

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use CpcSketch 
    PackageDescription
    org.apache.datasketches.cpc +
    Compressed Probabilistic Counting sketch family
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of CpcSketch in org.apache.datasketches.cpc

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.cpc that return CpcSketch 
      Modifier and TypeMethodDescription
      CpcSketchCpcUnion.getResult() +
      Returns the result of union operations as a CPC sketch.
      +
      static CpcSketchCpcSketch.heapify​(byte[] byteArray) +
      Return the given byte array as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
      +
      static CpcSketchCpcSketch.heapify​(byte[] byteArray, + long seed) +
      Return the given byte array as a CpcSketch on the Java heap.
      +
      static CpcSketchCpcSketch.heapify​(org.apache.datasketches.memory.Memory mem) +
      Return the given Memory as a CpcSketch on the Java heap using the DEFAULT_UPDATE_SEED.
      +
      static CpcSketchCpcSketch.heapify​(org.apache.datasketches.memory.Memory mem, + long seed) +
      Return the given Memory as a CpcSketch on the Java heap.
      +
      + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.cpc with parameters of type CpcSketch 
      Modifier and TypeMethodDescription
      voidCpcUnion.update​(CpcSketch sketch) +
      Update this union with a CpcSketch.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcUnion.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcUnion.html new file mode 100644 index 000000000..bb087f245 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcUnion.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.CpcUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.CpcUnion

+
+
No usage of org.apache.datasketches.cpc.CpcUnion
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcWrapper.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcWrapper.html new file mode 100644 index 000000000..e0e28885b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/CpcWrapper.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.CpcWrapper (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.CpcWrapper

+
+
No usage of org.apache.datasketches.cpc.CpcWrapper
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/MergingValidation.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/MergingValidation.html new file mode 100644 index 000000000..24a775195 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/MergingValidation.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.MergingValidation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.MergingValidation

+
+
No usage of org.apache.datasketches.cpc.MergingValidation
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/QuickMergingValidation.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/QuickMergingValidation.html new file mode 100644 index 000000000..2941364af --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/QuickMergingValidation.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.QuickMergingValidation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.QuickMergingValidation

+
+
No usage of org.apache.datasketches.cpc.QuickMergingValidation
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/StreamingValidation.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/StreamingValidation.html new file mode 100644 index 000000000..f74507d47 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/StreamingValidation.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.StreamingValidation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.StreamingValidation

+
+
No usage of org.apache.datasketches.cpc.StreamingValidation
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/class-use/TestUtil.html b/docs/5.0.X/org/apache/datasketches/cpc/class-use/TestUtil.html new file mode 100644 index 000000000..b9b40292f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/class-use/TestUtil.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.cpc.TestUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.cpc.TestUtil

+
+
No usage of org.apache.datasketches.cpc.TestUtil
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/package-summary.html b/docs/5.0.X/org/apache/datasketches/cpc/package-summary.html new file mode 100644 index 000000000..b2e16c82a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/package-summary.html @@ -0,0 +1,223 @@ + + + + + +org.apache.datasketches.cpc (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.cpc

+
+
+
+ + +
Compressed Probabilistic Counting sketch family
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    CompressionCharacterization +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    CpcSketch +
    This is a unique-counting sketch that implements the + Compressed Probabilistic Counting (CPC, a.k.a FM85) algorithms developed by Kevin Lang in + his paper + Back to the Future: an Even More Nearly + Optimal Cardinality Estimation Algorithm.
    +
    CpcUnion +
    The union (merge) operation for the CPC sketches.
    +
    CpcWrapper +
    This provides a read-only view of a serialized image of a CpcSketch, which can be + on-heap or off-heap represented as a Memory object, or on-heap represented as a byte array.
    +
    MergingValidation +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    QuickMergingValidation +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    StreamingValidation +
    This code is used both by unit tests, for short running tests, + and by the characterization repository for longer running, more exhaustive testing.
    +
    TestUtil 
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/package-tree.html b/docs/5.0.X/org/apache/datasketches/cpc/package-tree.html new file mode 100644 index 000000000..0792a45a9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/package-tree.html @@ -0,0 +1,171 @@ + + + + + +org.apache.datasketches.cpc Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.cpc

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/cpc/package-use.html b/docs/5.0.X/org/apache/datasketches/cpc/package-use.html new file mode 100644 index 000000000..fe6b14430 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/cpc/package-use.html @@ -0,0 +1,192 @@ + + + + + +Uses of Package org.apache.datasketches.cpc (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.cpc

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/FdtSketch.html b/docs/5.0.X/org/apache/datasketches/fdt/FdtSketch.html new file mode 100644 index 000000000..ea2be4cfa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/FdtSketch.html @@ -0,0 +1,830 @@ + + + + + +FdtSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FdtSketch

+
+
+ +
+
    +
  • +
    +
    public final class FdtSketch
    +extends ArrayOfStringsSketch
    +
    A Frequent Distinct Tuples sketch. + +

    Suppose our data is a stream of pairs {IP address, User ID} and we want to identify the + IP addresses that have the most distinct User IDs. Or conversely, we would like to identify + the User IDs that have the most distinct IP addresses. This is a common challenge in the + analysis of big data and the FDT sketch helps solve this problem using probabilistic techniques. + +

    More generally, given a multiset of tuples with dimensions {d1,d2, d3, ..., dN}, + and a primary subset of dimensions M < N, our task is to identify the combinations of + M subset dimensions that have the most frequent number of distinct combinations of + the N-M non-primary dimensions. + +

    Please refer to the web page + + https://datasketches.apache.org/docs/Frequency/FrequentDistinctTuplesSketch.html for a more + complete discussion about this sketch.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FdtSketch

        +
        public FdtSketch​(int lgK)
        +
        Create new instance of Frequent Distinct Tuples sketch with the given + Log-base2 of required nominal entries.
        +
        +
        Parameters:
        +
        lgK - Log-base2 of required nominal entries.
        +
        +
      • +
      + + + +
        +
      • +

        FdtSketch

        +
        public FdtSketch​(double threshold,
        +                 double rse)
        +
        Create a new instance of Frequent Distinct Tuples sketch with a size determined by the given + threshold and rse.
        +
        +
        Parameters:
        +
        threshold - : the fraction, between zero and 1.0, of the total distinct stream length + that defines a "Frequent" (or heavy) item.
        +
        rse - the maximum Relative Standard Error for the estimate of the distinct population of a + reported tuple (selected with a primary key) at the threshold.
        +
        +
      • +
      + + + +
        +
      • +

        FdtSketch

        +
        public FdtSketch​(FdtSketch sketch)
        +
        Copy Constructor
        +
        +
        Parameters:
        +
        sketch - the sketch to copy
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        update

        +
        public void update​(String[] tuple)
        +
        Update the sketch with the given string array tuple.
        +
        +
        Parameters:
        +
        tuple - the given string array tuple.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public List<Group> getResult​(int[] priKeyIndices,
        +                             int limit,
        +                             int numStdDev,
        +                             char sep)
        +
        Returns an ordered List of Groups of the most frequent distinct population of subset tuples + represented by the count of entries of each group.
        +
        +
        Parameters:
        +
        priKeyIndices - these indices define the dimensions used for the Primary Keys.
        +
        limit - the maximum number of groups to return. If this value is ≤ 0, all + groups will be returned.
        +
        numStdDev - the number of standard deviations for the upper and lower error bounds, + this value is an integer and must be one of 1, 2, or 3. + See Number of Standard Deviations
        +
        sep - the separator character
        +
        Returns:
        +
        an ordered List of Groups of the most frequent distinct population of subset tuples + represented by the count of entries of each group.
        +
        +
      • +
      + + + +
        +
      • +

        getPostProcessor

        +
        public PostProcessor getPostProcessor()
        +
        Returns the PostProcessor that enables multiple queries against the sketch results. + This assumes the default Group and the default separator character '|'.
        +
        +
        Returns:
        +
        the PostProcessor
        +
        +
      • +
      + + + +
        +
      • +

        getPostProcessor

        +
        public PostProcessor getPostProcessor​(Group group,
        +                                      char sep)
        +
        Returns the PostProcessor that enables multiple queries against the sketch results.
        +
        +
        Parameters:
        +
        group - the Group class to use during post processing.
        +
        sep - the separator character.
        +
        Returns:
        +
        the PostProcessor
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public int getRetainedEntries()
        +
        +
        Specified by:
        +
        getRetainedEntries in class Sketch<S extends Summary>
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public int getCountLessThanThetaLong​(long thetaLong)
        +
        Description copied from class: Sketch
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Specified by:
        +
        getCountLessThanThetaLong in class Sketch<S extends Summary>
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        getNominalEntries

        +
        public int getNominalEntries()
        +
        Get configured nominal number of entries
        +
        +
        Returns:
        +
        nominal number of entries
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Get log_base2 of Nominal Entries
        +
        +
        Returns:
        +
        log_base2 of Nominal Entries
        +
        +
      • +
      + + + +
        +
      • +

        getSamplingProbability

        +
        public float getSamplingProbability()
        +
        Get configured sampling probability
        +
        +
        Returns:
        +
        sampling probability
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentCapacity

        +
        public int getCurrentCapacity()
        +
        Get current capacity
        +
        +
        Returns:
        +
        current capacity
        +
        +
      • +
      + + + +
        +
      • +

        getResizeFactor

        +
        public ResizeFactor getResizeFactor()
        +
        Get configured resize factor
        +
        +
        Returns:
        +
        resize factor
        +
        +
      • +
      + + + +
        +
      • +

        trim

        +
        public void trim()
        +
        Rebuilds reducing the actual number of entries to the nominal number of entries if needed
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch an empty state.
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactSketch<S> compact()
        +
        Converts the current state of the sketch into a compact sketch
        +
        +
        Specified by:
        +
        compact in class Sketch<S extends Summary>
        +
        Returns:
        +
        compact sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        @Deprecated
        +public byte[] toByteArray()
        +
        Deprecated. +
        As of 3.0.0, serializing an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Serializing a CompactSketch is not deprecated.
        +
        +
        This serializes an UpdatableSketch (QuickSelectSketch).
        +
        +
        Specified by:
        +
        toByteArray in class Sketch<S extends Summary>
        +
        Returns:
        +
        serialized representation of an UpdatableSketch (QuickSelectSketch).
        +
        +
      • +
      + + + + + +
        +
      • +

        insertSummary

        +
        protected void insertSummary​(int index,
        +                             S summary)
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/Group.html b/docs/5.0.X/org/apache/datasketches/fdt/Group.html new file mode 100644 index 000000000..a5afd88e3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/Group.html @@ -0,0 +1,566 @@ + + + + + +Group (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Group

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Comparable<Group>
    +
    +
    +
    public class Group
    +extends Object
    +implements Comparable<Group>
    +
    Defines a Group from a Frequent Distinct Tuple query. This class is called internally during + post processing and is not intended to be called by the user.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Group

        +
        public Group()
        +
        Construct an empty Group
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        init

        +
        public Group init​(String priKey,
        +                  int count,
        +                  double estimate,
        +                  double ub,
        +                  double lb,
        +                  double fraction,
        +                  double rse)
        +
        Specifies the parameters to be listed as columns
        +
        +
        Parameters:
        +
        priKey - the primary key of the FDT sketch
        +
        count - the number of retained rows associated with this group
        +
        estimate - the estimate of the original population associated with this group
        +
        ub - the upper bound of the estimate
        +
        lb - the lower bound of the estimate
        +
        fraction - the fraction of all retained rows of the sketch associated with this group
        +
        rse - the estimated Relative Standard Error for this group.
        +
        Returns:
        +
        return this
        +
        +
      • +
      + + + +
        +
      • +

        getPrimaryKey

        +
        public String getPrimaryKey()
        +
        +
        Returns:
        +
        priKey of type T
        +
        +
      • +
      + + + +
        +
      • +

        getCount

        +
        public int getCount()
        +
        +
        Returns:
        +
        the count
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        +
        Returns:
        +
        the estimate
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound()
        +
        +
        Returns:
        +
        the upper bound
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound()
        +
        +
        Returns:
        +
        the lower bound
        +
        +
      • +
      + + + +
        +
      • +

        getFraction

        +
        public double getFraction()
        +
        +
        Returns:
        +
        the fraction for this group
        +
        +
      • +
      + + + +
        +
      • +

        getRse

        +
        public double getRse()
        +
        +
        Returns:
        +
        the RSE
        +
        +
      • +
      + + + +
        +
      • +

        getHeader

        +
        public String getHeader()
        +
        +
        Returns:
        +
        the descriptive header
        +
        +
      • +
      + + + + + + + +
        +
      • +

        compareTo

        +
        public int compareTo​(Group that)
        +
        +
        Specified by:
        +
        compareTo in interface Comparable<Group>
        +
        Parameters:
        +
        that - The Group to compare to
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object that)
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/PostProcessor.html b/docs/5.0.X/org/apache/datasketches/fdt/PostProcessor.html new file mode 100644 index 000000000..604dcfbe0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/PostProcessor.html @@ -0,0 +1,365 @@ + + + + + +PostProcessor (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class PostProcessor

+
+
+ +
+
    +
  • +
    +
    public class PostProcessor
    +extends Object
    +
    This processes the contents of a FDT sketch to extract the + primary keys with the most frequent unique combinations of the non-primary dimensions. + The source sketch is not modified.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        PostProcessor

        +
        public PostProcessor​(FdtSketch sketch,
        +                     Group group,
        +                     char sep)
        +
        Construct with a populated FdtSketch
        +
        +
        Parameters:
        +
        sketch - the given sketch to query.
        +
        group - the Group
        +
        sep - the separator character
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getGroupCount

        +
        public int getGroupCount()
        +
        Returns the number of groups in the final sketch.
        +
        +
        Returns:
        +
        the number of groups in the final sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getGroupList

        +
        public List<Group> getGroupList​(int[] priKeyIndices,
        +                                int numStdDev,
        +                                int limit)
        +
        Return the most frequent Groups associated with Primary Keys based on the size of the groups.
        +
        +
        Parameters:
        +
        priKeyIndices - the indices of the primary dimensions
        +
        numStdDev - the number of standard deviations for the error bounds, this value is an + integer and must be one of 1, 2, or 3. + See Number of Standard Deviations
        +
        limit - the maximum number of rows to return. If ≤ 0, all rows will be returned.
        +
        Returns:
        +
        the most frequent Groups associated with Primary Keys based on the size of the groups.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/class-use/FdtSketch.html b/docs/5.0.X/org/apache/datasketches/fdt/class-use/FdtSketch.html new file mode 100644 index 000000000..1a87ef2ad --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/class-use/FdtSketch.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class org.apache.datasketches.fdt.FdtSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.fdt.FdtSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/class-use/Group.html b/docs/5.0.X/org/apache/datasketches/fdt/class-use/Group.html new file mode 100644 index 000000000..742fca423 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/class-use/Group.html @@ -0,0 +1,273 @@ + + + + + +Uses of Class org.apache.datasketches.fdt.Group (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.fdt.Group

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use Group 
    PackageDescription
    org.apache.datasketches.fdt +
    Frequent Distinct Tuples Sketch
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of Group in org.apache.datasketches.fdt

      + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.fdt that return Group 
      Modifier and TypeMethodDescription
      GroupGroup.init​(String priKey, + int count, + double estimate, + double ub, + double lb, + double fraction, + double rse) +
      Specifies the parameters to be listed as columns
      +
      + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.fdt that return types with arguments of type Group 
      Modifier and TypeMethodDescription
      List<Group>PostProcessor.getGroupList​(int[] priKeyIndices, + int numStdDev, + int limit) +
      Return the most frequent Groups associated with Primary Keys based on the size of the groups.
      +
      List<Group>FdtSketch.getResult​(int[] priKeyIndices, + int limit, + int numStdDev, + char sep) +
      Returns an ordered List of Groups of the most frequent distinct population of subset tuples + represented by the count of entries of each group.
      +
      + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.fdt with parameters of type Group 
      Modifier and TypeMethodDescription
      intGroup.compareTo​(Group that) 
      PostProcessorFdtSketch.getPostProcessor​(Group group, + char sep) +
      Returns the PostProcessor that enables multiple queries against the sketch results.
      +
      + + + + + + + + + + + + +
      Constructors in org.apache.datasketches.fdt with parameters of type Group 
      ConstructorDescription
      PostProcessor​(FdtSketch sketch, + Group group, + char sep) +
      Construct with a populated FdtSketch
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/class-use/PostProcessor.html b/docs/5.0.X/org/apache/datasketches/fdt/class-use/PostProcessor.html new file mode 100644 index 000000000..d0601bbd5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/class-use/PostProcessor.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class org.apache.datasketches.fdt.PostProcessor (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.fdt.PostProcessor

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/package-summary.html b/docs/5.0.X/org/apache/datasketches/fdt/package-summary.html new file mode 100644 index 000000000..c1cd5afb4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/package-summary.html @@ -0,0 +1,187 @@ + + + + + +org.apache.datasketches.fdt (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.fdt

+
+
+
+ + +
Frequent Distinct Tuples Sketch
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    FdtSketch +
    A Frequent Distinct Tuples sketch.
    +
    Group +
    Defines a Group from a Frequent Distinct Tuple query.
    +
    PostProcessor +
    This processes the contents of a FDT sketch to extract the + primary keys with the most frequent unique combinations of the non-primary dimensions.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/package-tree.html b/docs/5.0.X/org/apache/datasketches/fdt/package-tree.html new file mode 100644 index 000000000..3ae5c8388 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/package-tree.html @@ -0,0 +1,178 @@ + + + + + +org.apache.datasketches.fdt Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.fdt

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/fdt/package-use.html b/docs/5.0.X/org/apache/datasketches/fdt/package-use.html new file mode 100644 index 000000000..948b678a5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/fdt/package-use.html @@ -0,0 +1,201 @@ + + + + + +Uses of Package org.apache.datasketches.fdt (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.fdt

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/ErrorType.html b/docs/5.0.X/org/apache/datasketches/frequencies/ErrorType.html new file mode 100644 index 000000000..9801c2564 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/ErrorType.html @@ -0,0 +1,396 @@ + + + + + +ErrorType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum ErrorType

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<ErrorType>
    +
    +
    +
    public enum ErrorType
    +extends Enum<ErrorType>
    +
    Specifies one of two types of error regions of the statistical classification Confusion Matrix + that can be excluded from a returned sample of Frequent Items.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        NO_FALSE_POSITIVES

        +
        public static final ErrorType NO_FALSE_POSITIVES
        +
        No Type I error samples will be included in the sample set, + which means all Truly Negative samples will be excluded from the sample set. + However, there may be Type II error samples (False Negatives) + that should have been included that were not. + This is a subset of the NO_FALSE_NEGATIVES ErrorType.
        +
      • +
      + + + +
        +
      • +

        NO_FALSE_NEGATIVES

        +
        public static final ErrorType NO_FALSE_NEGATIVES
        +
        No Type II error samples will be excluded from the sample set, + which means all Truly Positive samples will be included in the sample set. + However, there may be Type I error samples (False Positives) + that were included that should not have been.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static ErrorType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (ErrorType c : ErrorType.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static ErrorType valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.Row.html b/docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.Row.html new file mode 100644 index 000000000..be92b2c92 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.Row.html @@ -0,0 +1,458 @@ + + + + + +ItemsSketch.Row (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ItemsSketch.Row<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.frequencies.ItemsSketch.Row<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getItem

        +
        public T getItem()
        +
        +
        Returns:
        +
        item of type T
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public long getEstimate()
        +
        +
        Returns:
        +
        the estimate
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public long getUpperBound()
        +
        +
        Returns:
        +
        the upper bound
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public long getLowerBound()
        +
        +
        Returns:
        +
        return the lower bound
        +
        +
      • +
      + + + +
        +
      • +

        getRowHeader

        +
        public static String getRowHeader()
        +
        +
        Returns:
        +
        the descriptive row header
        +
        +
      • +
      + + + + + + + +
        +
      • +

        compareTo

        +
        public int compareTo​(ItemsSketch.Row<T> that)
        +
        This compareTo is strictly limited to the Row.getEstimate() value and does not imply any + ordering whatsoever to the other elements of the row: item and upper and lower bounds. + Defined this way, this compareTo will be consistent with hashCode() and equals(Object).
        +
        +
        Specified by:
        +
        compareTo in interface Comparable<T>
        +
        Parameters:
        +
        that - the other row to compare to.
        +
        Returns:
        +
        a negative integer, zero, or a positive integer as this.getEstimate() is less than, + equal to, or greater than that.getEstimate().
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        This hashCode is computed only from the Row.getEstimate() value. + Defined this way, this hashCode will be consistent with equals(Object):
        + If (x.equals(y)) implies: x.hashCode() == y.hashCode().
        + If (!x.equals(y)) does NOT imply: x.hashCode() != y.hashCode().
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        Returns:
        +
        the hashCode computed from getEstimate().
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object obj)
        +
        This equals is computed only from the Row.getEstimate() value and does not imply equality + of the other items within the row: item and upper and lower bounds. + Defined this way, this equals will be consistent with compareTo(Row).
        +
        +
        Overrides:
        +
        equals in class Object
        +
        Parameters:
        +
        obj - the other row to determine equality with.
        +
        Returns:
        +
        true if this.getEstimate() equals ((Row<T>)obj).getEstimate().
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.html b/docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.html new file mode 100644 index 000000000..a4b5df74c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/ItemsSketch.html @@ -0,0 +1,964 @@ + + + + + +ItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ItemsSketch<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.frequencies.ItemsSketch<T>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - The type of item to be tracked by this sketch
    +
    +
    +
    public class ItemsSketch<T>
    +extends Object
    +

    This sketch is useful for tracking approximate frequencies of items of type <T> + with optional associated counts (<T> item, long count) that are members of a + multiset of such items. The true frequency of an item is defined to be the sum of associated + counts.

    + +

    This implementation provides the following capabilities:

    +
      +
    • Estimate the frequency of an item.
    • +
    • Return upper and lower bounds of any item, such that the true frequency is always + between the upper and lower bounds.
    • +
    • Return a global maximum error that holds for all items in the stream.
    • +
    • Return an array of frequent items that qualify either a NO_FALSE_POSITIVES or a + NO_FALSE_NEGATIVES error type.
    • +
    • Merge itself with another sketch object created from this class.
    • +
    • Serialize/Deserialize to/from a byte array.
    • +
    + +

    Space Usage

    + +

    The sketch is initialized with a maxMapSize that specifies the maximum physical + length of the internal hash map of the form (<T> item, long count). + The maxMapSize must be a power of 2.

    + +

    The hash map starts at a very small size (8 entries), and grows as needed up to the + specified maxMapSize.

    + +

    Excluding external space required for the item objects, the internal memory space usage of + this sketch is 18 * mapSize bytes (assuming 8 bytes for each Java reference), plus a small + constant number of additional bytes. The internal memory space usage of this sketch will never + exceed 18 * maxMapSize bytes, plus a small constant number of additional bytes.

    + +

    Maximum Capacity of the Sketch

    + +

    The LOAD_FACTOR for the hash map is internally set at 75%, + which means at any time the map capacity of (item, count) pairs is mapCap = 0.75 * + mapSize. + The maximum capacity of (item, count) pairs of the sketch is maxMapCap = 0.75 * + maxMapSize.

    + +

    Updating the sketch with (item, count) pairs

    + +

    If the item is found in the hash map, the mapped count field (the "counter") is + incremented by the incoming count, otherwise, a new counter "(item, count) pair" is + created. If the number of tracked counters reaches the maximum capacity of the hash map + the sketch decrements all of the counters (by an approximately computed median), and + removes any non-positive counters.

    + +

    Accuracy

    + +

    If fewer than 0.75 * maxMapSize different items are inserted into the sketch the + estimated frequencies returned by the sketch will be exact.

    + +

    The logic of the frequent items sketch is such that the stored counts and true counts are + never too different. + More specifically, for any item, the sketch can return an estimate of the + true frequency of item, along with upper and lower bounds on the frequency + (that hold deterministically).

    + +

    For this implementation and for a specific active item, it is guaranteed that + the true frequency will be between the Upper Bound (UB) and the Lower Bound (LB) computed for + that item. Specifically, (UB- LB) ≤ W * epsilon, where W denotes the + sum of all item counts, and epsilon = 3.5/M, where M is the maxMapSize.

    + +

    This is a worst case guarantee that applies to arbitrary inputs.1 + For inputs typically seen in practice (UB-LB) is usually much smaller. +

    + +

    Background

    + +

    This code implements a variant of what is commonly known as the "Misra-Gries + algorithm". Variants of it were discovered and rediscovered and redesigned several times + over the years:

    +
    • "Finding repeated elements", Misra, Gries, 1982
    • +
    • "Frequency estimation of Internet packet streams with limited space" Demaine, + Lopez-Ortiz, Munro, 2002
    • +
    • "A simple algorithm for finding frequent elements in streams and bags" Karp, Shenker, + Papadimitriou, 2003
    • +
    • "Efficient Computation of Frequent and Top-k Elements in Data Streams" Metwally, + Agrawal, Abbadi, 2006
    • +
    + + 1 For speed we do employ some randomization that introduces a small probability that + our proof of the worst-case bound might not apply to a given run. However, we have ensured + that this probability is extremely small. For example, if the stream causes one table purge + (rebuild), our proof of the worst case bound applies with probability at least 1 - 1E-14. + If the stream causes 1E9 purges, our proof applies with probability at least 1 - 1E-5.
    +
    +
    Author:
    +
    Justin Thaler, Alexander Saydakov
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Nested Class Summary

      + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      static class ItemsSketch.Row<T> +
      Row class that defines the return values from a getFrequentItems query.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ItemsSketch​(int maxMapSize) +
      Construct this sketch with the parameter maxMapSize and the default initialMapSize (8).
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static doublegetAprioriError​(int maxMapSize, + long estimatedTotalStreamWeight) +
      Returns the estimated a priori error given the maxMapSize for the sketch and the + estimatedTotalStreamWeight.
      +
      intgetCurrentMapCapacity() +
      Returns the current number of counters the sketch is configured to support.
      +
      static doublegetEpsilon​(int maxMapSize) +
      Returns epsilon used to compute a priori error.
      +
      longgetEstimate​(T item) +
      Gets the estimate of the frequency of the given item.
      +
      ItemsSketch.Row<T>[]getFrequentItems​(long threshold, + ErrorType errorType) +
      Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given a threshold and an ErrorCondition.
      +
      ItemsSketch.Row<T>[]getFrequentItems​(ErrorType errorType) +
      Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given an ErrorCondition and the default threshold.
      +
      static <T> ItemsSketch<T>getInstance​(org.apache.datasketches.memory.Memory srcMem, + ArrayOfItemsSerDe<T> serDe) +
      Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
      +
      longgetLowerBound​(T item) +
      Gets the guaranteed lower bound frequency of the given item, which can never be + negative.
      +
      longgetMaximumError() 
      intgetMaximumMapCapacity() +
      Returns the maximum number of counters the sketch is configured to support.
      +
      intgetNumActiveItems() 
      longgetStreamLength() +
      Returns the sum of the frequencies in the stream seen so far by the sketch
      +
      longgetUpperBound​(T item) +
      Gets the guaranteed upper bound frequency of the given item.
      +
      booleanisEmpty() +
      Returns true if this sketch is empty
      +
      ItemsSketch<T>merge​(ItemsSketch<T> other) +
      This function merges the other sketch into this one.
      +
      voidreset() +
      Resets this sketch to a virgin state.
      +
      byte[]toByteArray​(ArrayOfItemsSerDe<T> serDe) +
      Returns a byte array representation of this sketch
      +
      StringtoString() +
      Returns a human readable summary of this sketch.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of a ItemsSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of a ItemsSketch.
      +
      voidupdate​(T item) +
      Update this sketch with an item and a frequency count of one.
      +
      voidupdate​(T item, + long count) +
      Update this sketch with an item and a positive frequency count.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ItemsSketch

        +
        public ItemsSketch​(int maxMapSize)
        +
        Construct this sketch with the parameter maxMapSize and the default initialMapSize (8).
        +
        +
        Parameters:
        +
        maxMapSize - Determines the physical size of the internal hash map managed by this + sketch and must be a power of 2. The maximum capacity of this internal hash map is + 0.75 times * maxMapSize. Both the ultimate accuracy and size of this sketch are + functions of maxMapSize.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsSketch<T> getInstance​(org.apache.datasketches.memory.Memory srcMem,
        +                                             ArrayOfItemsSerDe<T> serDe)
        +
        Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
        +
        +
        Type Parameters:
        +
        T - The type of item that this sketch will track
        +
        Parameters:
        +
        srcMem - a Memory representation of a sketch of this class. + See Memory
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a sketch instance of this class.
        +
        +
      • +
      + + + +
        +
      • +

        getAprioriError

        +
        public static double getAprioriError​(int maxMapSize,
        +                                     long estimatedTotalStreamWeight)
        +
        Returns the estimated a priori error given the maxMapSize for the sketch and the + estimatedTotalStreamWeight.
        +
        +
        Parameters:
        +
        maxMapSize - the planned map size to be used when constructing this sketch.
        +
        estimatedTotalStreamWeight - the estimated total stream weight.
        +
        Returns:
        +
        the estimated a priori error.
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentMapCapacity

        +
        public int getCurrentMapCapacity()
        +
        Returns the current number of counters the sketch is configured to support.
        +
        +
        Returns:
        +
        the current number of counters the sketch is configured to support.
        +
        +
      • +
      + + + +
        +
      • +

        getEpsilon

        +
        public static double getEpsilon​(int maxMapSize)
        +
        Returns epsilon used to compute a priori error. + This is just the value 3.5 / maxMapSize.
        +
        +
        Parameters:
        +
        maxMapSize - the planned map size to be used when constructing this sketch.
        +
        Returns:
        +
        epsilon used to compute a priori error.
        +
        +
      • +
      + + + + + +
        +
      • +

        getEstimate

        +
        public long getEstimate​(T item)
        +
        Gets the estimate of the frequency of the given item. + Note: The true frequency of a item would be the sum of the counts as a result of the + two update functions.
        +
        +
        Parameters:
        +
        item - the given item
        +
        Returns:
        +
        the estimate of the frequency of the given item
        +
        +
      • +
      + + + + + +
        +
      • +

        getLowerBound

        +
        public long getLowerBound​(T item)
        +
        Gets the guaranteed lower bound frequency of the given item, which can never be + negative.
        +
        +
        Parameters:
        +
        item - the given item.
        +
        Returns:
        +
        the guaranteed lower bound frequency of the given item. That is, a number which + is guaranteed to be no larger than the real frequency.
        +
        +
      • +
      + + + +
        +
      • +

        getFrequentItems

        +
        public ItemsSketch.Row<T>[] getFrequentItems​(long threshold,
        +                                             ErrorType errorType)
        +
        Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given a threshold and an ErrorCondition. If the threshold is lower than getMaximumError(), + then getMaximumError() will be used instead. + +

        The method first examines all active items in the sketch (items that have a counter). + +

        If ErrorType = NO_FALSE_NEGATIVES, this will include an item in the result + list if getUpperBound(item) > threshold. + There will be no false negatives, i.e., no Type II error. + There may be items in the set with true frequencies less than the threshold + (false positives).

        + +

        If ErrorType = NO_FALSE_POSITIVES, this will include an item in the result + list if getLowerBound(item) > threshold. + There will be no false positives, i.e., no Type I error. + There may be items omitted from the set with true frequencies greater than the + threshold (false negatives).

        +
        +
        Parameters:
        +
        threshold - to include items in the result list
        +
        errorType - determines whether no false positives or no false negatives are + desired.
        +
        Returns:
        +
        an array of frequent items
        +
        +
      • +
      + + + +
        +
      • +

        getFrequentItems

        +
        public ItemsSketch.Row<T>[] getFrequentItems​(ErrorType errorType)
        +
        Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given an ErrorCondition and the default threshold. + This is the same as getFrequentItems(getMaximumError(), errorType)
        +
        +
        Parameters:
        +
        errorType - determines whether no false positives or no false negatives are + desired.
        +
        Returns:
        +
        an array of frequent items
        +
        +
      • +
      + + + +
        +
      • +

        getMaximumError

        +
        public long getMaximumError()
        +
        +
        Returns:
        +
        An upper bound on the maximum error of getEstimate(item) for any item. + This is equivalent to the maximum distance between the upper bound and the lower bound + for any item.
        +
        +
      • +
      + + + +
        +
      • +

        getMaximumMapCapacity

        +
        public int getMaximumMapCapacity()
        +
        Returns the maximum number of counters the sketch is configured to support.
        +
        +
        Returns:
        +
        the maximum number of counters the sketch is configured to support.
        +
        +
      • +
      + + + +
        +
      • +

        getNumActiveItems

        +
        public int getNumActiveItems()
        +
        +
        Returns:
        +
        the number of active items in the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getStreamLength

        +
        public long getStreamLength()
        +
        Returns the sum of the frequencies in the stream seen so far by the sketch
        +
        +
        Returns:
        +
        the sum of the frequencies in the stream seen so far by the sketch
        +
        +
      • +
      + + + + + +
        +
      • +

        getUpperBound

        +
        public long getUpperBound​(T item)
        +
        Gets the guaranteed upper bound frequency of the given item.
        +
        +
        Parameters:
        +
        item - the given item
        +
        Returns:
        +
        the guaranteed upper bound frequency of the given item. That is, a number which + is guaranteed to be no smaller than the real frequency.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Returns true if this sketch is empty
        +
        +
        Returns:
        +
        true if this sketch is empty
        +
        +
      • +
      + + + +
        +
      • +

        merge

        +
        public ItemsSketch<T> merge​(ItemsSketch<T> other)
        +
        This function merges the other sketch into this one. + The other sketch may be of a different size.
        +
        +
        Parameters:
        +
        other - sketch of this class
        +
        Returns:
        +
        a sketch whose estimates are within the guarantees of the + largest error tolerance of the two merged sketches.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch to a virgin state.
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<T> serDe)
        +
        Returns a byte array representation of this sketch
        +
        +
        Parameters:
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a byte array representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human readable summary of this sketch.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        a human readable summary of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of a ItemsSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a ItemsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of a ItemsSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory object
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a ItemsSketch.
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(T item)
        +
        Update this sketch with an item and a frequency count of one.
        +
        +
        Parameters:
        +
        item - for which the frequency should be increased.
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(T item,
        +                   long count)
        +
        Update this sketch with an item and a positive frequency count.
        +
        +
        Parameters:
        +
        item - for which the frequency should be increased. The sketch uses + hashCode() and equals() methods of the type T.
        +
        count - the amount by which the frequency of the item should be increased. + A count of zero is a no-op, and a negative count will throw an exception.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.Row.html b/docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.Row.html new file mode 100644 index 000000000..81d1528de --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.Row.html @@ -0,0 +1,454 @@ + + + + + +LongsSketch.Row (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class LongsSketch.Row

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.frequencies.LongsSketch.Row
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getItem

        +
        public long getItem()
        +
        +
        Returns:
        +
        item of type T
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public long getEstimate()
        +
        +
        Returns:
        +
        the estimate
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public long getUpperBound()
        +
        +
        Returns:
        +
        the upper bound
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public long getLowerBound()
        +
        +
        Returns:
        +
        return the lower bound
        +
        +
      • +
      + + + +
        +
      • +

        getRowHeader

        +
        public static String getRowHeader()
        +
        +
        Returns:
        +
        the descriptive row header
        +
        +
      • +
      + + + + + + + +
        +
      • +

        compareTo

        +
        public int compareTo​(LongsSketch.Row that)
        +
        This compareTo is strictly limited to the Row.getEstimate() value and does not imply any + ordering whatsoever to the other elements of the row: item and upper and lower bounds. + Defined this way, this compareTo will be consistent with hashCode() and equals(Object).
        +
        +
        Specified by:
        +
        compareTo in interface Comparable<LongsSketch.Row>
        +
        Parameters:
        +
        that - the other row to compare to.
        +
        Returns:
        +
        a negative integer, zero, or a positive integer as this.getEstimate() is less than, + equal to, or greater than that.getEstimate().
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        This hashCode is computed only from the Row.getEstimate() value. + Defined this way, this hashCode will be consistent with equals(Object):
        + If (x.equals(y)) implies: x.hashCode() == y.hashCode().
        + If (!x.equals(y)) does NOT imply: x.hashCode() != y.hashCode().
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        Returns:
        +
        the hashCode computed from getEstimate().
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object obj)
        +
        This equals is computed only from the Row.getEstimate() value and does not imply equality + of the other items within the row: item and upper and lower bounds. + Defined this way, this equals will be consistent with compareTo(Row).
        +
        +
        Overrides:
        +
        equals in class Object
        +
        Parameters:
        +
        obj - the other row to determine equality with.
        +
        Returns:
        +
        true if this.getEstimate() equals ((Row)obj).getEstimate().
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.html b/docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.html new file mode 100644 index 000000000..72c6f32e7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/LongsSketch.html @@ -0,0 +1,1009 @@ + + + + + +LongsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class LongsSketch

+
+
+ +
+
    +
  • +
    +
    public class LongsSketch
    +extends Object
    +

    This sketch is useful for tracking approximate frequencies of long items with optional + associated counts (long item, long count) that are members of a multiset of + such items. The true frequency of an item is defined to be the sum of associated counts.

    + +

    This implementation provides the following capabilities:

    +
      +
    • Estimate the frequency of an item.
    • +
    • Return upper and lower bounds of any item, such that the true frequency is always + between the upper and lower bounds.
    • +
    • Return a global maximum error that holds for all items in the stream.
    • +
    • Return an array of frequent items that qualify either a NO_FALSE_POSITIVES or a + NO_FALSE_NEGATIVES error type.
    • +
    • Merge itself with another sketch object created from this class.
    • +
    • Serialize/Deserialize to/from a String or byte array.
    • +
    + +

    Space Usage

    + +

    The sketch is initialized with a maxMapSize that specifies the maximum physical + length of the internal hash map of the form (long item, long count). + The maxMapSize must be a power of 2.

    + +

    The hash map starts at a very small size (8 entries), and grows as needed up to the + specified maxMapSize.

    + +

    At any moment the internal memory space usage of this sketch is 18 * mapSize bytes, + plus a small constant number of additional bytes. The maximum internal memory space usage of + this sketch will never exceed 18 * maxMapSize bytes, plus a small constant number of + additional bytes.

    + +

    Maximum Capacity of the Sketch

    + +

    The LOAD_FACTOR for the hash map is internally set at 75%, + which means at any time the map capacity of (item, count) pairs is mapCap = + 0.75 * mapSize. + The maximum capacity of (item, count) pairs of the sketch is maxMapCap = + 0.75 * maxMapSize.

    + +

    Updating the sketch with (item, count) pairs

    + +

    If the item is found in the hash map, the mapped count field (the "counter") is + incremented by the incoming count, otherwise, a new counter "(item, count) pair" is + created. If the number of tracked counters reaches the maximum capacity of the hash map + the sketch decrements all of the counters (by an approximately computed median), and + removes any non-positive counters.

    + +

    Accuracy

    + +

    If fewer than 0.75 * maxMapSize different items are inserted into the sketch the + estimated frequencies returned by the sketch will be exact.

    + +

    The logic of the frequent items sketch is such that the stored counts and true counts are + never too different. + More specifically, for any item, the sketch can return an estimate of the + true frequency of item, along with upper and lower bounds on the frequency + (that hold deterministically).

    + +

    For this implementation and for a specific active item, it is guaranteed that + the true frequency will be between the Upper Bound (UB) and the Lower Bound (LB) computed for + that item. Specifically, (UB- LB) ≤ W * epsilon, where W denotes the + sum of all item counts, and epsilon = 3.5/M, where M is the maxMapSize.

    + +

    This is a worst case guarantee that applies to arbitrary inputs.1 + For inputs typically seen in practice (UB-LB) is usually much smaller. +

    + +

    Background

    + +

    This code implements a variant of what is commonly known as the "Misra-Gries + algorithm". Variants of it were discovered and rediscovered and redesigned several times + over the years:

    +
    • "Finding repeated elements", Misra, Gries, 1982
    • +
    • "Frequency estimation of Internet packet streams with limited space" Demaine, + Lopez-Ortiz, Munro, 2002
    • +
    • "A simple algorithm for finding frequent elements in streams and bags" Karp, Shenker, + Papadimitriou, 2003
    • +
    • "Efficient Computation of Frequent and Top-k Elements in Data Streams" Metwally, + Agrawal, Abbadi, 2006
    • +
    + + 1 For speed we do employ some randomization that introduces a small probability that + our proof of the worst-case bound might not apply to a given run. However, we have ensured + that this probability is extremely small. For example, if the stream causes one table purge + (rebuild), our proof of the worst case bound applies with probability at least 1 - 1E-14. + If the stream causes 1E9 purges, our proof applies with probability at least 1 - 1E-5.
    +
    +
    Author:
    +
    Justin Thaler, Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Nested Class Summary

      + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      static class LongsSketch.Row +
      Row class that defines the return values from a getFrequentItems query.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      LongsSketch​(int maxMapSize) +
      Construct this sketch with the parameter maxMapSize and the default initialMapSize (8).
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static doublegetAprioriError​(int maxMapSize, + long estimatedTotalStreamWeight) +
      Returns the estimated a priori error given the maxMapSize for the sketch and the + estimatedTotalStreamWeight.
      +
      intgetCurrentMapCapacity() +
      Returns the current number of counters the sketch is configured to support.
      +
      static doublegetEpsilon​(int maxMapSize) +
      Returns epsilon used to compute a priori error.
      +
      longgetEstimate​(long item) +
      Gets the estimate of the frequency of the given item.
      +
      LongsSketch.Row[]getFrequentItems​(long threshold, + ErrorType errorType) +
      Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given a threshold and an ErrorCondition.
      +
      LongsSketch.Row[]getFrequentItems​(ErrorType errorType) +
      Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given an ErrorCondition and the default threshold.
      +
      static LongsSketchgetInstance​(String string) +
      Returns a sketch instance of this class from the given String, + which must be a String representation of this sketch class.
      +
      static LongsSketchgetInstance​(org.apache.datasketches.memory.Memory srcMem) +
      Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
      +
      longgetLowerBound​(long item) +
      Gets the guaranteed lower bound frequency of the given item, which can never be + negative.
      +
      longgetMaximumError() 
      intgetMaximumMapCapacity() +
      Returns the maximum number of counters the sketch is configured to support.
      +
      intgetNumActiveItems() 
      intgetStorageBytes() +
      Returns the number of bytes required to store this sketch as an array of bytes.
      +
      longgetStreamLength() +
      Returns the sum of the frequencies (weights or counts) in the stream seen so far by the sketch
      +
      longgetUpperBound​(long item) +
      Gets the guaranteed upper bound frequency of the given item.
      +
      booleanisEmpty() +
      Returns true if this sketch is empty
      +
      LongsSketchmerge​(LongsSketch other) +
      This function merges the other sketch into this one.
      +
      voidreset() +
      Resets this sketch to a virgin state.
      +
      StringserializeToString() +
      Returns a String representation of this sketch
      +
      byte[]toByteArray() +
      Returns a byte array representation of this sketch
      +
      StringtoString() +
      Returns a human readable summary of this sketch.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of a LongsSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of a LongsSketch.
      +
      voidupdate​(long item) +
      Update this sketch with an item and a frequency count of one.
      +
      voidupdate​(long item, + long count) +
      Update this sketch with a item and a positive frequency count (or weight).
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        LongsSketch

        +
        public LongsSketch​(int maxMapSize)
        +
        Construct this sketch with the parameter maxMapSize and the default initialMapSize (8).
        +
        +
        Parameters:
        +
        maxMapSize - Determines the physical size of the internal hash map managed by this + sketch and must be a power of 2. The maximum capacity of this internal hash map is + 0.75 times * maxMapSize. Both the ultimate accuracy and size of this sketch are a + function of maxMapSize.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getInstance

        +
        public static LongsSketch getInstance​(org.apache.datasketches.memory.Memory srcMem)
        +
        Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
        +
        +
        Parameters:
        +
        srcMem - a Memory representation of a sketch of this class. + See Memory
        +
        Returns:
        +
        a sketch instance of this class.
        +
        +
      • +
      + + + +
        +
      • +

        getInstance

        +
        public static LongsSketch getInstance​(String string)
        +
        Returns a sketch instance of this class from the given String, + which must be a String representation of this sketch class.
        +
        +
        Parameters:
        +
        string - a String representation of a sketch of this class.
        +
        Returns:
        +
        a sketch instance of this class.
        +
        +
      • +
      + + + +
        +
      • +

        getAprioriError

        +
        public static double getAprioriError​(int maxMapSize,
        +                                     long estimatedTotalStreamWeight)
        +
        Returns the estimated a priori error given the maxMapSize for the sketch and the + estimatedTotalStreamWeight.
        +
        +
        Parameters:
        +
        maxMapSize - the planned map size to be used when constructing this sketch.
        +
        estimatedTotalStreamWeight - the estimated total stream weight.
        +
        Returns:
        +
        the estimated a priori error.
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentMapCapacity

        +
        public int getCurrentMapCapacity()
        +
        Returns the current number of counters the sketch is configured to support.
        +
        +
        Returns:
        +
        the current number of counters the sketch is configured to support.
        +
        +
      • +
      + + + +
        +
      • +

        getEpsilon

        +
        public static double getEpsilon​(int maxMapSize)
        +
        Returns epsilon used to compute a priori error. + This is just the value 3.5 / maxMapSize.
        +
        +
        Parameters:
        +
        maxMapSize - the planned map size to be used when constructing this sketch.
        +
        Returns:
        +
        epsilon used to compute a priori error.
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public long getEstimate​(long item)
        +
        Gets the estimate of the frequency of the given item. + Note: The true frequency of a item would be the sum of the counts as a result of the + two update functions.
        +
        +
        Parameters:
        +
        item - the given item
        +
        Returns:
        +
        the estimate of the frequency of the given item
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public long getLowerBound​(long item)
        +
        Gets the guaranteed lower bound frequency of the given item, which can never be + negative.
        +
        +
        Parameters:
        +
        item - the given item.
        +
        Returns:
        +
        the guaranteed lower bound frequency of the given item. That is, a number which + is guaranteed to be no larger than the real frequency.
        +
        +
      • +
      + + + +
        +
      • +

        getFrequentItems

        +
        public LongsSketch.Row[] getFrequentItems​(long threshold,
        +                                          ErrorType errorType)
        +
        Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given a threshold and an ErrorCondition. If the threshold is lower than getMaximumError(), + then getMaximumError() will be used instead. + +

        The method first examines all active items in the sketch (items that have a counter). + +

        If ErrorType = NO_FALSE_NEGATIVES, this will include an item in the result + list if getUpperBound(item) > threshold. + There will be no false negatives, i.e., no Type II error. + There may be items in the set with true frequencies less than the threshold + (false positives).

        + +

        If ErrorType = NO_FALSE_POSITIVES, this will include an item in the result + list if getLowerBound(item) > threshold. + There will be no false positives, i.e., no Type I error. + There may be items omitted from the set with true frequencies greater than the + threshold (false negatives). This is a subset of the NO_FALSE_NEGATIVES case.

        +
        +
        Parameters:
        +
        threshold - to include items in the result list
        +
        errorType - determines whether no false positives or no false negatives are + desired.
        +
        Returns:
        +
        an array of frequent items
        +
        +
      • +
      + + + +
        +
      • +

        getFrequentItems

        +
        public LongsSketch.Row[] getFrequentItems​(ErrorType errorType)
        +
        Returns an array of Rows that include frequent items, estimates, upper and lower bounds + given an ErrorCondition and the default threshold. + This is the same as getFrequentItems(getMaximumError(), errorType)
        +
        +
        Parameters:
        +
        errorType - determines whether no false positives or no false negatives are + desired.
        +
        Returns:
        +
        an array of frequent items
        +
        +
      • +
      + + + +
        +
      • +

        getMaximumError

        +
        public long getMaximumError()
        +
        +
        Returns:
        +
        An upper bound on the maximum error of getEstimate(item) for any item. + This is equivalent to the maximum distance between the upper bound and the lower bound + for any item.
        +
        +
      • +
      + + + +
        +
      • +

        getMaximumMapCapacity

        +
        public int getMaximumMapCapacity()
        +
        Returns the maximum number of counters the sketch is configured to support.
        +
        +
        Returns:
        +
        the maximum number of counters the sketch is configured to support.
        +
        +
      • +
      + + + +
        +
      • +

        getNumActiveItems

        +
        public int getNumActiveItems()
        +
        +
        Returns:
        +
        the number of active items in the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getStorageBytes

        +
        public int getStorageBytes()
        +
        Returns the number of bytes required to store this sketch as an array of bytes.
        +
        +
        Returns:
        +
        the number of bytes required to store this sketch as an array of bytes.
        +
        +
      • +
      + + + +
        +
      • +

        getStreamLength

        +
        public long getStreamLength()
        +
        Returns the sum of the frequencies (weights or counts) in the stream seen so far by the sketch
        +
        +
        Returns:
        +
        the sum of the frequencies in the stream seen so far by the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public long getUpperBound​(long item)
        +
        Gets the guaranteed upper bound frequency of the given item.
        +
        +
        Parameters:
        +
        item - the given item
        +
        Returns:
        +
        the guaranteed upper bound frequency of the given item. That is, a number which + is guaranteed to be no smaller than the real frequency.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Returns true if this sketch is empty
        +
        +
        Returns:
        +
        true if this sketch is empty
        +
        +
      • +
      + + + +
        +
      • +

        merge

        +
        public LongsSketch merge​(LongsSketch other)
        +
        This function merges the other sketch into this one. + The other sketch may be of a different size.
        +
        +
        Parameters:
        +
        other - sketch of this class
        +
        Returns:
        +
        a sketch whose estimates are within the guarantees of the + largest error tolerance of the two merged sketches.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch to a virgin state.
        +
      • +
      + + + +
        +
      • +

        serializeToString

        +
        public String serializeToString()
        +
        Returns a String representation of this sketch
        +
        +
        Returns:
        +
        a String representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Returns a byte array representation of this sketch
        +
        +
        Returns:
        +
        a byte array representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human readable summary of this sketch.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        a human readable summary of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of a LongsSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a LongsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of a LongsSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory object
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a LongsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long item)
        +
        Update this sketch with an item and a frequency count of one.
        +
        +
        Parameters:
        +
        item - for which the frequency should be increased.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long item,
        +                   long count)
        +
        Update this sketch with a item and a positive frequency count (or weight).
        +
        +
        Parameters:
        +
        item - for which the frequency should be increased. The item can be any long value + and is only used by the sketch to determine uniqueness.
        +
        count - the amount by which the frequency of the item should be increased. + An count of zero is a no-op, and a negative count will throw an exception.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ErrorType.html b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ErrorType.html new file mode 100644 index 000000000..23dff9ad0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ErrorType.html @@ -0,0 +1,250 @@ + + + + + +Uses of Class org.apache.datasketches.frequencies.ErrorType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.frequencies.ErrorType

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.Row.html b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.Row.html new file mode 100644 index 000000000..13b43d124 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.Row.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class org.apache.datasketches.frequencies.ItemsSketch.Row (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.frequencies.ItemsSketch.Row

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.html b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.html new file mode 100644 index 000000000..ccc6be8ce --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/ItemsSketch.html @@ -0,0 +1,224 @@ + + + + + +Uses of Class org.apache.datasketches.frequencies.ItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.frequencies.ItemsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.Row.html b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.Row.html new file mode 100644 index 000000000..1b1121e90 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.Row.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class org.apache.datasketches.frequencies.LongsSketch.Row (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.frequencies.LongsSketch.Row

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.html b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.html new file mode 100644 index 000000000..28335bc20 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/class-use/LongsSketch.html @@ -0,0 +1,231 @@ + + + + + +Uses of Class org.apache.datasketches.frequencies.LongsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.frequencies.LongsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/package-summary.html b/docs/5.0.X/org/apache/datasketches/frequencies/package-summary.html new file mode 100644 index 000000000..454069e99 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/package-summary.html @@ -0,0 +1,221 @@ + + + + + +org.apache.datasketches.frequencies (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.frequencies

+
+
+
+ + +
This package is dedicated to streaming algorithms that enable estimation of the + frequency of occurrence of items in a weighted multiset stream of items. + If the frequency distribution of items is sufficiently skewed, these algorithms are very + useful in identifying the "Heavy Hitters" that occurred most frequently in the stream. + The accuracy of the estimation of the frequency of an item has well understood error + bounds that can be returned by the sketch. + +

These algorithms are sometimes referred to as "TopN" algorithms.

+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ItemsSketch<T> +
    This sketch is useful for tracking approximate frequencies of items of type <T> + with optional associated counts (<T> item, long count) that are members of a + multiset of such items.
    +
    ItemsSketch.Row<T> +
    Row class that defines the return values from a getFrequentItems query.
    +
    LongsSketch +
    This sketch is useful for tracking approximate frequencies of long items with optional + associated counts (long item, long count) that are members of a multiset of + such items.
    +
    LongsSketch.Row +
    Row class that defines the return values from a getFrequentItems query.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    ErrorType +
    Specifies one of two types of error regions of the statistical classification Confusion Matrix + that can be excluded from a returned sample of Frequent Items.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/package-tree.html b/docs/5.0.X/org/apache/datasketches/frequencies/package-tree.html new file mode 100644 index 000000000..b2781eace --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/package-tree.html @@ -0,0 +1,181 @@ + + + + + +org.apache.datasketches.frequencies Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.frequencies

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/frequencies/package-use.html b/docs/5.0.X/org/apache/datasketches/frequencies/package-use.html new file mode 100644 index 000000000..4f375f700 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/frequencies/package-use.html @@ -0,0 +1,218 @@ + + + + + +Uses of Package org.apache.datasketches.frequencies (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.frequencies

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use org.apache.datasketches.frequencies 
    PackageDescription
    org.apache.datasketches.frequencies +
    This package is dedicated to streaming algorithms that enable estimation of the + frequency of occurrence of items in a weighted multiset stream of items.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Classes in org.apache.datasketches.frequencies used by org.apache.datasketches.frequencies 
    ClassDescription
    ErrorType +
    Specifies one of two types of error regions of the statistical classification Confusion Matrix + that can be excluded from a returned sample of Frequent Items.
    +
    ItemsSketch +
    This sketch is useful for tracking approximate frequencies of items of type <T> + with optional associated counts (<T> item, long count) that are members of a + multiset of such items.
    +
    ItemsSketch.Row +
    Row class that defines the return values from a getFrequentItems query.
    +
    LongsSketch +
    This sketch is useful for tracking approximate frequencies of long items with optional + associated counts (long item, long count) that are members of a multiset of + such items.
    +
    LongsSketch.Row +
    Row class that defines the return values from a getFrequentItems query.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/MurmurHash3.html b/docs/5.0.X/org/apache/datasketches/hash/MurmurHash3.html new file mode 100644 index 000000000..f13b422a9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/MurmurHash3.html @@ -0,0 +1,612 @@ + + + + + +MurmurHash3 (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class MurmurHash3

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public final class MurmurHash3
    +extends Object
    +implements Serializable
    +

    + The MurmurHash3 is a fast, non-cryptographic, 128-bit hash function that has + excellent avalanche and 2-way bit independence properties. +

    + +

    + Austin Appleby's C++ + + MurmurHash3_x64_128(...), final revision 150, + which is in the Public Domain, was the inspiration for this implementation in Java. +

    + +

    + This java implementation pays close attention to the C++ algorithms in order to + maintain bit-wise compatibility, but the design is quite different. This implementation has also + been extended to include processing of arrays of longs, char or ints, which was not part of the + original C++ implementation. This implementation produces the same exact output hash bits as + the above C++ method given the same input.

    + +

    In addition, with this implementation, the hash of byte[], char[], int[], or long[] will + produce the same hash result if, and only if, all the arrays have the same exact length in + bytes, and if the contents of the values in the arrays have the same byte endianness and + overall order. There is a unit test for this class that demonstrates this.

    + +

    + The structure of this implementation also reflects a separation of code that is dependent on the + input structure (in this case byte[], int[] or long[]) from code that is independent of the input + structure. This also makes the code more readable and suitable for future extensions. +

    + +

    Note that even though this hash function produces 128 bits, the entropy of the resulting hash cannot + be greater than the entropy of the input. For example, if the input is only a single long of 64 bits, + the entropy of the resulting 128 bit hash is no greater than 64 bits.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static long[]hash​(byte[] key, + int offsetBytes, + int lengthBytes, + long seed) +
      Hash a portion of the given byte[] array.
      +
      static long[]hash​(byte[] key, + long seed) +
      Hash the given byte[] array.
      +
      static long[]hash​(char[] key, + int offsetChars, + int lengthChars, + long seed) +
      Hash a portion of the given char[] array.
      +
      static long[]hash​(char[] key, + long seed) +
      Hash the given char[] array.
      +
      static long[]hash​(int[] key, + int offsetInts, + int lengthInts, + long seed) +
      Hash a portion of the given int[] array.
      +
      static long[]hash​(int[] key, + long seed) +
      Hash the given int[] array.
      +
      static long[]hash​(long[] key, + int offsetLongs, + int lengthLongs, + long seed) +
      Hash a portion of the given long[] array.
      +
      static long[]hash​(long[] key, + long seed) +
      Hash the given long[] array.
      +
      static long[]hash​(long key, + long seed) +
      Hash the given long.
      +
      static long[]hash​(ByteBuffer buf, + long seed) +
      Hash the remaining bytes of the given ByteBuffer starting at position().
      +
      static long[]hash​(org.apache.datasketches.memory.Memory mem, + long seed) +
      Hash the given Memory.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(long key,
        +                          long seed)
        +
        Hash the given long.
        +
        +
        Parameters:
        +
        key - The input long.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(long[] key,
        +                          long seed)
        +
        Hash the given long[] array.
        +
        +
        Parameters:
        +
        key - The input long[] array. It must be non-null and non-empty.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(long[] key,
        +                          int offsetLongs,
        +                          int lengthLongs,
        +                          long seed)
        +
        Hash a portion of the given long[] array.
        +
        +
        Parameters:
        +
        key - The input long[] array. It must be non-null and non-empty.
        +
        offsetLongs - the starting offset in longs.
        +
        lengthLongs - the length in longs of the portion of the array to be hashed.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(int[] key,
        +                          long seed)
        +
        Hash the given int[] array.
        +
        +
        Parameters:
        +
        key - The input int[] array. It must be non-null and non-empty.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(int[] key,
        +                          int offsetInts,
        +                          int lengthInts,
        +                          long seed)
        +
        Hash a portion of the given int[] array.
        +
        +
        Parameters:
        +
        key - The input int[] array. It must be non-null and non-empty.
        +
        offsetInts - the starting offset in ints.
        +
        lengthInts - the length in ints of the portion of the array to be hashed.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(char[] key,
        +                          long seed)
        +
        Hash the given char[] array.
        +
        +
        Parameters:
        +
        key - The input char[] array. It must be non-null and non-empty.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(char[] key,
        +                          int offsetChars,
        +                          int lengthChars,
        +                          long seed)
        +
        Hash a portion of the given char[] array.
        +
        +
        Parameters:
        +
        key - The input char[] array. It must be non-null and non-empty.
        +
        offsetChars - the starting offset in chars.
        +
        lengthChars - the length in chars of the portion of the array to be hashed.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(byte[] key,
        +                          long seed)
        +
        Hash the given byte[] array.
        +
        +
        Parameters:
        +
        key - The input byte[] array. It must be non-null and non-empty.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(byte[] key,
        +                          int offsetBytes,
        +                          int lengthBytes,
        +                          long seed)
        +
        Hash a portion of the given byte[] array.
        +
        +
        Parameters:
        +
        key - The input byte[] array. It must be non-null and non-empty.
        +
        offsetBytes - the starting offset in bytes.
        +
        lengthBytes - the length in bytes of the portion of the array to be hashed.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(ByteBuffer buf,
        +                          long seed)
        +
        Hash the remaining bytes of the given ByteBuffer starting at position().
        +
        +
        Parameters:
        +
        buf - The input ByteBuffer. It must be non-null and non-empty.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long[] hash​(org.apache.datasketches.memory.Memory mem,
        +                          long seed)
        +
        Hash the given Memory. + +

        Note: if you want to hash only a portion of Memory, convert it to the + appropriate Region first with ByteOrder = Little Endian. If it is not + Little Endian a new region view will be created as Little Endian. + This does not change the underlying data.

        +
        +
        Parameters:
        +
        mem - The input Memory. It must be non-null and non-empty.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        a 128-bit hash of the input as a long array of size 2.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/MurmurHash3Adaptor.html b/docs/5.0.X/org/apache/datasketches/hash/MurmurHash3Adaptor.html new file mode 100644 index 000000000..7166e5df6 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/MurmurHash3Adaptor.html @@ -0,0 +1,886 @@ + + + + + +MurmurHash3Adaptor (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class MurmurHash3Adaptor

+
+
+ +
+
    +
  • +
    +
    public final class MurmurHash3Adaptor
    +extends Object
    +
    A general purpose wrapper for the MurmurHash3. +
      +
    • Inputs can be long, long[], int[], char[], byte[], double or String.
    • +
    • Returns null if arrays or String is null or empty.
    • +
    • Provides methods for returning the 128-bit result as either an array of 2 longs or as a byte + array of 16 bytes.
    • +
    • Provides modulo, asDouble and asInt functions.
    • +
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static doubleasDouble​(long[] hash) +
      Returns a uniform random double with a minimum inclusive value of zero and a maximum exclusive + value of 1.0.
      +
      static intasInt​(byte[] data, + int n) +
      Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
      +
      static intasInt​(double datum, + int n) +
      Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input double.
      +
      static intasInt​(int[] data, + int n) +
      Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
      +
      static intasInt​(long[] data, + int n) +
      Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
      +
      static intasInt​(long datum, + int n) +
      Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input datum.
      +
      static intasInt​(String datum, + int n) +
      Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input datum.
      +
      static byte[]hashToBytes​(byte[] data, + long seed) +
      Hash a byte[] and long seed.
      +
      static byte[]hashToBytes​(char[] data, + long seed) +
      Hash a char[] and long seed.
      +
      static byte[]hashToBytes​(double datum, + long seed) +
      Hash a double and long seed.
      +
      static byte[]hashToBytes​(int[] data, + long seed) +
      Hash an int[] and long seed.
      +
      static byte[]hashToBytes​(long[] data, + long seed) +
      Hash a long[] and long seed.
      +
      static byte[]hashToBytes​(long datum, + long seed) +
      Hash a long and long seed.
      +
      static byte[]hashToBytes​(String datum, + long seed) +
      Hash a String and long seed.
      +
      static long[]hashToLongs​(byte[] data, + long seed) +
      Hash a byte[] and long seed.
      +
      static long[]hashToLongs​(char[] data, + long seed) +
      Hash a char[] and long seed.
      +
      static long[]hashToLongs​(double datum, + long seed) +
      Hash a double and long seed.
      +
      static long[]hashToLongs​(int[] data, + long seed) +
      Hash a int[] and long seed.
      +
      static long[]hashToLongs​(long[] data, + long seed) +
      Hash a long[] and long seed.
      +
      static long[]hashToLongs​(long datum, + long seed) +
      Hash a long and long seed.
      +
      static long[]hashToLongs​(String datum, + long seed) +
      Hash a String and long seed.
      +
      static intmodulo​(long[] hash, + int divisor) +
      Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the + divisor.
      +
      static intmodulo​(long h0, + long h1, + int divisor) +
      Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the + divisor.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        hashToBytes

        +
        public static byte[] hashToBytes​(long datum,
        +                                 long seed)
        +
        Hash a long and long seed.
        +
        +
        Parameters:
        +
        datum - the input long value
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.
        +
        +
      • +
      + + + +
        +
      • +

        hashToBytes

        +
        public static byte[] hashToBytes​(long[] data,
        +                                 long seed)
        +
        Hash a long[] and long seed.
        +
        +
        Parameters:
        +
        data - the input long array
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.
        +
        +
      • +
      + + + +
        +
      • +

        hashToBytes

        +
        public static byte[] hashToBytes​(int[] data,
        +                                 long seed)
        +
        Hash an int[] and long seed.
        +
        +
        Parameters:
        +
        data - the input int array
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.
        +
        +
      • +
      + + + +
        +
      • +

        hashToBytes

        +
        public static byte[] hashToBytes​(char[] data,
        +                                 long seed)
        +
        Hash a char[] and long seed.
        +
        +
        Parameters:
        +
        data - the input char array
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.
        +
        +
      • +
      + + + +
        +
      • +

        hashToBytes

        +
        public static byte[] hashToBytes​(byte[] data,
        +                                 long seed)
        +
        Hash a byte[] and long seed.
        +
        +
        Parameters:
        +
        data - the input byte array
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.
        +
        +
      • +
      + + + +
        +
      • +

        hashToBytes

        +
        public static byte[] hashToBytes​(double datum,
        +                                 long seed)
        +
        Hash a double and long seed.
        +
        +
        Parameters:
        +
        datum - the input double
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.
        +
        +
      • +
      + + + +
        +
      • +

        hashToBytes

        +
        public static byte[] hashToBytes​(String datum,
        +                                 long seed)
        +
        Hash a String and long seed.
        +
        +
        Parameters:
        +
        datum - the input String
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.
        +
        +
      • +
      + + + +
        +
      • +

        hashToLongs

        +
        public static long[] hashToLongs​(long datum,
        +                                 long seed)
        +
        Hash a long and long seed.
        +
        +
        Parameters:
        +
        datum - the input long
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a long[2].
        +
        +
      • +
      + + + +
        +
      • +

        hashToLongs

        +
        public static long[] hashToLongs​(long[] data,
        +                                 long seed)
        +
        Hash a long[] and long seed.
        +
        +
        Parameters:
        +
        data - the input long array.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a long[2].
        +
        +
      • +
      + + + +
        +
      • +

        hashToLongs

        +
        public static long[] hashToLongs​(int[] data,
        +                                 long seed)
        +
        Hash a int[] and long seed.
        +
        +
        Parameters:
        +
        data - the input int array.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a long[2].
        +
        +
      • +
      + + + +
        +
      • +

        hashToLongs

        +
        public static long[] hashToLongs​(char[] data,
        +                                 long seed)
        +
        Hash a char[] and long seed.
        +
        +
        Parameters:
        +
        data - the input char array.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a long[2].
        +
        +
      • +
      + + + +
        +
      • +

        hashToLongs

        +
        public static long[] hashToLongs​(byte[] data,
        +                                 long seed)
        +
        Hash a byte[] and long seed.
        +
        +
        Parameters:
        +
        data - the input byte array.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a long[2].
        +
        +
      • +
      + + + +
        +
      • +

        hashToLongs

        +
        public static long[] hashToLongs​(double datum,
        +                                 long seed)
        +
        Hash a double and long seed.
        +
        +
        Parameters:
        +
        datum - the input double.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a long[2].
        +
        +
      • +
      + + + +
        +
      • +

        hashToLongs

        +
        public static long[] hashToLongs​(String datum,
        +                                 long seed)
        +
        Hash a String and long seed.
        +
        +
        Parameters:
        +
        datum - the input String.
        +
        seed - A long valued seed.
        +
        Returns:
        +
        The 128-bit hash as a long[2].
        +
        +
      • +
      + + + +
        +
      • +

        asInt

        +
        public static int asInt​(long[] data,
        +                        int n)
        +
        Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
        +
        +
        Parameters:
        +
        data - the input long array.
        +
        n - The upper exclusive bound of the integers produced. Must be > 1.
        +
        Returns:
        +
        deterministic uniform random integer
        +
        +
      • +
      + + + +
        +
      • +

        asInt

        +
        public static int asInt​(int[] data,
        +                        int n)
        +
        Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
        +
        +
        Parameters:
        +
        data - the input int array.
        +
        n - The upper exclusive bound of the integers produced. Must be > 1.
        +
        Returns:
        +
        deterministic uniform random integer
        +
        +
      • +
      + + + +
        +
      • +

        asInt

        +
        public static int asInt​(byte[] data,
        +                        int n)
        +
        Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input data.
        +
        +
        Parameters:
        +
        data - the input byte array.
        +
        n - The upper exclusive bound of the integers produced. Must be > 1.
        +
        Returns:
        +
        deterministic uniform random integer.
        +
        +
      • +
      + + + +
        +
      • +

        asInt

        +
        public static int asInt​(long datum,
        +                        int n)
        +
        Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input datum.
        +
        +
        Parameters:
        +
        datum - the input long
        +
        n - The upper exclusive bound of the integers produced. Must be > 1.
        +
        Returns:
        +
        deterministic uniform random integer
        +
        +
      • +
      + + + +
        +
      • +

        asInt

        +
        public static int asInt​(double datum,
        +                        int n)
        +
        Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input double.
        +
        +
        Parameters:
        +
        datum - the given double.
        +
        n - The upper exclusive bound of the integers produced. Must be > 1.
        +
        Returns:
        +
        deterministic uniform random integer
        +
        +
      • +
      + + + +
        +
      • +

        asInt

        +
        public static int asInt​(String datum,
        +                        int n)
        +
        Returns a deterministic uniform random integer between zero (inclusive) and + n (exclusive) given the input datum.
        +
        +
        Parameters:
        +
        datum - the given String.
        +
        n - The upper exclusive bound of the integers produced. Must be > 1.
        +
        Returns:
        +
        deterministic uniform random integer
        +
        +
      • +
      + + + +
        +
      • +

        asDouble

        +
        public static double asDouble​(long[] hash)
        +
        Returns a uniform random double with a minimum inclusive value of zero and a maximum exclusive + value of 1.0. + +

        The double values produced are only as random as the MurmurHash3 algorithm, which may be + adequate for many applications. However, if you are looking for high guarantees of randomness + you should turn to more sophisticated random generators such as Mersenne Twister or Well + algorithms.

        +
        +
        Parameters:
        +
        hash - The output of the MurmurHash3.
        +
        Returns:
        +
        the uniform random double.
        +
        +
      • +
      + + + +
        +
      • +

        modulo

        +
        public static int modulo​(long h0,
        +                         long h1,
        +                         int divisor)
        +
        Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the + divisor.
        +
        +
        Parameters:
        +
        h0 - The lower 64-bits of the 128-bit MurmurHash3 hash.
        +
        h1 - The upper 64-bits of the 128-bit MurmurHash3 hash.
        +
        divisor - Must be positive and greater than zero.
        +
        Returns:
        +
        the modulo result.
        +
        +
      • +
      + + + +
        +
      • +

        modulo

        +
        public static int modulo​(long[] hash,
        +                         int divisor)
        +
        Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the + divisor.
        +
        +
        Parameters:
        +
        hash - The size 2 long array from the MurmurHash3.
        +
        divisor - Must be positive and greater than zero.
        +
        Returns:
        +
        the modulo result
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/XxHash.html b/docs/5.0.X/org/apache/datasketches/hash/XxHash.html new file mode 100644 index 000000000..ed7f97617 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/XxHash.html @@ -0,0 +1,361 @@ + + + + + +XxHash (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class XxHash

+
+
+ +
+
    +
  • +
    +
    public class XxHash
    +extends Object
    +
    The XxHash is a fast, non-cryptographic, 64-bit hash function that has + excellent avalanche and 2-way bit independence properties. + +

    This class wraps the + Memory Component XxHash + implementation.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        XxHash

        +
        public XxHash()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        hash

        +
        public static long hash​(org.apache.datasketches.memory.Memory mem,
        +                        long offsetBytes,
        +                        long lengthBytes,
        +                        long seed)
        +
        Compute the hash of the given Memory object.
        +
        +
        Parameters:
        +
        mem - The given Memory object
        +
        offsetBytes - Starting at this offset in bytes
        +
        lengthBytes - Continuing for this number of bytes
        +
        seed - use this seed for the hash function
        +
        Returns:
        +
        return the resulting 64-bit hash value.
        +
        +
      • +
      + + + +
        +
      • +

        hash

        +
        public static long hash​(long in,
        +                        long seed)
        +
        Returns a 64-bit hash.
        +
        +
        Parameters:
        +
        in - a long
        +
        seed - A long valued seed.
        +
        Returns:
        +
        the hash
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3.html b/docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3.html new file mode 100644 index 000000000..8e331b0f4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.hash.MurmurHash3 (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.hash.MurmurHash3

+
+
No usage of org.apache.datasketches.hash.MurmurHash3
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3Adaptor.html b/docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3Adaptor.html new file mode 100644 index 000000000..39ba925ce --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/class-use/MurmurHash3Adaptor.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.hash.MurmurHash3Adaptor (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.hash.MurmurHash3Adaptor

+
+
No usage of org.apache.datasketches.hash.MurmurHash3Adaptor
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/class-use/XxHash.html b/docs/5.0.X/org/apache/datasketches/hash/class-use/XxHash.html new file mode 100644 index 000000000..be49bf3c9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/class-use/XxHash.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.hash.XxHash (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.hash.XxHash

+
+
No usage of org.apache.datasketches.hash.XxHash
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/package-summary.html b/docs/5.0.X/org/apache/datasketches/hash/package-summary.html new file mode 100644 index 000000000..42a2948d1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/package-summary.html @@ -0,0 +1,195 @@ + + + + + +org.apache.datasketches.hash (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.hash

+
+
+
+ + +

The hash package contains a high-performing and extended Java implementations + of Austin Appleby's 128-bit MurmurHash3 hash function originally coded in C. + This core MurmurHash3.java class is used throughout many of the sketch classes for consistency + and as long as the user specifies the same seed will result in coordinated hash operations. + This package also contains an adaptor class that extends the basic class with more functions + commonly associated with hashing. +

+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    MurmurHash3 +
    + The MurmurHash3 is a fast, non-cryptographic, 128-bit hash function that has + excellent avalanche and 2-way bit independence properties.
    +
    MurmurHash3Adaptor +
    A general purpose wrapper for the MurmurHash3.
    +
    XxHash +
    The XxHash is a fast, non-cryptographic, 64-bit hash function that has + excellent avalanche and 2-way bit independence properties.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/package-tree.html b/docs/5.0.X/org/apache/datasketches/hash/package-tree.html new file mode 100644 index 000000000..c96c75dce --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/package-tree.html @@ -0,0 +1,166 @@ + + + + + +org.apache.datasketches.hash Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.hash

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hash/package-use.html b/docs/5.0.X/org/apache/datasketches/hash/package-use.html new file mode 100644 index 000000000..adb4f878d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hash/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package org.apache.datasketches.hash (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.hash

+
+
No usage of org.apache.datasketches.hash
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/HllSketch.html b/docs/5.0.X/org/apache/datasketches/hll/HllSketch.html new file mode 100644 index 000000000..4f5240691 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/HllSketch.html @@ -0,0 +1,1513 @@ + + + + + +HllSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class HllSketch

+
+
+ +
+
    +
  • +
    +
    public class HllSketch
    +extends Object
    +
    The HllSketch is actually a collection of compact implementations of Phillipe Flajolet’s HyperLogLog (HLL) + sketch but with significantly improved error behavior and excellent speed performance. + +

    If the use case for sketching is primarily counting uniques and merging, the HLL sketch is the 2nd highest + performing in terms of accuracy for storage space consumed in the DataSketches library + (the new CPC sketch developed by Kevin J. Lang now beats HLL in terms of accuracy / space). + For large counts, HLL sketches can be 2 to 8 times smaller for the same accuracy than the DataSketches Theta + Sketches when serialized, but the Theta sketches can do set intersections and differences while HLL and CPC cannot. + The CPC sketch and HLL share similar use cases, but the CPC sketch is about 30 to 40% smaller than the HLL sketch + when serialized and larger than the HLL when active in memory. Choose your weapons!

    + +

    A new HLL sketch is created with a simple constructor:

    +
    
    + int lgK = 12; //This is log-base2 of k, so k = 4096. lgK can be from 4 to 21
    + HllSketch sketch = new HllSketch(lgK); //TgtHllType.HLL_4 is the default
    + //OR
    + HllSketch sketch = new HllSketch(lgK, TgtHllType.HLL_6);
    + //OR
    + HllSketch sketch = new HllSketch(lgK, TgtHllType.HLL_8);
    + 
    + +

    All three different sketch types are targets in that the sketches start out in a warm-up mode that is small in + size and gradually grows as needed until the full HLL array is allocated. The HLL_4, HLL_6 and HLL_8 represent + different levels of compression of the final HLL array where the 4, 6 and 8 refer to the number of bits each + bucket of the HLL array is compressed down to. + The HLL_4 is the most compressed but generally slower than the other two, especially during union operations.

    + +

    All three types share the same API. Updating the HllSketch is very simple:

    + +
    
    + long n = 1000000;
    + for (int i = 0; i < n; i++) {
    +   sketch.update(i);
    + }
    + 
    + +

    Each of the presented integers above are first hashed into 128-bit hash values that are used by the sketch + HLL algorithm, so the above loop is essentially equivalent to using a random number generator initialized with a + seed so that the sequence is deterministic and random.

    + +

    Obtaining the cardinality results from the sketch is also simple:

    + +
    
    + double estimate = sketch.getEstimate();
    + double estUB = sketch.getUpperBound(1.0); //the upper bound at 1 standard deviation.
    + double estLB = sketch.getLowerBound(1.0); //the lower bound at 1 standard deviation.
    + //OR
    + System.out.println(sketch.toString()); //will output a summary of the sketch.
    + 
    + +

    Which produces a console output something like this:

    + +
    
    + ### HLL SKETCH SUMMARY:
    +   Log Config K   : 12
    +   Hll Target     : HLL_4
    +   Current Mode   : HLL
    +   LB             : 977348.7024560181
    +   Estimate       : 990116.6007366662
    +   UB             : 1003222.5095308956
    +   OutOfOrder Flag: false
    +   CurMin         : 5
    +   NumAtCurMin    : 1
    +   HipAccum       : 990116.6007366662
    + 
    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static TgtHllTypeDEFAULT_HLL_TYPE +
      The default HLL-TYPE is HLL_4
      +
      static intDEFAULT_LG_K +
      The default Log_base2 of K
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      HllSketch() +
      Constructs a new on-heap sketch with the default lgConfigK and tgtHllType.
      +
      HllSketch​(int lgConfigK) +
      Constructs a new on-heap sketch with the default tgtHllType.
      +
      HllSketch​(int lgConfigK, + TgtHllType tgtHllType) +
      Constructs a new on-heap sketch with the type of HLL sketch to configure.
      +
      HllSketch​(int lgConfigK, + TgtHllType tgtHllType, + org.apache.datasketches.memory.WritableMemory dstMem) +
      Constructs a new sketch with the type of HLL sketch to configure and the given + WritableMemory as the destination for the sketch.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      HllSketchcopy() +
      Return a copy of this sketch onto the Java heap.
      +
      HllSketchcopyAs​(TgtHllType tgtHllType) +
      Return a deep copy of this sketch onto the Java heap with the specified TgtHllType.
      +
      intgetCompactSerializationBytes() +
      Gets the size in bytes of the current sketch when serialized using + toCompactByteArray().
      +
      doublegetCompositeEstimate() +
      This is less accurate than the getEstimate() method and is automatically used + when the sketch has gone through union operations where the more accurate HIP estimator + cannot be used.
      +
      doublegetEstimate() +
      Return the cardinality estimate
      +
      intgetLgConfigK() +
      Gets the lgConfigK.
      +
      doublegetLowerBound​(int numStdDev) +
      Gets the approximate lower error bound given the specified number of Standard Deviations.
      +
      static intgetMaxUpdatableSerializationBytes​(int lgConfigK, + TgtHllType tgtHllType) +
      Returns the maximum size in bytes that this sketch can grow to given lgConfigK.
      +
      static doublegetRelErr​(boolean upperBound, + boolean oooFlag, + int lgConfigK, + int numStdDev) +
      Gets the current (approximate) Relative Error (RE) asymptotic values given several + parameters.
      +
      static intgetSerializationVersion() +
      Returns the current serialization version.
      +
      static intgetSerializationVersion​(org.apache.datasketches.memory.Memory mem) +
      Returns the current serialization version of the given Memory.
      +
      TgtHllTypegetTgtHllType() +
      Gets the TgtHllType
      +
      intgetUpdatableSerializationBytes() +
      Gets the size in bytes of the current sketch when serialized using + toUpdatableByteArray().
      +
      doublegetUpperBound​(int numStdDev) +
      Gets the approximate upper error bound given the specified number of Standard Deviations.
      +
      static HllSketchheapify​(byte[] byteArray) +
      Heapify the given byte array, which must be a valid HllSketch image and may have data.
      +
      static HllSketchheapify​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify the given Memory, which must be a valid HllSketch image and may have data.
      +
      booleanisCompact() +
      Returns true if the backing memory of this sketch is in compact form.
      +
      booleanisEmpty() +
      Returns true if empty
      +
      booleanisEstimationMode() +
      This HLL family of sketches and operators is always estimating, even for very small values.
      +
      booleanisMemory() +
      Returns true if this sketch was created using Memory.
      +
      booleanisOffHeap() +
      Returns true if the backing memory for this sketch is off-heap.
      +
      booleanisSameResource​(org.apache.datasketches.memory.Memory mem) +
      Returns true if the given Memory refers to the same underlying resource as this sketch.
      +
      voidreset() +
      Resets to empty, but does not change the configured values of lgConfigK and tgtHllType.
      +
      byte[]toCompactByteArray() +
      Serializes this sketch as a byte array in compact form.
      +
      StringtoString() +
      Human readable summary as a string.
      +
      StringtoString​(boolean summary, + boolean detail, + boolean auxDetail) +
      Human readable summary with optional detail.
      +
      StringtoString​(boolean summary, + boolean detail, + boolean auxDetail, + boolean all) +
      Human readable summary with optional detail
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of an HllSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of an HllSketch.
      +
      byte[]toUpdatableByteArray() +
      Serializes this sketch as a byte array in an updatable form.
      +
      voidupdate​(byte[] data) +
      Present the given byte array as a potential unique item.
      +
      voidupdate​(char[] data) +
      Present the given char array as a potential unique item.
      +
      voidupdate​(double datum) +
      Present the given double (or float) datum as a potential unique item.
      +
      voidupdate​(int[] data) +
      Present the given integer array as a potential unique item.
      +
      voidupdate​(long datum) +
      Present the given long as a potential unique item.
      +
      voidupdate​(long[] data) +
      Present the given long array as a potential unique item.
      +
      voidupdate​(String datum) +
      Present the given String as a potential unique item.
      +
      voidupdate​(ByteBuffer data) +
      Present the given byte buffer as a potential unique item.
      +
      static HllSketchwrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wraps the given read-only Memory that must be a image of a valid sketch, + which may be in compact or updatable form, and should have data.
      +
      static HllSketchwritableWrap​(org.apache.datasketches.memory.WritableMemory srcWmem) +
      Wraps the given WritableMemory, which must be a image of a valid updatable sketch, + and may have data.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_LG_K

        +
        public static final int DEFAULT_LG_K
        +
        The default Log_base2 of K
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_HLL_TYPE

        +
        public static final TgtHllType DEFAULT_HLL_TYPE
        +
        The default HLL-TYPE is HLL_4
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HllSketch

        +
        public HllSketch()
        +
        Constructs a new on-heap sketch with the default lgConfigK and tgtHllType.
        +
      • +
      + + + +
        +
      • +

        HllSketch

        +
        public HllSketch​(int lgConfigK)
        +
        Constructs a new on-heap sketch with the default tgtHllType.
        +
        +
        Parameters:
        +
        lgConfigK - The Log2 of K for the target HLL sketch. This value must be + between 4 and 21 inclusively.
        +
        +
      • +
      + + + +
        +
      • +

        HllSketch

        +
        public HllSketch​(int lgConfigK,
        +                 TgtHllType tgtHllType)
        +
        Constructs a new on-heap sketch with the type of HLL sketch to configure.
        +
        +
        Parameters:
        +
        lgConfigK - The Log2 of K for the target HLL sketch. This value must be + between 4 and 21 inclusively.
        +
        tgtHllType - the desired HLL type.
        +
        +
      • +
      + + + +
        +
      • +

        HllSketch

        +
        public HllSketch​(int lgConfigK,
        +                 TgtHllType tgtHllType,
        +                 org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Constructs a new sketch with the type of HLL sketch to configure and the given + WritableMemory as the destination for the sketch. This WritableMemory is usually configured + for off-heap memory. What remains on the java heap is a thin wrapper object that reads and + writes to the given WritableMemory. + +

        The given dstMem is checked for the required capacity as determined by + getMaxUpdatableSerializationBytes(int, TgtHllType).

        +
        +
        Parameters:
        +
        lgConfigK - The Log2 of K for the target HLL sketch. This value must be + between 4 and 21 inclusively.
        +
        tgtHllType - the desired HLL type.
        +
        dstMem - the destination memory for the sketch.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static final HllSketch heapify​(byte[] byteArray)
        +
        Heapify the given byte array, which must be a valid HllSketch image and may have data.
        +
        +
        Parameters:
        +
        byteArray - the given byte array. This byteArray is not modified and is not retained + by the on-heap sketch.
        +
        Returns:
        +
        an HllSketch on the java heap.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static final HllSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Heapify the given Memory, which must be a valid HllSketch image and may have data.
        +
        +
        Parameters:
        +
        srcMem - the given Memory, which is read-only.
        +
        Returns:
        +
        an HllSketch on the java heap.
        +
        +
      • +
      + + + +
        +
      • +

        writableWrap

        +
        public static final HllSketch writableWrap​(org.apache.datasketches.memory.WritableMemory srcWmem)
        +
        Wraps the given WritableMemory, which must be a image of a valid updatable sketch, + and may have data. What remains on the java heap is a + thin wrapper object that reads and writes to the given WritableMemory, which, depending on + how the user configures the WritableMemory, may actually reside on the Java heap or off-heap. + +

        The given dstMem is checked for the required capacity as determined by + getMaxUpdatableSerializationBytes(int, TgtHllType).

        +
        +
        Parameters:
        +
        srcWmem - an writable image of a valid source sketch with data.
        +
        Returns:
        +
        an HllSketch where the sketch data is in the given dstMem.
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static final HllSketch wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wraps the given read-only Memory that must be a image of a valid sketch, + which may be in compact or updatable form, and should have data. Any attempt to update the + given source Memory will throw an exception.
        +
        +
        Parameters:
        +
        srcMem - a read-only image of a valid source sketch.
        +
        Returns:
        +
        an HllSketch, where the read-only data of the sketch is in the given srcMem.
        +
        +
      • +
      + + + +
        +
      • +

        copy

        +
        public HllSketch copy()
        +
        Return a copy of this sketch onto the Java heap.
        +
        +
        Returns:
        +
        a copy of this sketch onto the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        copyAs

        +
        public HllSketch copyAs​(TgtHllType tgtHllType)
        +
        Return a deep copy of this sketch onto the Java heap with the specified TgtHllType.
        +
        +
        Parameters:
        +
        tgtHllType - the TgtHllType enum
        +
        Returns:
        +
        a deep copy of this sketch with the specified TgtHllType.
        +
        +
      • +
      + + + +
        +
      • +

        getCompositeEstimate

        +
        public double getCompositeEstimate()
        +
        This is less accurate than the getEstimate() method and is automatically used + when the sketch has gone through union operations where the more accurate HIP estimator + cannot be used. + This is made public only for error characterization software that exists in separate + packages and is not intended for normal use.
        +
        +
        Returns:
        +
        the composite estimate
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        Return the cardinality estimate
        +
        +
        Returns:
        +
        the cardinality estimate
        +
        +
      • +
      + + + +
        +
      • +

        getLgConfigK

        +
        public int getLgConfigK()
        +
        Gets the lgConfigK.
        +
        +
        Returns:
        +
        the lgConfigK.
        +
        +
      • +
      + + + +
        +
      • +

        getCompactSerializationBytes

        +
        public int getCompactSerializationBytes()
        +
        Gets the size in bytes of the current sketch when serialized using + toCompactByteArray().
        +
        +
        Returns:
        +
        the size in bytes of the current sketch when serialized using + toCompactByteArray().
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int numStdDev)
        +
        Gets the approximate lower error bound given the specified number of Standard Deviations.
        +
        +
        Parameters:
        +
        numStdDev - This must be an integer between 1 and 3, inclusive. + See Number of Standard Deviations
        +
        Returns:
        +
        the lower bound.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxUpdatableSerializationBytes

        +
        public static final int getMaxUpdatableSerializationBytes​(int lgConfigK,
        +                                                          TgtHllType tgtHllType)
        +
        Returns the maximum size in bytes that this sketch can grow to given lgConfigK. + However, for the HLL_4 sketch type, this value can be exceeded in extremely rare cases. + If exceeded, it will be larger by only a few percent.
        +
        +
        Parameters:
        +
        lgConfigK - The Log2 of K for the target HLL sketch. This value must be + between 4 and 21 inclusively.
        +
        tgtHllType - the desired Hll type
        +
        Returns:
        +
        the maximum size in bytes that this sketch can grow to.
        +
        +
      • +
      + + + +
        +
      • +

        getTgtHllType

        +
        public TgtHllType getTgtHllType()
        +
        Gets the TgtHllType
        +
        +
        Returns:
        +
        the TgtHllType enum value
        +
        +
      • +
      + + + +
        +
      • +

        getUpdatableSerializationBytes

        +
        public int getUpdatableSerializationBytes()
        +
        Gets the size in bytes of the current sketch when serialized using + toUpdatableByteArray().
        +
        +
        Returns:
        +
        the size in bytes of the current sketch when serialized using + toUpdatableByteArray().
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int numStdDev)
        +
        Gets the approximate upper error bound given the specified number of Standard Deviations.
        +
        +
        Parameters:
        +
        numStdDev - This must be an integer between 1 and 3, inclusive. + Number of Standard Deviations
        +
        Returns:
        +
        the upper bound.
        +
        +
      • +
      + + + +
        +
      • +

        isCompact

        +
        public boolean isCompact()
        +
        Returns true if the backing memory of this sketch is in compact form.
        +
        +
        Returns:
        +
        true if the backing memory of this sketch is in compact form.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Returns true if empty
        +
        +
        Returns:
        +
        true if empty
        +
        +
      • +
      + + + +
        +
      • +

        isMemory

        +
        public boolean isMemory()
        +
        Returns true if this sketch was created using Memory.
        +
        +
        Returns:
        +
        true if this sketch was created using Memory.
        +
        +
      • +
      + + + +
        +
      • +

        isOffHeap

        +
        public boolean isOffHeap()
        +
        Returns true if the backing memory for this sketch is off-heap.
        +
        +
        Returns:
        +
        true if the backing memory for this sketch is off-heap.
        +
        +
      • +
      + + + +
        +
      • +

        isSameResource

        +
        public boolean isSameResource​(org.apache.datasketches.memory.Memory mem)
        +
        Returns true if the given Memory refers to the same underlying resource as this sketch. + The capacities must be the same. If this is a region, + the region offset must also be the same. + +

        This is only relevant for HLL_4 sketches that have been configured for off-heap + using WritableMemory or Memory. For on-heap sketches or unions this will return false. + +

        It is rare, but possible, the the off-heap memory that has been allocated to an HLL_4 + sketch may not be large enough. If this should happen, the sketch makes a request for more + memory from the owner of the resource and then moves itself to this new location. This all + happens transparently to the user. This method provides a means for the user to + inquire of the sketch if it has, in fact, moved itself.

        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        true if the given Memory refers to the same underlying resource as this sketch or + union.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets to empty, but does not change the configured values of lgConfigK and tgtHllType.
        +
      • +
      + + + +
        +
      • +

        toCompactByteArray

        +
        public byte[] toCompactByteArray()
        +
        Serializes this sketch as a byte array in compact form. The compact form is smaller in size + than the updatable form and read-only. It can be used in union operations as follows: +
        
        +     Union union; HllSketch sk, sk2;
        +     int lgK = 12;
        +     sk = new HllSketch(lgK, TgtHllType.HLL_4); //can be 4, 6, or 8
        +     for (int i = 0; i < (2 << lgK); i++) { sk.update(i); }
        +     byte[] arr = HllSketch.toCompactByteArray();
        +     //...
        +     union = Union.heapify(arr); //initializes the union using data from the array.
        +     //OR, if used in an off-heap environment:
        +     union = Union.heapify(Memory.wrap(arr)); //same as above, except from Memory object.
        +
        +     //To recover an updatable heap sketch:
        +     sk2 = HllSketch.heapify(arr);
        +     //OR, if used in an off-heap environment:
        +     sk2 = HllSketch.heapify(Memory.wrap(arr));
        + 
        + +

        The sketch "wrapping" operation skips actual deserialization thus is quite fast. However, + any attempt to update the derived HllSketch will result in a Read-only exception.

        + +

        Note that in some cases, based on the state of the sketch, the compact form is + indistiguishable from the updatable form. In these cases the updatable form is returned + and the compact flag bit will not be set.

        +
        +
        Returns:
        +
        this sketch as a compact byte array.
        +
        +
      • +
      + + + +
        +
      • +

        toUpdatableByteArray

        +
        public byte[] toUpdatableByteArray()
        +
        Serializes this sketch as a byte array in an updatable form. The updatable form is larger than + the compact form. The use of this form is primarily in environments that support updating + sketches in off-heap memory. If the sketch is constructed using HLL_8, sketch updating and + union updating operations can actually occur in WritableMemory, which can be off-heap: +
        
        +     Union union; HllSketch sk;
        +     int lgK = 12;
        +     sk = new HllSketch(lgK, TgtHllType.HLL_8) //must be 8
        +     for (int i = 0; i < (2 << lgK); i++) { sk.update(i); }
        +     byte[] arr = sk.toUpdatableByteArray();
        +     WritableMemory wmem = WritableMemory.wrap(arr);
        +     //...
        +     union = Union.writableWrap(wmem); //no deserialization!
        + 
        +
        +
        Returns:
        +
        this sketch as an updatable byte array.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean summary,
        +                       boolean detail,
        +                       boolean auxDetail,
        +                       boolean all)
        +
        Human readable summary with optional detail
        +
        +
        Parameters:
        +
        summary - if true, output the sketch summary
        +
        detail - if true, output the internal data array
        +
        auxDetail - if true, output the internal Aux array, if it exists.
        +
        all - if true, outputs all entries including empty ones
        +
        Returns:
        +
        human readable string with optional detail.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of an HllSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of an HllSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of an HllSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory object
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of an HllSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getSerializationVersion

        +
        public static final int getSerializationVersion()
        +
        Returns the current serialization version.
        +
        +
        Returns:
        +
        the current serialization version.
        +
        +
      • +
      + + + +
        +
      • +

        getSerializationVersion

        +
        public static final int getSerializationVersion​(org.apache.datasketches.memory.Memory mem)
        +
        Returns the current serialization version of the given Memory.
        +
        +
        Parameters:
        +
        mem - the given Memory containing a serialized HllSketch image.
        +
        Returns:
        +
        the current serialization version.
        +
        +
      • +
      + + + +
        +
      • +

        getRelErr

        +
        public static double getRelErr​(boolean upperBound,
        +                               boolean oooFlag,
        +                               int lgConfigK,
        +                               int numStdDev)
        +
        Gets the current (approximate) Relative Error (RE) asymptotic values given several + parameters. This is used primarily for testing.
        +
        +
        Parameters:
        +
        upperBound - return the RE for the Upper Bound, otherwise for the Lower Bound.
        +
        oooFlag - set true if the sketch is the result of a non qualifying union operation.
        +
        lgConfigK - the configured value for the sketch.
        +
        numStdDev - the given number of Standard Deviations. This must be an integer between + 1 and 3, inclusive. + Number of Standard Deviations
        +
        Returns:
        +
        the current (approximate) RelativeError
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        This HLL family of sketches and operators is always estimating, even for very small values.
        +
        +
        Returns:
        +
        true
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Human readable summary as a string.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        Human readable summary as a string.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean summary,
        +                       boolean detail,
        +                       boolean auxDetail)
        +
        Human readable summary with optional detail. Does not list empty entries.
        +
        +
        Parameters:
        +
        summary - if true, output the sketch summary
        +
        detail - if true, output the internal data array
        +
        auxDetail - if true, output the internal Aux array, if it exists.
        +
        Returns:
        +
        human readable string with optional detail.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long datum)
        +
        Present the given long as a potential unique item.
        +
        +
        Parameters:
        +
        datum - The given long datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(double datum)
        +
        Present the given double (or float) datum as a potential unique item. + The double will be converted to a long using Double.doubleToLongBits(datum), + which normalizes all NaN values to a single NaN representation. + Plus and minus zero will be normalized to plus zero. + The special floating-point values NaN and +/- Infinity are treated as distinct.
        +
        +
        Parameters:
        +
        datum - The given double datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(String datum)
        +
        Present the given String as a potential unique item. + The string is converted to a byte array using UTF8 encoding. + If the string is null or empty no update attempt is made and the method returns. + +

        Note: About 2X faster performance can be obtained by first converting the String to a + char[] and updating the sketch with that. This bypasses the complexity of the Java UTF_8 + encoding. This, of course, will not produce the same internal hash values as updating directly + with a String. So be consistent! Unioning two sketches, one fed with strings and the other + fed with char[] will be meaningless. +

        +
        +
        Parameters:
        +
        datum - The given String.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(ByteBuffer data)
        +
        Present the given byte buffer as a potential unique item. + Bytes are read from the current position of the buffer until its limit. + If the byte buffer is null or has no bytes remaining, no update attempt is made and the method returns. + +

        This method will not modify the position, mark, limit, or byte order of the buffer.

        + +

        Little-endian order is preferred, but not required. This method may perform better if the provided byte + buffer is in little-endian order.

        +
        +
        Parameters:
        +
        data - The given byte buffer.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(byte[] data)
        +
        Present the given byte array as a potential unique item. + If the byte array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given byte array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(char[] data)
        +
        Present the given char array as a potential unique item. + If the char array is null or empty no update attempt is made and the method returns. + +

        Note: this will not produce the same output hash values as the update(String) + method but will be a little faster as it avoids the complexity of the UTF8 encoding.

        +
        +
        Parameters:
        +
        data - The given char array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(int[] data)
        +
        Present the given integer array as a potential unique item. + If the integer array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given int array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long[] data)
        +
        Present the given long array as a potential unique item. + If the long array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given long array.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/TgtHllType.html b/docs/5.0.X/org/apache/datasketches/hll/TgtHllType.html new file mode 100644 index 000000000..fa65f6fd1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/TgtHllType.html @@ -0,0 +1,438 @@ + + + + + +TgtHllType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum TgtHllType

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<TgtHllType>
    +
    +
    +
    public enum TgtHllType
    +extends Enum<TgtHllType>
    +
    Specifies the target type of HLL sketch to be created. It is a target in that the actual + allocation of the HLL array is deferred until sufficient number of items have been received by + the warm-up phases. + +

    These three target types are isomorphic representations of the same underlying HLL algorithm. + Thus, given the same value of lgConfigK and the same input, all three HLL target types + will produce identical estimates and have identical error distributions.

    + +

    The memory (and also the serialization) of the sketch during this early warmup phase starts + out very small (8 bytes, when empty) and then grows in increments of 4 bytes as required + until the full HLL array is allocated. This transition point occurs at about 10% of K for + sketches where lgConfigK is > 8.

    + +
      +
    • HLL 8 This uses an 8-bit byte per HLL bucket. It is generally the + fastest in terms of update time, but has the largest storage footprint of about + K bytes.
    • + +
    • HLL 6 This uses a 6-bit field per HLL bucket. It is the generally the next fastest + in terms of update time with a storage footprint of about 3/4 * K bytes.
    • + +
    • HLL 4 This uses a 4-bit field per HLL bucket and for large counts may require + the use of a small internal auxiliary array for storing statistical exceptions, which are rare. + For the values of lgConfigK > 13 (K = 8192), + this additional array adds about 3% to the overall storage. It is generally the slowest in + terms of update time, but has the smallest storage footprint of about + K/2 * 1.03 bytes.
    • +
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static TgtHllType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (TgtHllType c : TgtHllType.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static TgtHllType valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        fromOrdinal

        +
        public static final TgtHllType fromOrdinal​(int typeId)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/Union.html b/docs/5.0.X/org/apache/datasketches/hll/Union.html new file mode 100644 index 000000000..2c72486ae --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/Union.html @@ -0,0 +1,1311 @@ + + + + + +Union (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Union

+
+
+ +
+
    +
  • +
    +
    public class Union
    +extends Object
    +
    This performs union operations for all HllSketches. This union operator can be configured to be + on or off heap. The source sketch given to this union using the update(HllSketch) can + be configured with any precision value lgConfigK (from 4 to 21), any TgtHllType + (HLL_4, HLL_6, HLL_8), and either on or off-heap; and it can be in either of the sparse modes + (LIST or SET), or the dense mode (HLL). + +

    Although the API for this union operator parallels many of the methods of the + HllSketch, the behavior of the union operator has some fundamental differences.

    + +

    First, this union operator is configured with a lgMaxK instead of the normal + lgConfigK. Generally, this union operator will inherit the lowest lgConfigK + less than lgMaxK that it has seen. However, the lgConfigK of incoming sketches that + are still in sparse are ignored. The lgMaxK provides the user the ability to specify the + largest maximum size for the union operation. + +

    Second, the user cannot specify the TgtHllType as an input parameter to the union. + Instead, it is specified for the sketch returned with getResult(TgtHllType). + +

    The following graph illustrates the HLL Merge speed.

    + +

    HLL LgK12 Union Speed

    + This graph illustrates the relative merging speed of the HLL 4,6,8 Java HLL sketches compared to + the DataSketches C++ implementations of the same sketches. With this particular test (merging 32 relative large + sketches together), the Java HLL 8 is the fastest and the Java HLL 4 the slowest, with a mixed cluster in the middle. + Union / Merging speed is somewhat difficult to measure as the performance is very dependent on the mix of sketch + sizes (and types) you are merging. So your mileage will vary! + +

    For a complete example of using the Union operator + see Union Example.

    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Union() +
      Construct this Union operator with the default maximum log-base-2 of K.
      +
      Union​(int lgMaxK) +
      Construct this Union operator with a given maximum log-base-2 of K.
      +
      Union​(int lgMaxK, + org.apache.datasketches.memory.WritableMemory dstWmem) +
      Construct this Union operator with a given maximum log-base-2 of K and the given + WritableMemory as the destination for this Union.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      intgetCompactSerializationBytes() +
      Gets the size in bytes of the current sketch when serialized using + toCompactByteArray().
      +
      doublegetCompositeEstimate() +
      This is less accurate than the getEstimate() method and is automatically used + when the sketch has gone through union operations where the more accurate HIP estimator + cannot be used.
      +
      doublegetEstimate() +
      Return the cardinality estimate
      +
      intgetLgConfigK() +
      Gets the effective lgConfigK for the union operator, which may be less than + lgMaxK.
      +
      doublegetLowerBound​(int numStdDev) +
      Gets the approximate lower error bound given the specified number of Standard Deviations.
      +
      static intgetMaxSerializationBytes​(int lgK) +
      Returns the maximum size in bytes that this union operator can grow to given a lgK.
      +
      static doublegetRelErr​(boolean upperBound, + boolean oooFlag, + int lgConfigK, + int numStdDev) +
      Gets the current (approximate) Relative Error (RE) asymptotic values given several + parameters.
      +
      HllSketchgetResult() +
      Return the result of this union operator as an HLL_4 sketch.
      +
      HllSketchgetResult​(TgtHllType tgtHllType) +
      Return the result of this union operator with the specified TgtHllType
      +
      static intgetSerializationVersion() +
      Returns the current serialization version.
      +
      static intgetSerializationVersion​(org.apache.datasketches.memory.Memory mem) +
      Returns the current serialization version of the given Memory.
      +
      TgtHllTypegetTgtHllType() +
      Gets the TgtHllType
      +
      intgetUpdatableSerializationBytes() +
      Gets the size in bytes of the current sketch when serialized using + toUpdatableByteArray().
      +
      doublegetUpperBound​(int numStdDev) +
      Gets the approximate upper error bound given the specified number of Standard Deviations.
      +
      static Unionheapify​(byte[] byteArray) +
      Construct a union operator populated with the given byte array image of an HllSketch.
      +
      static Unionheapify​(org.apache.datasketches.memory.Memory mem) +
      Construct a union operator populated with the given Memory image of an HllSketch.
      +
      booleanisCompact() +
      Returns true if the backing memory of this sketch is in compact form.
      +
      booleanisEmpty() +
      Returns true if empty
      +
      booleanisEstimationMode() +
      This HLL family of sketches and operators is always estimating, even for very small values.
      +
      booleanisMemory() +
      Returns true if this sketch was created using Memory.
      +
      booleanisOffHeap() +
      Returns true if the backing memory for this sketch is off-heap.
      +
      booleanisSameResource​(org.apache.datasketches.memory.Memory mem) +
      Returns true if the given Memory refers to the same underlying resource as this sketch.
      +
      voidreset() +
      Resets to empty and retains the current lgK, but does not change the configured value of + lgMaxK.
      +
      byte[]toCompactByteArray() +
      Gets the serialization of this union operator as a byte array in compact form, which is + designed to be heapified only.
      +
      StringtoString() +
      Human readable summary as a string.
      +
      StringtoString​(boolean summary, + boolean detail, + boolean auxDetail) +
      Human readable summary with optional detail.
      +
      StringtoString​(boolean summary, + boolean hllDetail, + boolean auxDetail, + boolean all) +
      Human readable summary with optional detail
      +
      byte[]toUpdatableByteArray() +
      Serializes this sketch as a byte array in an updatable form.
      +
      voidupdate​(byte[] data) +
      Present the given byte array as a potential unique item.
      +
      voidupdate​(char[] data) +
      Present the given char array as a potential unique item.
      +
      voidupdate​(double datum) +
      Present the given double (or float) datum as a potential unique item.
      +
      voidupdate​(int[] data) +
      Present the given integer array as a potential unique item.
      +
      voidupdate​(long datum) +
      Present the given long as a potential unique item.
      +
      voidupdate​(long[] data) +
      Present the given long array as a potential unique item.
      +
      voidupdate​(String datum) +
      Present the given String as a potential unique item.
      +
      voidupdate​(ByteBuffer data) +
      Present the given byte buffer as a potential unique item.
      +
      voidupdate​(HllSketch sketch) +
      Update this union operator with the given sketch.
      +
      static UnionwritableWrap​(org.apache.datasketches.memory.WritableMemory srcWmem) +
      Wraps the given WritableMemory, which must be a image of a valid updatable HLL_8 sketch, + and may have data.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Union

        +
        public Union()
        +
        Construct this Union operator with the default maximum log-base-2 of K.
        +
      • +
      + + + +
        +
      • +

        Union

        +
        public Union​(int lgMaxK)
        +
        Construct this Union operator with a given maximum log-base-2 of K.
        +
        +
        Parameters:
        +
        lgMaxK - the desired maximum log-base-2 of K. This value must be + between 4 and 21 inclusively.
        +
        +
      • +
      + + + +
        +
      • +

        Union

        +
        public Union​(int lgMaxK,
        +             org.apache.datasketches.memory.WritableMemory dstWmem)
        +
        Construct this Union operator with a given maximum log-base-2 of K and the given + WritableMemory as the destination for this Union. This WritableMemory is usually configured + for off-heap memory. What remains on the java heap is a thin wrapper object that reads and + writes to the given WritableMemory. + +

        The given dstMem is checked for the required capacity as determined by + HllSketch.getMaxUpdatableSerializationBytes(int, TgtHllType).

        +
        +
        Parameters:
        +
        lgMaxK - the desired maximum log-base-2 of K. This value must be + between 4 and 21 inclusively.
        +
        dstWmem - the destination writable memory for the sketch.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static final Union heapify​(byte[] byteArray)
        +
        Construct a union operator populated with the given byte array image of an HllSketch.
        +
        +
        Parameters:
        +
        byteArray - the given byte array
        +
        Returns:
        +
        a union operator populated with the given byte array image of an HllSketch.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static final Union heapify​(org.apache.datasketches.memory.Memory mem)
        +
        Construct a union operator populated with the given Memory image of an HllSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        a union operator populated with the given Memory image of an HllSketch.
        +
        +
      • +
      + + + +
        +
      • +

        writableWrap

        +
        public static final Union writableWrap​(org.apache.datasketches.memory.WritableMemory srcWmem)
        +
        Wraps the given WritableMemory, which must be a image of a valid updatable HLL_8 sketch, + and may have data. What remains on the java heap is a + thin wrapper object that reads and writes to the given WritableMemory, which, depending on + how the user configures the WritableMemory, may actually reside on the Java heap or off-heap. + +

        The given dstMem is checked for the required capacity as determined by + HllSketch.getMaxUpdatableSerializationBytes(int, TgtHllType), and for the correct type.

        +
        +
        Parameters:
        +
        srcWmem - an writable image of a valid sketch with data.
        +
        Returns:
        +
        a Union operator where the sketch data is in the given dstMem.
        +
        +
      • +
      + + + +
        +
      • +

        getCompositeEstimate

        +
        public double getCompositeEstimate()
        +
        This is less accurate than the getEstimate() method and is automatically used + when the sketch has gone through union operations where the more accurate HIP estimator + cannot be used. + This is made public only for error characterization software that exists in separate + packages and is not intended for normal use.
        +
        +
        Returns:
        +
        the composite estimate
        +
        +
      • +
      + + + +
        +
      • +

        getCompactSerializationBytes

        +
        public int getCompactSerializationBytes()
        +
        Gets the size in bytes of the current sketch when serialized using + toCompactByteArray().
        +
        +
        Returns:
        +
        the size in bytes of the current sketch when serialized using + toCompactByteArray().
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        Return the cardinality estimate
        +
        +
        Returns:
        +
        the cardinality estimate
        +
        +
      • +
      + + + +
        +
      • +

        getLgConfigK

        +
        public int getLgConfigK()
        +
        Gets the effective lgConfigK for the union operator, which may be less than + lgMaxK.
        +
        +
        Returns:
        +
        the lgConfigK.
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int numStdDev)
        +
        Gets the approximate lower error bound given the specified number of Standard Deviations.
        +
        +
        Parameters:
        +
        numStdDev - This must be an integer between 1 and 3, inclusive. + See Number of Standard Deviations
        +
        Returns:
        +
        the lower bound.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxSerializationBytes

        +
        public static int getMaxSerializationBytes​(int lgK)
        +
        Returns the maximum size in bytes that this union operator can grow to given a lgK.
        +
        +
        Parameters:
        +
        lgK - The maximum Log2 of K for this union operator. This value must be + between 4 and 21 inclusively.
        +
        Returns:
        +
        the maximum size in bytes that this union operator can grow to.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public HllSketch getResult()
        +
        Return the result of this union operator as an HLL_4 sketch.
        +
        +
        Returns:
        +
        the result of this union operator as an HLL_4 sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public HllSketch getResult​(TgtHllType tgtHllType)
        +
        Return the result of this union operator with the specified TgtHllType
        +
        +
        Parameters:
        +
        tgtHllType - the TgtHllType enum
        +
        Returns:
        +
        the result of this union operator with the specified TgtHllType
        +
        +
      • +
      + + + +
        +
      • +

        getTgtHllType

        +
        public TgtHllType getTgtHllType()
        +
        Gets the TgtHllType
        +
        +
        Returns:
        +
        the TgtHllType enum value
        +
        +
      • +
      + + + +
        +
      • +

        getUpdatableSerializationBytes

        +
        public int getUpdatableSerializationBytes()
        +
        Gets the size in bytes of the current sketch when serialized using + toUpdatableByteArray().
        +
        +
        Returns:
        +
        the size in bytes of the current sketch when serialized using + toUpdatableByteArray().
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int numStdDev)
        +
        Gets the approximate upper error bound given the specified number of Standard Deviations.
        +
        +
        Parameters:
        +
        numStdDev - This must be an integer between 1 and 3, inclusive. + Number of Standard Deviations
        +
        Returns:
        +
        the upper bound.
        +
        +
      • +
      + + + +
        +
      • +

        isCompact

        +
        public boolean isCompact()
        +
        Returns true if the backing memory of this sketch is in compact form.
        +
        +
        Returns:
        +
        true if the backing memory of this sketch is in compact form.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Returns true if empty
        +
        +
        Returns:
        +
        true if empty
        +
        +
      • +
      + + + +
        +
      • +

        isMemory

        +
        public boolean isMemory()
        +
        Returns true if this sketch was created using Memory.
        +
        +
        Returns:
        +
        true if this sketch was created using Memory.
        +
        +
      • +
      + + + +
        +
      • +

        isOffHeap

        +
        public boolean isOffHeap()
        +
        Returns true if the backing memory for this sketch is off-heap.
        +
        +
        Returns:
        +
        true if the backing memory for this sketch is off-heap.
        +
        +
      • +
      + + + +
        +
      • +

        isSameResource

        +
        public boolean isSameResource​(org.apache.datasketches.memory.Memory mem)
        +
        Returns true if the given Memory refers to the same underlying resource as this sketch. + The capacities must be the same. If this is a region, + the region offset must also be the same. + +

        This is only relevant for HLL_4 sketches that have been configured for off-heap + using WritableMemory or Memory. For on-heap sketches or unions this will return false. + +

        It is rare, but possible, the the off-heap memory that has been allocated to an HLL_4 + sketch may not be large enough. If this should happen, the sketch makes a request for more + memory from the owner of the resource and then moves itself to this new location. This all + happens transparently to the user. This method provides a means for the user to + inquire of the sketch if it has, in fact, moved itself.

        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        true if the given Memory refers to the same underlying resource as this sketch or + union.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets to empty and retains the current lgK, but does not change the configured value of + lgMaxK.
        +
      • +
      + + + +
        +
      • +

        toCompactByteArray

        +
        public byte[] toCompactByteArray()
        +
        Gets the serialization of this union operator as a byte array in compact form, which is + designed to be heapified only. It is not directly updatable. + For the Union operator, this is the serialization of the internal state of + the union operator as a sketch.
        +
        +
        Returns:
        +
        the serialization of this union operator as a byte array.
        +
        +
      • +
      + + + +
        +
      • +

        toUpdatableByteArray

        +
        public byte[] toUpdatableByteArray()
        +
        Serializes this sketch as a byte array in an updatable form. The updatable form is larger than + the compact form. The use of this form is primarily in environments that support updating + sketches in off-heap memory. If the sketch is constructed using HLL_8, sketch updating and + union updating operations can actually occur in WritableMemory, which can be off-heap: +
        
        +     Union union; HllSketch sk;
        +     int lgK = 12;
        +     sk = new HllSketch(lgK, TgtHllType.HLL_8) //must be 8
        +     for (int i = 0; i < (2 << lgK); i++) { sk.update(i); }
        +     byte[] arr = sk.toUpdatableByteArray();
        +     WritableMemory wmem = WritableMemory.wrap(arr);
        +     //...
        +     union = Union.writableWrap(wmem); //no deserialization!
        + 
        +
        +
        Returns:
        +
        this sketch as an updatable byte array.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean summary,
        +                       boolean hllDetail,
        +                       boolean auxDetail,
        +                       boolean all)
        +
        Human readable summary with optional detail
        +
        +
        Parameters:
        +
        summary - if true, output the sketch summary
        +
        hllDetail - if true, output the internal data array
        +
        auxDetail - if true, output the internal Aux array, if it exists.
        +
        all - if true, outputs all entries including empty ones
        +
        Returns:
        +
        human readable string with optional detail.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(HllSketch sketch)
        +
        Update this union operator with the given sketch.
        +
        +
        Parameters:
        +
        sketch - the given sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getSerializationVersion

        +
        public static final int getSerializationVersion()
        +
        Returns the current serialization version.
        +
        +
        Returns:
        +
        the current serialization version.
        +
        +
      • +
      + + + +
        +
      • +

        getSerializationVersion

        +
        public static final int getSerializationVersion​(org.apache.datasketches.memory.Memory mem)
        +
        Returns the current serialization version of the given Memory.
        +
        +
        Parameters:
        +
        mem - the given Memory containing a serialized HllSketch image.
        +
        Returns:
        +
        the current serialization version.
        +
        +
      • +
      + + + +
        +
      • +

        getRelErr

        +
        public static double getRelErr​(boolean upperBound,
        +                               boolean oooFlag,
        +                               int lgConfigK,
        +                               int numStdDev)
        +
        Gets the current (approximate) Relative Error (RE) asymptotic values given several + parameters. This is used primarily for testing.
        +
        +
        Parameters:
        +
        upperBound - return the RE for the Upper Bound, otherwise for the Lower Bound.
        +
        oooFlag - set true if the sketch is the result of a non qualifying union operation.
        +
        lgConfigK - the configured value for the sketch.
        +
        numStdDev - the given number of Standard Deviations. This must be an integer between + 1 and 3, inclusive. + Number of Standard Deviations
        +
        Returns:
        +
        the current (approximate) RelativeError
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        This HLL family of sketches and operators is always estimating, even for very small values.
        +
        +
        Returns:
        +
        true
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Human readable summary as a string.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        Human readable summary as a string.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean summary,
        +                       boolean detail,
        +                       boolean auxDetail)
        +
        Human readable summary with optional detail. Does not list empty entries.
        +
        +
        Parameters:
        +
        summary - if true, output the sketch summary
        +
        detail - if true, output the internal data array
        +
        auxDetail - if true, output the internal Aux array, if it exists.
        +
        Returns:
        +
        human readable string with optional detail.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long datum)
        +
        Present the given long as a potential unique item.
        +
        +
        Parameters:
        +
        datum - The given long datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(double datum)
        +
        Present the given double (or float) datum as a potential unique item. + The double will be converted to a long using Double.doubleToLongBits(datum), + which normalizes all NaN values to a single NaN representation. + Plus and minus zero will be normalized to plus zero. + The special floating-point values NaN and +/- Infinity are treated as distinct.
        +
        +
        Parameters:
        +
        datum - The given double datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(String datum)
        +
        Present the given String as a potential unique item. + The string is converted to a byte array using UTF8 encoding. + If the string is null or empty no update attempt is made and the method returns. + +

        Note: About 2X faster performance can be obtained by first converting the String to a + char[] and updating the sketch with that. This bypasses the complexity of the Java UTF_8 + encoding. This, of course, will not produce the same internal hash values as updating directly + with a String. So be consistent! Unioning two sketches, one fed with strings and the other + fed with char[] will be meaningless. +

        +
        +
        Parameters:
        +
        datum - The given String.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(ByteBuffer data)
        +
        Present the given byte buffer as a potential unique item. + Bytes are read from the current position of the buffer until its limit. + If the byte buffer is null or has no bytes remaining, no update attempt is made and the method returns. + +

        This method will not modify the position, mark, limit, or byte order of the buffer.

        + +

        Little-endian order is preferred, but not required. This method may perform better if the provided byte + buffer is in little-endian order.

        +
        +
        Parameters:
        +
        data - The given byte buffer.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(byte[] data)
        +
        Present the given byte array as a potential unique item. + If the byte array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given byte array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(char[] data)
        +
        Present the given char array as a potential unique item. + If the char array is null or empty no update attempt is made and the method returns. + +

        Note: this will not produce the same output hash values as the update(String) + method but will be a little faster as it avoids the complexity of the UTF8 encoding.

        +
        +
        Parameters:
        +
        data - The given char array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(int[] data)
        +
        Present the given integer array as a potential unique item. + If the integer array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given int array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long[] data)
        +
        Present the given long array as a potential unique item. + If the long array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given long array.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/class-use/HllSketch.html b/docs/5.0.X/org/apache/datasketches/hll/class-use/HllSketch.html new file mode 100644 index 000000000..7f4a7a716 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/class-use/HllSketch.html @@ -0,0 +1,265 @@ + + + + + +Uses of Class org.apache.datasketches.hll.HllSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.hll.HllSketch

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use HllSketch 
    PackageDescription
    org.apache.datasketches.hll +
    The DataSketches™ HLL sketch family package
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of HllSketch in org.apache.datasketches.hll

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.hll that return HllSketch 
      Modifier and TypeMethodDescription
      HllSketchHllSketch.copy() +
      Return a copy of this sketch onto the Java heap.
      +
      HllSketchHllSketch.copyAs​(TgtHllType tgtHllType) +
      Return a deep copy of this sketch onto the Java heap with the specified TgtHllType.
      +
      HllSketchUnion.getResult() +
      Return the result of this union operator as an HLL_4 sketch.
      +
      HllSketchUnion.getResult​(TgtHllType tgtHllType) +
      Return the result of this union operator with the specified TgtHllType
      +
      static HllSketchHllSketch.heapify​(byte[] byteArray) +
      Heapify the given byte array, which must be a valid HllSketch image and may have data.
      +
      static HllSketchHllSketch.heapify​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify the given Memory, which must be a valid HllSketch image and may have data.
      +
      static HllSketchHllSketch.wrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wraps the given read-only Memory that must be a image of a valid sketch, + which may be in compact or updatable form, and should have data.
      +
      static HllSketchHllSketch.writableWrap​(org.apache.datasketches.memory.WritableMemory srcWmem) +
      Wraps the given WritableMemory, which must be a image of a valid updatable sketch, + and may have data.
      +
      + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.hll with parameters of type HllSketch 
      Modifier and TypeMethodDescription
      voidUnion.update​(HllSketch sketch) +
      Update this union operator with the given sketch.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/class-use/TgtHllType.html b/docs/5.0.X/org/apache/datasketches/hll/class-use/TgtHllType.html new file mode 100644 index 000000000..db5a1a00f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/class-use/TgtHllType.html @@ -0,0 +1,294 @@ + + + + + +Uses of Class org.apache.datasketches.hll.TgtHllType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.hll.TgtHllType

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/class-use/Union.html b/docs/5.0.X/org/apache/datasketches/hll/class-use/Union.html new file mode 100644 index 000000000..fea30dbcf --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/class-use/Union.html @@ -0,0 +1,212 @@ + + + + + +Uses of Class org.apache.datasketches.hll.Union (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.hll.Union

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use Union 
    PackageDescription
    org.apache.datasketches.hll +
    The DataSketches™ HLL sketch family package
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of Union in org.apache.datasketches.hll

      + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.hll that return Union 
      Modifier and TypeMethodDescription
      static UnionUnion.heapify​(byte[] byteArray) +
      Construct a union operator populated with the given byte array image of an HllSketch.
      +
      static UnionUnion.heapify​(org.apache.datasketches.memory.Memory mem) +
      Construct a union operator populated with the given Memory image of an HllSketch.
      +
      static UnionUnion.writableWrap​(org.apache.datasketches.memory.WritableMemory srcWmem) +
      Wraps the given WritableMemory, which must be a image of a valid updatable HLL_8 sketch, + and may have data.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/doc-files/HLL_HIP_K12T20U20.png b/docs/5.0.X/org/apache/datasketches/hll/doc-files/HLL_HIP_K12T20U20.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3c8348f330e3e8c988ff0a7dfe4e2285f2a7b2 GIT binary patch literal 155358 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ᠵ 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� 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 V;$8?(t@UOA0#8>zmvv4FO#t=%fJXoT literal 0 HcmV?d00001 diff --git a/docs/5.0.X/org/apache/datasketches/hll/doc-files/HLL_UnionTime4_6_8_Java_CPP.png b/docs/5.0.X/org/apache/datasketches/hll/doc-files/HLL_UnionTime4_6_8_Java_CPP.png new file mode 100644 index 0000000000000000000000000000000000000000..23225887be64946a16ca56eab5a92fd1f28fd78b GIT binary patch literal 321106 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%0AVDX{W&y{$IZr1QV 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%0DskAV3{8{o#4lcKJM>S>k(G$FnZ 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 Q1Mo*%!$7@4^+Ndn0iIXgng9R* literal 0 HcmV?d00001 diff --git a/docs/5.0.X/org/apache/datasketches/hll/package-summary.html b/docs/5.0.X/org/apache/datasketches/hll/package-summary.html new file mode 100644 index 000000000..74aa8ad91 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/package-summary.html @@ -0,0 +1,336 @@ + + + + + +org.apache.datasketches.hll (datasketches-java 5.0.2 API) + + + + + + + + + + + + + +

+ +
+ +
+
+
+

Package org.apache.datasketches.hll

+
+
+
+ + +

The DataSketches™ HLL sketch family package

+ HllSketch and Union + are the public facing classes of this high performance implementation of Phillipe Flajolet's + HyperLogLog algorithm[1] but with significantly improved error behavior and important features that can be + essential for large production systems that must handle massive data. + +

Key Features of the DataSketches™ HLL Sketch and its companion Union

+ +

Advanced Estimation Algorithms for Optimum Accuracy

+ +

Zero error at low cardinalities

+ The HLL sketch leverages highly compact arrays and hash tables to keep exact counts until the transition to + dense mode is required for space reasons. The result is perfect accuracy for very low cardinalities. + +

Accuracy for very small streams can be important because Big Data is often fragmented into millions of smaller + streams (or segments) that inevitably are power-law distributed in size. If you are sketching all these fragments, + as a general rule, more than 80% of your sketches will be very small, 20% will be much larger, and only a few very + large in cardinality. + +

HIP / Martingale Estimator

+ When obtaining a cardinality estimate, the sketch automatically determines if it was the result of the capture of + a single stream, or if was the result of certain qualifying union operations. If this is the case the sketch will + take advantage of Edith Cohen's Historical Inverse Probability (HIP) estimation algorithm[2], which was + also independently developed by Daniel Ting as the Martingale estimation algorithm[3]. + This will result in a 20% improvement in accuracy over the standard Flajolet estimator. + If it is not a single stream or if the specific union operation did not qualify, + the estimator will default to the Composite Estimator. + +

Composite Estimator

+ This advanced estimator is a blend of several algorithms including new algorithms developed by Kevin Lang for his + Compressed Probabilistic Counting (CPC) sketch[4]. These algorithms provide near optimal estimation accuracy + for cases that don't qualify for HIP / Martingale estimation. + +

As a result of all of this work on accuracy, one will get a very smooth curve of the underlying accuracy of the + sketch once the statistical randomness is removed through multiple trials. This can be observed in the + following graph.

+ +

HLL Accuracy[6]

+ +

The above graph has 7 curves. At y = 0, is the median line that hugs the x-axis so closely that it can't be seen. + The two curves, just above and just below the x-axis, correspond to +/- 1 standard deviation (SD) of error. + The distance between either one of this pair and the x-axis is also known as the Relative Standard Error (RSE). + This type of graph for illustrating sketch error we call a "pitchfork plot".

+ +

The next two curves above and below correspond to +/- 2 SD, and + the top-most and bottom-most curves correspond to +/- 3 SD. + The chart grid lines are set at +/- multiples of Relative Standard Error (RSE) that correspond to +/- 1,2,3 SD. + Below the cardinality of about 512 there is no error at all. This is the point where this particular + sketch transitions from sparse to dense (or estimation) mode.

+ +

Three HLL Types

+ This HLL implementation offers three different types of HLL sketch, each with different + trade-offs with accuracy, space and performance. These types are selected with the + TgtHllType parameter. + +

In terms of accuracy, all three types, for the same lgConfigK, have the same error + distribution as a function of cardinality.

+ +

The configuration parameter lgConfigK is the log-base-2 of K, + where K is the number of buckets or slots for the sketch. lgConfigK impacts both accuracy and + the size of the sketch in memory and when stored.

+ +

HLL 8

+ This uses an 8-bit byte per HLL bucket. It is generally the + fastest in terms of update time but has the largest storage footprint of about K bytes. + +

HLL 6

+ This uses a 6-bit field per HLL bucket. It is the generally the next fastest + in terms of update time with a storage footprint of about 3/4 * K bytes. + +

HLL 4

+ This uses a 4-bit field per HLL bucket and for large counts may require + the use of a small internal auxiliary array for storing statistical exceptions, which are rare. + For the values of lgConfigK > 13 (K = 8192), + this additional array adds about 3% to the overall storage. It is generally the slowest in + terms of update time, but has the smallest storage footprint of about K/2 * 1.03 bytes. + +

Off-Heap Operation

+ This HLL sketch also offers the capability of operating off-heap. Given a WritableMemory[5] object + created by the user, the sketch will perform all of its updates and internal phase transitions + in that object, which can actually reside either on-heap or off-heap based on how it was + configured. In large systems that must update and union many millions of sketches, having the + sketch operate off-heap avoids the serialization and deserialization costs of moving sketches from heap to + off-heap and back, and reduces the need for garbage collection. + +

Merging sketches with different configured lgConfigK

+ This enables a user to union a HLL sketch that was configured with, say, lgConfigK = 12 + with another loaded HLL sketch that was configured with, say, lgConfigK = 14. + +

Why is this important? Suppose you have been building a history of sketches of your customer's + data that go back a full year (or 5 or 10!) that were all configured with lgConfigK = 12. Because sketches + are so much smaller than the raw data it is possible that the raw data was discarded keeping only the sketches. + Even if you have the raw data, it might be very expensive and time consuming to reload and rebuild all your + sketches with a larger more accurate size, say, lgConfigK = 14. + This capability enables you to merge last year's data with this year's data built with larger sketches and still + have meaningful results.

+ +

In other words, you can change your mind about what size sketch you need for your application at any time and + will not lose access to the data contained in your older historical sketches.

+ +

This capability does come with a caveat: The resulting accuracy of the merged sketch will be the accuracy of the + smaller of the two sketches. Without this capability, you would either be stuck with the configuration you first + chose forever, or you would have to rebuild all your sketches from scratch, or worse, not be able to recover your + historical data.

+ +

Multi-language, multi-platform.

+ The binary structures for our sketch serializations are language and platform independent. + This means it is possible to generate an HLL sketch on a C++ Windows platform and it can be used on a + Java or Python Unix platform. + +

[1] Philippe Flajolet, et al, +HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm. + DMTCS proc. AH, 2007, 127-146. + +

[2] Edith Cohen, +All-Distances Sketches, Revisited: HIP Estimators for Massive Graphs Analysis. + PODS'14, June 22-27, Snowbird, UT, USA. + +

[3] Daniel Ting, + +Streamed Approximate Counting of Distinct Elements, Beating Optimal Batch Methods. + KDD'14 August 24, 2014 New York, New York USA. + +

[4] Kevin Lang, + +Back to the Future: an Even More Nearly Optimal Cardinality Estimation Algorithm. + arXiv 1708.06839, August 22, 2017, Yahoo Research. + +

[5] Memory Component, + +DataSketches Memory Component + +

[6] MacBook Pro 2.3 GHz 8-Core Intel Core i9

+
+
Author:
+
Lee Rhodes, Kevin Lang
+
See Also:
+
CpcSketch
+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    HllSketch +
    The HllSketch is actually a collection of compact implementations of Phillipe Flajolet’s HyperLogLog (HLL) + sketch but with significantly improved error behavior and excellent speed performance.
    +
    Union +
    This performs union operations for all HllSketches.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    TgtHllType +
    Specifies the target type of HLL sketch to be created.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/package-tree.html b/docs/5.0.X/org/apache/datasketches/hll/package-tree.html new file mode 100644 index 000000000..d7d45b13c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/package-tree.html @@ -0,0 +1,179 @@ + + + + + +org.apache.datasketches.hll Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.hll

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • org.apache.datasketches.hll.HllSketch
    • +
    • org.apache.datasketches.hll.Union
    • +
    +
  • +
+
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hll/package-use.html b/docs/5.0.X/org/apache/datasketches/hll/package-use.html new file mode 100644 index 000000000..487971001 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hll/package-use.html @@ -0,0 +1,201 @@ + + + + + +Uses of Package org.apache.datasketches.hll (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.hll

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hllmap/UniqueCountMap.html b/docs/5.0.X/org/apache/datasketches/hllmap/UniqueCountMap.html new file mode 100644 index 000000000..eb10e920f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hllmap/UniqueCountMap.html @@ -0,0 +1,591 @@ + + + + + +UniqueCountMap (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UniqueCountMap

+
+
+ +
+
    +
  • +
    +
    public final class UniqueCountMap
    +extends Object
    +
    This is a real-time, key-value HLL mapping sketch that tracks approximate unique counts of + identifiers (the values) associated with each key. An example might be tracking the number of + unique user identifiers associated with each IP address. This map has been specifically designed + for the use-case where the number of keys is quite large (many millions) and the distribution of + identifiers per key is very skewed. A typical distribution where this works well is a + power-law distribution of identifiers per key of the form y = Cx, + where α < 0.5, and C is roughly ymax. + For example, with 100M keys, over 75% of the keys would have only + one identifier, 99% of the keys would have less than 20 identifiers, 99.9% would have less than + 200 identifiers, and a very tiny fraction might have identifiers in the thousands. + +

    The space consumed by this map is quite sensitive to the actual distribution of identifiers + per key, so you should characterize and or experiment with your typical input streams. + Nonetheless, our experiments on live streams of over 100M keys required about 1.4GB of space. + +

    Given such highly-skewed distributions, using this map is far more efficient space-wise than + the alternative of dedicating an HLL sketch per key. Based on our use cases, after + subtracting the space required for key storage, the average bytes per key required for unique + count estimation (getAverageSketchMemoryPerKey()) is about 10. + +

    Internally, this map is implemented as a hierarchy of internal hash maps with progressively + increasing storage allocated for unique count estimation. As a key acquires more identifiers it + is "promoted" up to a higher internal map. The final map of keys is a map of compact HLL + sketches. + +

    The unique values in all the internal maps, except the final HLL map, are stored in a special + form called a coupon. A coupon is a 16-bit value that fully describes a k=1024 HLL bin. + It contains 10 bits of address and a 6-bit HLL value. + +

    All internal maps use a prime number size and Knuth's Open Addressing Double Hash (OADH) + search algorithm. + +

    The internal base map holds all the keys and each key is associated with one 16-bit value. + Initially, the value is a single coupon. Once the key is promoted, this 16-bit field contains a + reference to the internal map where the key is still active. + +

    The intermediate maps between the base map and the final HLL map are of two types. + The first few of these are called traverse maps where the coupons are + stored as unsorted arrays. After the traverse maps are the coupon hash maps, where the coupons + are stored in small OASH hash tables. + +

    All the intermediate maps support deletes and can dynamically grow and shrink as required by + the input stream. + +

    The sketch estimator algorithms are unbiased with a Relative Standard Error (RSE) + of about 2.6% with 68% confidence, or equivalently, about 5.2% with a 95% confidence. + +

    In a parallel package in the sketches-misc repository, there are 2 classes that can be used + from the command line to feed this mapping sketch piped from standard-in for experimental + evaluation. The first is ProcessIpStream, which processes simple IP/ID pairs and the second, + ProcessDistributionStream, which processes pairs that describe a distribution. + In this same package is the VariousMapRSETest class that was used to generate the error plots + for the web site. Please refer to the javadocs for those classes for more information.

    +
    +
    Author:
    +
    Lee Rhodes, Alexander Saydakov, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      UniqueCountMap​(int keySizeBytes) +
      Constructs a UniqueCountMap with an initial capacity of one million entries.
      +
      UniqueCountMap​(int initialNumEntries, + int keySizeBytes) +
      Constructs a UniqueCountMap with a given initial number of entries.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UniqueCountMap

        +
        public UniqueCountMap​(int keySizeBytes)
        +
        Constructs a UniqueCountMap with an initial capacity of one million entries.
        +
        +
        Parameters:
        +
        keySizeBytes - must be at least 4 bytes to have sufficient entropy.
        +
        +
      • +
      + + + +
        +
      • +

        UniqueCountMap

        +
        public UniqueCountMap​(int initialNumEntries,
        +                      int keySizeBytes)
        +
        Constructs a UniqueCountMap with a given initial number of entries.
        +
        +
        Parameters:
        +
        initialNumEntries - The initial number of entries provides a tradeoff between + wasted space, if too high, and wasted time resizing the table, if too low.
        +
        keySizeBytes - must be at least 4 bytes to have sufficient entropy
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public double update​(byte[] key,
        +                     byte[] identifier)
        +
        Updates the map with a given key and identifier and returns the estimate of the number of + unique identifiers encountered so far for the given key.
        +
        +
        Parameters:
        +
        key - the given key
        +
        identifier - the given identifier for unique counting associated with the key
        +
        Returns:
        +
        the estimate of the number of unique identifiers encountered so far for the given key.
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate​(byte[] key)
        +
        Retrieves the current estimate of unique count for a given key.
        +
        +
        Parameters:
        +
        key - given key
        +
        Returns:
        +
        estimate of unique count so far
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(byte[] key)
        +
        Returns the upper bound cardinality with respect to getEstimate(byte[]) associated + with the given key.
        +
        +
        Parameters:
        +
        key - the given key
        +
        Returns:
        +
        the upper bound cardinality with respect to getEstimate(byte[]) associated + with the given key.
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(byte[] key)
        +
        Returns the lower bound cardinality with respect to getEstimate(byte[]) associated + with the given key.
        +
        +
        Parameters:
        +
        key - the given key
        +
        Returns:
        +
        the lower bound cardinality with respect to getEstimate(byte[]) associated + with the given key.
        +
        +
      • +
      + + + +
        +
      • +

        getActiveEntries

        +
        public int getActiveEntries()
        +
        Returns the number of active, unique keys across all internal maps
        +
        +
        Returns:
        +
        the number of active, unique keys across all internal maps
        +
        +
      • +
      + + + +
        +
      • +

        getMemoryUsageBytes

        +
        public long getMemoryUsageBytes()
        +
        Returns total bytes used by all internal maps
        +
        +
        Returns:
        +
        total bytes used by all internal maps
        +
        +
      • +
      + + + +
        +
      • +

        getKeyMemoryUsageBytes

        +
        public long getKeyMemoryUsageBytes()
        +
        Returns total bytes used for key storage
        +
        +
        Returns:
        +
        total bytes used for key storage
        +
        +
      • +
      + + + +
        +
      • +

        getAverageSketchMemoryPerKey

        +
        public double getAverageSketchMemoryPerKey()
        +
        Returns the average memory storage per key that is dedicated to sketching the unique counts.
        +
        +
        Returns:
        +
        the average memory storage per key that is dedicated to sketching the unique counts.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a string with a human-readable summary of the UniqueCountMap and all the internal maps
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        human-readable summary
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/hllmap/class-use/UniqueCountMap.html b/docs/5.0.X/org/apache/datasketches/hllmap/class-use/UniqueCountMap.html new file mode 100644 index 000000000..ab02b52bf --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hllmap/class-use/UniqueCountMap.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.hllmap.UniqueCountMap (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.hllmap.UniqueCountMap

+
+
No usage of org.apache.datasketches.hllmap.UniqueCountMap
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hllmap/package-summary.html b/docs/5.0.X/org/apache/datasketches/hllmap/package-summary.html new file mode 100644 index 000000000..e9d92d90e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hllmap/package-summary.html @@ -0,0 +1,192 @@ + + + + + +org.apache.datasketches.hllmap (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.hllmap

+
+
+
+ + +
The hllmap package contains a space efficient HLL mapping sketch of keys to approximate unique + count of identifiers. For example, counting the number of unique users (identifiers) per IP + address. + +

In cases where the number of keys is very large, having an individual HLL sketch per key may + not be practical. If the distribution of values per key is highly skewed where the vast + majority of keys have only a few values then this mapping sketch will make sense as it will be + far more space efficient than dedicating individual HLL sketches per key. + +

From our own testing, sketching 100 million IPv4 addresses with such a + highly skewed distribution of identifiers per IP uses only 1.4GB of memory. This translates to + an average of about 10 bytes per IP allocated to the equivalent of a full k=1024 HLL sketch + and provides an RSE of less than 2.5%. Your results will vary depending on the actual + distribution of identifiers per key.

+
+
See Also:
+
UniqueCountMap
+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    UniqueCountMap +
    This is a real-time, key-value HLL mapping sketch that tracks approximate unique counts of + identifiers (the values) associated with each key.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hllmap/package-tree.html b/docs/5.0.X/org/apache/datasketches/hllmap/package-tree.html new file mode 100644 index 000000000..5fba38f25 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hllmap/package-tree.html @@ -0,0 +1,164 @@ + + + + + +org.apache.datasketches.hllmap Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.hllmap

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/hllmap/package-use.html b/docs/5.0.X/org/apache/datasketches/hllmap/package-use.html new file mode 100644 index 000000000..984fa5012 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/hllmap/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package org.apache.datasketches.hllmap (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.hllmap

+
+
No usage of org.apache.datasketches.hllmap
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketch.html new file mode 100644 index 000000000..69bed84d6 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketch.html @@ -0,0 +1,1067 @@ + + + + + +KllDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllDoublesSketch

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newHeapInstance

        +
        public static KllDoublesSketch newHeapInstance()
        +
        Create a new heap instance of this sketch with the default k = 200. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger K will have smaller error but the sketch will be larger (and slower).
        +
        +
        Returns:
        +
        new KllDoublesSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        newHeapInstance

        +
        public static KllDoublesSketch newHeapInstance​(int k)
        +
        Create a new heap instance of this sketch with a given parameter k. + k can be between 8, inclusive, and 65535, inclusive. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger K will have smaller error but the sketch will be larger (and slower).
        +
        +
        Parameters:
        +
        k - parameter that controls size of the sketch and accuracy of estimates.
        +
        Returns:
        +
        new KllDoublesSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        newDirectInstance

        +
        public static KllDoublesSketch newDirectInstance​(org.apache.datasketches.memory.WritableMemory dstMem,
        +                                                 org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Create a new direct updatable instance of this sketch with the default k. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger k will have smaller error but the sketch will be larger (and slower).
        +
        +
        Parameters:
        +
        dstMem - the given destination WritableMemory object for use by the sketch
        +
        memReqSvr - the given MemoryRequestServer to request a larger WritableMemory
        +
        Returns:
        +
        a new direct instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        newDirectInstance

        +
        public static KllDoublesSketch newDirectInstance​(int k,
        +                                                 org.apache.datasketches.memory.WritableMemory dstMem,
        +                                                 org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Create a new direct updatable instance of this sketch with a given k.
        +
        +
        Parameters:
        +
        k - parameter that controls size of the sketch and accuracy of estimates.
        +
        dstMem - the given destination WritableMemory object for use by the sketch
        +
        memReqSvr - the given MemoryRequestServer to request a larger WritableMemory
        +
        Returns:
        +
        a new direct instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static KllDoublesSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch. + The resulting sketch will not retain any link to the source Memory.
        +
        +
        Parameters:
        +
        srcMem - a compact Memory image of a sketch serialized by this sketch. + See Memory
        +
        Returns:
        +
        a heap-based sketch based on the given Memory.
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static KllDoublesSketch wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap a sketch around the given read only compact source Memory containing sketch data + that originated from this sketch.
        +
        +
        Parameters:
        +
        srcMem - the read only source Memory
        +
        Returns:
        +
        instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        writableWrap

        +
        public static KllDoublesSketch writableWrap​(org.apache.datasketches.memory.WritableMemory srcMem,
        +                                            org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Wrap a sketch around the given source Writable Memory containing sketch data + that originated from this sketch.
        +
        +
        Parameters:
        +
        srcMem - a WritableMemory that contains data.
        +
        memReqSvr - the given MemoryRequestServer to request a larger WritableMemory
        +
        Returns:
        +
        instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(double[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(double[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public double getQuantile​(double rank,
        +                          QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public double[] getQuantiles​(double[] ranks,
        +                             QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Specified by:
        +
        getQuantiles in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        public double getQuantileLowerBound​(double rank)
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getQuantileLowerBound in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        public double getQuantileUpperBound​(double rank)
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getQuantileUpperBound in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(double quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        public double getRankLowerBound​(double rank)
        +
        Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankLowerBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        public double getRankUpperBound​(double rank)
        +
        Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankUpperBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        public double[] getRanks​(double[] quantiles,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Specified by:
        +
        getRanks in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        merge

        +
        public final void merge​(KllSketch other)
        +
        Description copied from class: KllSketch
        +
        Merges another sketch into this one. + Attempting to merge a sketch of the wrong type will throw an exception.
        +
        +
        Specified by:
        +
        merge in class KllSketch
        +
        Parameters:
        +
        other - sketch to merge into this one
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public final void reset()
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +

        The parameter k will not change.

        +
        +
        Specified by:
        +
        reset in interface QuantilesAPI
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns a byte array representation of this sketch.
        +
        +
        Specified by:
        +
        toByteArray in interface QuantilesDoublesAPI
        +
        Returns:
        +
        a byte array representation of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean withSummary,
        +                       boolean withData)
        +
        Description copied from class: KllSketch
        +
        Returns a summary of the sketch as a string.
        +
        +
        Overrides:
        +
        toString in class KllSketch
        +
        Parameters:
        +
        withSummary - if true includes sketch summary information
        +
        withData - if true include sketch data
        +
        Returns:
        +
        string representation of sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(double item)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Updates this sketch with the given item.
        +
        +
        Specified by:
        +
        update in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        item - from a stream of quantiles. NaNs are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchIterator.html new file mode 100644 index 000000000..3e7991e89 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchIterator.html @@ -0,0 +1,322 @@ + + + + + +KllDoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllDoublesSketchIterator

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public double getQuantile()
        +
        Description copied from interface: QuantilesDoublesSketchIterator
        +
        Gets the double quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesDoublesSketchIterator
        +
        Returns:
        +
        the double quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchSortedView.html new file mode 100644 index 000000000..5236294c5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllDoublesSketchSortedView.html @@ -0,0 +1,555 @@ + + + + + +KllDoublesSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllDoublesSketchSortedView

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.kll.KllDoublesSketchSortedView
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    DoublesSortedView, SortedView
    +
    +
    +
    public final class KllDoublesSketchSortedView
    +extends Object
    +implements DoublesSortedView
    +
    The SortedView of the KllDoublesSketch.
    +
    +
    Author:
    +
    Alexander Saydakov, Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        KllDoublesSketchSortedView

        +
        public KllDoublesSketchSortedView​(KllDoublesSketch sketch)
        +
        Constructs this Sorted View given the sketch
        +
        +
        Parameters:
        +
        sketch - the given KllDoublesSketch.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCumulativeWeights

        +
        public long[] getCumulativeWeights()
        +
        Description copied from interface: SortedView
        +
        Returns the array of cumulative weights from the sketch. + Also known as the natural ranks, which are the Natural Numbers on the interval [1, N].
        +
        +
        Specified by:
        +
        getCumulativeWeights in interface SortedView
        +
        Returns:
        +
        the array of cumulative weights (or natural ranks).
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public double getMaxItem()
        +
        Description copied from interface: DoublesSortedView
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface DoublesSortedView
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public double getMinItem()
        +
        Description copied from interface: DoublesSortedView
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface DoublesSortedView
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: SortedView
        +
        Returns the total number of items presented to the sourcing sketch.
        +
        +
        Specified by:
        +
        getN in interface SortedView
        +
        Returns:
        +
        the total number of items presented to the sourcing sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public double getQuantile​(double rank,
        +                          QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: DoublesSortedView
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface DoublesSortedView
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public double[] getQuantiles()
        +
        Description copied from interface: DoublesSortedView
        +
        Returns an array of all retained quantiles by the sketch.
        +
        +
        Specified by:
        +
        getQuantiles in interface DoublesSortedView
        +
        Returns:
        +
        an array of all retained quantiles by the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(double quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: DoublesSortedView
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface DoublesSortedView
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: SortedView
        +
        Returns true if this sorted view is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface SortedView
        +
        Returns:
        +
        true if this sorted view is empty.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketch.html b/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketch.html new file mode 100644 index 000000000..baf6dc134 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketch.html @@ -0,0 +1,1067 @@ + + + + + +KllFloatsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllFloatsSketch

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newHeapInstance

        +
        public static KllFloatsSketch newHeapInstance()
        +
        Create a new heap instance of this sketch with the default k = 200. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger K will have smaller error but the sketch will be larger (and slower).
        +
        +
        Returns:
        +
        new KllFloatsSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        newHeapInstance

        +
        public static KllFloatsSketch newHeapInstance​(int k)
        +
        Create a new heap instance of this sketch with a given parameter k. + k can be between 8, inclusive, and 65535, inclusive. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger K will have smaller error but the sketch will be larger (and slower).
        +
        +
        Parameters:
        +
        k - parameter that controls size of the sketch and accuracy of estimates.
        +
        Returns:
        +
        new KllFloatsSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        newDirectInstance

        +
        public static KllFloatsSketch newDirectInstance​(org.apache.datasketches.memory.WritableMemory dstMem,
        +                                                org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Create a new direct updatable instance of this sketch with the default k. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger k will have smaller error but the sketch will be larger (and slower).
        +
        +
        Parameters:
        +
        dstMem - the given destination WritableMemory object for use by the sketch
        +
        memReqSvr - the given MemoryRequestServer to request a larger WritableMemory
        +
        Returns:
        +
        a new direct instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        newDirectInstance

        +
        public static KllFloatsSketch newDirectInstance​(int k,
        +                                                org.apache.datasketches.memory.WritableMemory dstMem,
        +                                                org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Create a new direct updatable instance of this sketch with a given k.
        +
        +
        Parameters:
        +
        k - parameter that controls size of the sketch and accuracy of estimates.
        +
        dstMem - the given destination WritableMemory object for use by the sketch
        +
        memReqSvr - the given MemoryRequestServer to request a larger WritableMemory
        +
        Returns:
        +
        a new direct instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static KllFloatsSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch. + The resulting sketch will not retain any link to the source Memory.
        +
        +
        Parameters:
        +
        srcMem - a compact Memory image of a sketch serialized by this sketch. + See Memory
        +
        Returns:
        +
        a heap-based sketch based on the given Memory.
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static KllFloatsSketch wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap a sketch around the given read only compact source Memory containing sketch data + that originated from this sketch.
        +
        +
        Parameters:
        +
        srcMem - the read only source Memory
        +
        Returns:
        +
        instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        writableWrap

        +
        public static KllFloatsSketch writableWrap​(org.apache.datasketches.memory.WritableMemory srcMem,
        +                                           org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Wrap a sketch around the given source Writable Memory containing sketch data + that originated from this sketch.
        +
        +
        Parameters:
        +
        srcMem - a WritableMemory that contains data.
        +
        memReqSvr - the given MemoryRequestServer to request a larger WritableMemory
        +
        Returns:
        +
        instance of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(float[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(float[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public float getQuantile​(double rank,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public float[] getQuantiles​(double[] ranks,
        +                            QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Specified by:
        +
        getQuantiles in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        public float getQuantileLowerBound​(double rank)
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getQuantileLowerBound in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        public float getQuantileUpperBound​(double rank)
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getQuantileUpperBound in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(float quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        public double getRankLowerBound​(double rank)
        +
        Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankLowerBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        public double getRankUpperBound​(double rank)
        +
        Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankUpperBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        public double[] getRanks​(float[] quantiles,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Specified by:
        +
        getRanks in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        merge

        +
        public final void merge​(KllSketch other)
        +
        Description copied from class: KllSketch
        +
        Merges another sketch into this one. + Attempting to merge a sketch of the wrong type will throw an exception.
        +
        +
        Specified by:
        +
        merge in class KllSketch
        +
        Parameters:
        +
        other - sketch to merge into this one
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public final void reset()
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +

        The parameter k will not change.

        +
        +
        Specified by:
        +
        reset in interface QuantilesAPI
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns a byte array representation of this sketch.
        +
        +
        Specified by:
        +
        toByteArray in interface QuantilesFloatsAPI
        +
        Returns:
        +
        a byte array representation of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean withSummary,
        +                       boolean withData)
        +
        Description copied from class: KllSketch
        +
        Returns a summary of the sketch as a string.
        +
        +
        Overrides:
        +
        toString in class KllSketch
        +
        Parameters:
        +
        withSummary - if true includes sketch summary information
        +
        withData - if true include sketch data
        +
        Returns:
        +
        string representation of sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(float item)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Updates this sketch with the given item.
        +
        +
        Specified by:
        +
        update in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        item - from a stream of quantiles. NaNs are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchIterator.html new file mode 100644 index 000000000..720a27ed1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchIterator.html @@ -0,0 +1,322 @@ + + + + + +KllFloatsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllFloatsSketchIterator

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public float getQuantile()
        +
        Description copied from interface: QuantilesFloatsSketchIterator
        +
        Gets the float quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesFloatsSketchIterator
        +
        Returns:
        +
        the float quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchSortedView.html new file mode 100644 index 000000000..ddc16fe2b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllFloatsSketchSortedView.html @@ -0,0 +1,555 @@ + + + + + +KllFloatsSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllFloatsSketchSortedView

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.kll.KllFloatsSketchSortedView
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    FloatsSortedView, SortedView
    +
    +
    +
    public final class KllFloatsSketchSortedView
    +extends Object
    +implements FloatsSortedView
    +
    The SortedView of the KllFloatsSketch.
    +
    +
    Author:
    +
    Alexander Saydakov, Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        KllFloatsSketchSortedView

        +
        public KllFloatsSketchSortedView​(KllFloatsSketch sketch)
        +
        Constructs this Sorted View given the sketch
        +
        +
        Parameters:
        +
        sketch - the given KllFloatsSketch.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCumulativeWeights

        +
        public long[] getCumulativeWeights()
        +
        Description copied from interface: SortedView
        +
        Returns the array of cumulative weights from the sketch. + Also known as the natural ranks, which are the Natural Numbers on the interval [1, N].
        +
        +
        Specified by:
        +
        getCumulativeWeights in interface SortedView
        +
        Returns:
        +
        the array of cumulative weights (or natural ranks).
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public float getMaxItem()
        +
        Description copied from interface: FloatsSortedView
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface FloatsSortedView
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public float getMinItem()
        +
        Description copied from interface: FloatsSortedView
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface FloatsSortedView
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: SortedView
        +
        Returns the total number of items presented to the sourcing sketch.
        +
        +
        Specified by:
        +
        getN in interface SortedView
        +
        Returns:
        +
        the total number of items presented to the sourcing sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public float getQuantile​(double rank,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: FloatsSortedView
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface FloatsSortedView
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public float[] getQuantiles()
        +
        Description copied from interface: FloatsSortedView
        +
        Returns an array of all retained quantiles by the sketch.
        +
        +
        Specified by:
        +
        getQuantiles in interface FloatsSortedView
        +
        Returns:
        +
        an array of all retained quantiles by the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(float quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: FloatsSortedView
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface FloatsSortedView
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: SortedView
        +
        Returns true if this sorted view is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface SortedView
        +
        Returns:
        +
        true if this sorted view is empty.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketch.html b/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketch.html new file mode 100644 index 000000000..40ebcdd36 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketch.html @@ -0,0 +1,1073 @@ + + + + + +KllItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllItemsSketch<T>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    T - The sketch data type.
    +
    +
    +
    All Implemented Interfaces:
    +
    PartitioningFeature<T>, QuantilesAPI, QuantilesGenericAPI<T>
    +
    +
    +
    public abstract class KllItemsSketch<T>
    +extends KllSketch
    +implements QuantilesGenericAPI<T>, PartitioningFeature<T>
    +
    This variation of the KllSketch implements generic data types. The user must provide + a suitable implementation of the java.lang.Comparator as well as an implementation of + the serializer / deserializer, org.apache.datasketches.common.ArrayOfItemsSerDe.
    +
    +
    See Also:
    +
    KllSketch
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newHeapInstance

        +
        public static <T> KllItemsSketch<T> newHeapInstance​(Comparator<? super T> comparator,
        +                                                    ArrayOfItemsSerDe<T> serDe)
        +
        Create a new heap instance of this sketch with the default k = 200. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger K will have smaller error but the sketch will be larger (and slower).
        +
        +
        Type Parameters:
        +
        T - The sketch data type.
        +
        Parameters:
        +
        comparator - to compare items
        +
        serDe - Serializer / deserializer for an array of items, T[].
        +
        Returns:
        +
        new KllItemsSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        newHeapInstance

        +
        public static <T> KllItemsSketch<T> newHeapInstance​(int k,
        +                                                    Comparator<? super T> comparator,
        +                                                    ArrayOfItemsSerDe<T> serDe)
        +
        Create a new heap instance of this sketch with a given parameter k. + k can be between DEFAULT_M and 65535, inclusive. + The default k = 200 results in a normalized rank error of about + 1.65%. Larger K will have smaller error but the sketch will be larger (and slower).
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        k - parameter that controls size of the sketch and accuracy of estimates.
        +
        comparator - to compare items
        +
        serDe - Serializer / deserializer for items of type T and T[].
        +
        Returns:
        +
        new KllItemsSketch on the heap.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static <T> KllItemsSketch<T> heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                            Comparator<? super T> comparator,
        +                                            ArrayOfItemsSerDe<T> serDe)
        +
        Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch. + The resulting sketch will not retain any link to the source Memory.
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        srcMem - a compact Memory image of a sketch serialized by this sketch and of the same type of T.
        +
        comparator - to compare items
        +
        serDe - Serializer / deserializer for items of type T and T[].
        +
        Returns:
        +
        a heap-based sketch based on the given Memory.
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static <T> KllItemsSketch<T> wrap​(org.apache.datasketches.memory.Memory srcMem,
        +                                         Comparator<? super T> comparator,
        +                                         ArrayOfItemsSerDe<T> serDe)
        +
        Constructs a thin wrapper on the heap around a Memory (or WritableMemory) already initialized with a + validated sketch image of a type T consistent with the given comparator and serDe. + A reference to the Memory is kept in the sketch and must remain in scope consistent + with the temporal scope of this sketch. The amount of data kept on the heap is very small. + All of the item data originally collected by the given Memory sketch object remains in the + Memory object
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        srcMem - the Memory object that this sketch will wrap.
        +
        comparator - to compare items
        +
        serDe - Serializer / deserializer for items of type T and T[].
        +
        Returns:
        +
        a heap-base sketch that is a thin wrapper around the given srcMem.
        +
        +
      • +
      + + + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getPartitionBoundaries

        +
        public GenericPartitionBoundaries<T> getPartitionBoundaries​(int numEquallySized,
        +                                                            QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: PartitioningFeature
        +
        This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
        +
        +
        Specified by:
        +
        getPartitionBoundaries in interface PartitioningFeature<T>
        +
        Parameters:
        +
        numEquallySized - an integer that specifies the number of equally sized partitions between + getMinItem() and + getMaxItem(). + This must be a positive integer greater than zero. +
          +
        • A 1 will return: minItem, maxItem.
        • +
        • A 2 will return: minItem, median quantile, maxItem.
        • +
        • Etc.
        • +
        +
        searchCrit - If INCLUSIVE, all the returned quantiles are the upper boundaries of the equally sized partitions + with the exception of the lowest returned quantile, which is the lowest boundary of the lowest ranked partition. + If EXCLUSIVE, all the returned quantiles are the lower boundaries of the equally sized partitions + with the exception of the highest returned quantile, which is the upper boundary of the highest ranked partition.
        +
        Returns:
        +
        an instance of GenericPartitionBoundaries.
        +
        +
      • +
      + + + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public T getQuantile​(double rank,
        +                     QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public T[] getQuantiles​(double[] ranks,
        +                        QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Specified by:
        +
        getQuantiles in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        public T getQuantileLowerBound​(double rank)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Specified by:
        +
        getQuantileLowerBound in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        public T getQuantileUpperBound​(double rank)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Specified by:
        +
        getQuantileUpperBound in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRank

        +
        public double getRank​(T quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        public double getRankLowerBound​(double rank)
        +
        Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankLowerBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        public double getRankUpperBound​(double rank)
        +
        Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankUpperBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRanks

        +
        public double[] getRanks​(T[] quantiles,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Specified by:
        +
        getRanks in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        merge

        +
        public final void merge​(KllSketch other)
        +
        Description copied from class: KllSketch
        +
        Merges another sketch into this one. + Attempting to merge a sketch of the wrong type will throw an exception.
        +
        +
        Specified by:
        +
        merge in class KllSketch
        +
        Parameters:
        +
        other - sketch to merge into this one
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Description copied from interface: QuantilesAPI
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +
        +
        Specified by:
        +
        reset in interface QuantilesAPI
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean withSummary,
        +                       boolean withData)
        +
        Description copied from class: KllSketch
        +
        Returns a summary of the sketch as a string.
        +
        +
        Overrides:
        +
        toString in class KllSketch
        +
        Parameters:
        +
        withSummary - if true includes sketch summary information
        +
        withData - if true include sketch data
        +
        Returns:
        +
        string representation of sketch summary
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(T item)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Updates this sketch with the given item.
        +
        +
        Specified by:
        +
        update in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        item - from a stream of items. Nulls are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchIterator.html new file mode 100644 index 000000000..447b84a7a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchIterator.html @@ -0,0 +1,322 @@ + + + + + +KllItemsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllItemsSketchIterator<T>

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public T getQuantile()
        +
        Description copied from interface: QuantilesGenericSketchIterator
        +
        Gets the generic quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesGenericSketchIterator<T>
        +
        Returns:
        +
        the generic quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchSortedView.html new file mode 100644 index 000000000..414f408c7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllItemsSketchSortedView.html @@ -0,0 +1,699 @@ + + + + + +KllItemsSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllItemsSketchSortedView<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.kll.KllItemsSketchSortedView<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        If the sketch is empty this returns null.

        + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface GenericSortedView<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getCumulativeWeights

        +
        public long[] getCumulativeWeights()
        +
        Description copied from interface: SortedView
        +
        Returns the array of cumulative weights from the sketch. + Also known as the natural ranks, which are the Natural Numbers on the interval [1, N].
        +
        +
        Specified by:
        +
        getCumulativeWeights in interface SortedView
        +
        Returns:
        +
        the array of cumulative weights (or natural ranks).
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public T getMaxItem()
        +
        Description copied from interface: GenericSortedView
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface GenericSortedView<T>
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public T getMinItem()
        +
        Description copied from interface: GenericSortedView
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface GenericSortedView<T>
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: SortedView
        +
        Returns the total number of items presented to the sourcing sketch.
        +
        +
        Specified by:
        +
        getN in interface SortedView
        +
        Returns:
        +
        the total number of items presented to the sourcing sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getPartitionBoundaries

        +
        public GenericPartitionBoundaries<T> getPartitionBoundaries​(int numEquallySized,
        +                                                            QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: PartitioningFeature
        +
        This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
        +
        +
        Specified by:
        +
        getPartitionBoundaries in interface PartitioningFeature<T>
        +
        Parameters:
        +
        numEquallySized - an integer that specifies the number of equally sized partitions between + getMinItem() and + getMaxItem(). + This must be a positive integer greater than zero. +
          +
        • A 1 will return: minItem, maxItem.
        • +
        • A 2 will return: minItem, median quantile, maxItem.
        • +
        • Etc.
        • +
        +
        searchCrit - If INCLUSIVE, all the returned quantiles are the upper boundaries of the equally sized partitions + with the exception of the lowest returned quantile, which is the lowest boundary of the lowest ranked partition. + If EXCLUSIVE, all the returned quantiles are the lower boundaries of the equally sized partitions + with the exception of the highest returned quantile, which is the upper boundary of the highest ranked partition.
        +
        Returns:
        +
        an instance of GenericPartitionBoundaries.
        +
        +
      • +
      + + + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface GenericSortedView<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public T getQuantile​(double rank,
        +                     QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface GenericSortedView<T>
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getQuantiles

        +
        public T[] getQuantiles()
        +
        Description copied from interface: GenericSortedView
        +
        Returns the full array of quantiles.
        +
        +
        Specified by:
        +
        getQuantiles in interface GenericSortedView<T>
        +
        Returns:
        +
        the full array of quantiles.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRank

        +
        public double getRank​(T quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface GenericSortedView<T>
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: SortedView
        +
        Returns true if this sorted view is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface SortedView
        +
        Returns:
        +
        true if this sorted view is empty.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchStructure.html b/docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchStructure.html new file mode 100644 index 000000000..c5805c440 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchStructure.html @@ -0,0 +1,454 @@ + + + + + +KllSketch.SketchStructure (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum KllSketch.SketchStructure

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static KllSketch.SketchStructure[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (KllSketch.SketchStructure c : KllSketch.SketchStructure.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static KllSketch.SketchStructure valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getPreInts

        +
        public int getPreInts()
        +
      • +
      + + + +
        +
      • +

        getSerVer

        +
        public int getSerVer()
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchType.html b/docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchType.html new file mode 100644 index 000000000..b362ab096 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllSketch.SketchType.html @@ -0,0 +1,425 @@ + + + + + +KllSketch.SketchType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum KllSketch.SketchType

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static KllSketch.SketchType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (KllSketch.SketchType c : KllSketch.SketchType.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static KllSketch.SketchType valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getBytes

        +
        public int getBytes()
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public String getName()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllSketch.html b/docs/5.0.X/org/apache/datasketches/kll/KllSketch.html new file mode 100644 index 000000000..3db6e771d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllSketch.html @@ -0,0 +1,816 @@ + + + + + +KllSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllSketch

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    QuantilesAPI
    +
    +
    +
    Direct Known Subclasses:
    +
    KllDoublesSketch, KllFloatsSketch, KllItemsSketch
    +
    +
    +
    public abstract class KllSketch
    +extends Object
    +implements QuantilesAPI
    +
    This class is the root of the KLL sketch class hierarchy. It includes the public API that is independent + of either sketch type (e.g., float, double or generic item) and independent of whether the sketch is targeted + for use on the Java heap or off-heap. + +

    KLL is an implementation of a very compact quantiles sketch with lazy compaction scheme + and nearly optimal accuracy per retained quantile.

    + +

    Reference Optimal Quantile Approximation in Streams.

    + +

    The default k of 200 yields a "single-sided" epsilon of about 1.33% and a + "double-sided" (PMF) epsilon of about 1.65%, with a confidence of 99%.

    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang, Alexander Saydakov
    +
    See Also:
    +
    KLL Sketch, +QuantilesAPI
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getKFromEpsilon

        +
        public static int getKFromEpsilon​(double epsilon,
        +                                  boolean pmf)
        +
        Gets the approximate k to use given epsilon, the normalized rank error.
        +
        +
        Parameters:
        +
        epsilon - the normalized rank error between zero and one.
        +
        pmf - if true, this function returns the k assuming the input epsilon + is the desired "double-sided" epsilon for the getPMF() function. Otherwise, this function + returns k assuming the input epsilon is the desired "single-sided" + epsilon for all the other queries.
        +
        Returns:
        +
        k given epsilon.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxSerializedSizeBytes

        +
        public static int getMaxSerializedSizeBytes​(int k,
        +                                            long n,
        +                                            KllSketch.SketchType sketchType,
        +                                            boolean updatableMemFormat)
        +
        Returns upper bound on the serialized size of a KllSketch given the following parameters.
        +
        +
        Parameters:
        +
        k - parameter that controls size of the sketch and accuracy of estimates
        +
        n - stream length
        +
        sketchType - Only DOUBLES_SKETCH and FLOATS_SKETCH is supported for this operation.
        +
        updatableMemFormat - true if updatable Memory format, otherwise the standard compact format.
        +
        Returns:
        +
        upper bound on the serialized size of a KllSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRankError

        +
        public static double getNormalizedRankError​(int k,
        +                                            boolean pmf)
        +
        Gets the normalized rank error given k and pmf. + Static method version of the getNormalizedRankError(boolean). + The epsilon returned is a best fit to 99 percent confidence empirically measured max error + in thousands of trials.
        +
        +
        Parameters:
        +
        k - the configuration parameter
        +
        pmf - if true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        Returns:
        +
        if pmf is true, the normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRankError

        +
        public final double getNormalizedRankError​(boolean pmf)
        +
        Gets the approximate rank error of this sketch normalized as a fraction between zero and one. + The epsilon returned is a best fit to 99 percent confidence empirically measured max error + in thousands of trials.
        +
        +
        Parameters:
        +
        pmf - if true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        Returns:
        +
        if pmf is true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        +
      • +
      + + + +
        +
      • +

        getNumRetained

        +
        public final int getNumRetained()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the number of quantiles retained by the sketch.
        +
        +
        Specified by:
        +
        getNumRetained in interface QuantilesAPI
        +
        Returns:
        +
        the number of quantiles retained by the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getSerializedSizeBytes

        +
        public int getSerializedSizeBytes()
        +
        Returns the current number of bytes this Sketch would require if serialized in compact form.
        +
        +
        Returns:
        +
        the number of bytes this sketch would require if serialized.
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        public boolean hasMemory()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
        Specified by:
        +
        hasMemory in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isCompactMemoryFormat

        +
        public boolean isCompactMemoryFormat()
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        public boolean isDirect()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
        Specified by:
        +
        isDirect in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public final boolean isEmpty()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public final boolean isEstimationMode()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is in estimation mode.
        +
        +
        Specified by:
        +
        isEstimationMode in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is in estimation mode.
        +
        +
      • +
      + + + +
        +
      • +

        isMemoryUpdatableFormat

        +
        public final boolean isMemoryUpdatableFormat()
        +
        Returns true if the backing WritableMemory is in updatable format.
        +
        +
        Returns:
        +
        true if the backing WritableMemory is in updatable format.
        +
        +
      • +
      + + + +
        +
      • +

        isReadOnly

        +
        public final boolean isReadOnly()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is read only.
        +
        +
        Specified by:
        +
        isReadOnly in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is read only.
        +
        +
      • +
      + + + +
        +
      • +

        isSameResource

        +
        public final boolean isSameResource​(org.apache.datasketches.memory.Memory that)
        +
        Returns true if the backing resource of this is identical with the backing resource + of that. The capacities must be the same. If this is a region, + the region offset must also be the same.
        +
        +
        Parameters:
        +
        that - A different non-null object
        +
        Returns:
        +
        true if the backing resource of this is the same as the backing resource + of that.
        +
        +
      • +
      + + + +
        +
      • +

        merge

        +
        public abstract void merge​(KllSketch other)
        +
        Merges another sketch into this one. + Attempting to merge a sketch of the wrong type will throw an exception.
        +
        +
        Parameters:
        +
        other - sketch to merge into this one
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public final String toString()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns a summary of the key parameters of the sketch.
        +
        +
        Specified by:
        +
        toString in interface QuantilesAPI
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        a summary of the key parameters of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean withSummary,
        +                       boolean withData)
        +
        Returns a summary of the sketch as a string.
        +
        +
        Parameters:
        +
        withSummary - if true includes sketch summary information
        +
        withData - if true include sketch data
        +
        Returns:
        +
        string representation of sketch summary
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/KllSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/KllSketchIterator.html new file mode 100644 index 000000000..03db93731 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/KllSketchIterator.html @@ -0,0 +1,440 @@ + + + + + +KllSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KllSketchIterator

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        levelsArr

        +
        protected final int[] levelsArr
        +
      • +
      + + + +
        +
      • +

        numLevels

        +
        protected final int numLevels
        +
      • +
      + + + +
        +
      • +

        level

        +
        protected int level
        +
      • +
      + + + +
        +
      • +

        index

        +
        protected int index
        +
      • +
      + + + +
        +
      • +

        weight

        +
        protected long weight
        +
      • +
      + + + +
        +
      • +

        isInitialized_

        +
        protected boolean isInitialized_
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getWeight

        +
        public long getWeight()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Gets the natural weight at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getWeight in interface QuantilesSketchIterator
        +
        Returns:
        +
        the natural weight at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        next

        +
        public boolean next()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Advances the index and checks if it is valid. + The state of this iterator is undefined before the first call of this method.
        +
        +
        Specified by:
        +
        next in interface QuantilesSketchIterator
        +
        Returns:
        +
        true if the next index is valid.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketch.html new file mode 100644 index 000000000..e72775f4e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketch.html @@ -0,0 +1,261 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllDoublesSketch

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use KllDoublesSketch 
    PackageDescription
    org.apache.datasketches.kll +
    This package is for the implementations of the sketch algorithm developed by Zohar Karnin, Kevin Lang, + and Edo Liberty that is commonly referred to as the "KLL" sketch after the authors' last names.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of KllDoublesSketch in org.apache.datasketches.kll

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.kll that return KllDoublesSketch 
      Modifier and TypeMethodDescription
      static KllDoublesSketchKllDoublesSketch.heapify​(org.apache.datasketches.memory.Memory srcMem) +
      Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch.
      +
      static KllDoublesSketchKllDoublesSketch.newDirectInstance​(int k, + org.apache.datasketches.memory.WritableMemory dstMem, + org.apache.datasketches.memory.MemoryRequestServer memReqSvr) +
      Create a new direct updatable instance of this sketch with a given k.
      +
      static KllDoublesSketchKllDoublesSketch.newDirectInstance​(org.apache.datasketches.memory.WritableMemory dstMem, + org.apache.datasketches.memory.MemoryRequestServer memReqSvr) +
      Create a new direct updatable instance of this sketch with the default k.
      +
      static KllDoublesSketchKllDoublesSketch.newHeapInstance() +
      Create a new heap instance of this sketch with the default k = 200.
      +
      static KllDoublesSketchKllDoublesSketch.newHeapInstance​(int k) +
      Create a new heap instance of this sketch with a given parameter k.
      +
      static KllDoublesSketchKllDoublesSketch.wrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap a sketch around the given read only compact source Memory containing sketch data + that originated from this sketch.
      +
      static KllDoublesSketchKllDoublesSketch.writableWrap​(org.apache.datasketches.memory.WritableMemory srcMem, + org.apache.datasketches.memory.MemoryRequestServer memReqSvr) +
      Wrap a sketch around the given source Writable Memory containing sketch data + that originated from this sketch.
      +
      + + + + + + + + + + + + +
      Constructors in org.apache.datasketches.kll with parameters of type KllDoublesSketch 
      ConstructorDescription
      KllDoublesSketchSortedView​(KllDoublesSketch sketch) +
      Constructs this Sorted View given the sketch
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchIterator.html new file mode 100644 index 000000000..df9ddd1ce --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchIterator.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllDoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllDoublesSketchIterator

+
+
No usage of org.apache.datasketches.kll.KllDoublesSketchIterator
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchSortedView.html new file mode 100644 index 000000000..49ee0ff2e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllDoublesSketchSortedView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllDoublesSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllDoublesSketchSortedView

+
+
No usage of org.apache.datasketches.kll.KllDoublesSketchSortedView
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketch.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketch.html new file mode 100644 index 000000000..2d0def9dd --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketch.html @@ -0,0 +1,261 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllFloatsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllFloatsSketch

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use KllFloatsSketch 
    PackageDescription
    org.apache.datasketches.kll +
    This package is for the implementations of the sketch algorithm developed by Zohar Karnin, Kevin Lang, + and Edo Liberty that is commonly referred to as the "KLL" sketch after the authors' last names.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of KllFloatsSketch in org.apache.datasketches.kll

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.kll that return KllFloatsSketch 
      Modifier and TypeMethodDescription
      static KllFloatsSketchKllFloatsSketch.heapify​(org.apache.datasketches.memory.Memory srcMem) +
      Factory heapify takes a compact sketch image in Memory and instantiates an on-heap sketch.
      +
      static KllFloatsSketchKllFloatsSketch.newDirectInstance​(int k, + org.apache.datasketches.memory.WritableMemory dstMem, + org.apache.datasketches.memory.MemoryRequestServer memReqSvr) +
      Create a new direct updatable instance of this sketch with a given k.
      +
      static KllFloatsSketchKllFloatsSketch.newDirectInstance​(org.apache.datasketches.memory.WritableMemory dstMem, + org.apache.datasketches.memory.MemoryRequestServer memReqSvr) +
      Create a new direct updatable instance of this sketch with the default k.
      +
      static KllFloatsSketchKllFloatsSketch.newHeapInstance() +
      Create a new heap instance of this sketch with the default k = 200.
      +
      static KllFloatsSketchKllFloatsSketch.newHeapInstance​(int k) +
      Create a new heap instance of this sketch with a given parameter k.
      +
      static KllFloatsSketchKllFloatsSketch.wrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap a sketch around the given read only compact source Memory containing sketch data + that originated from this sketch.
      +
      static KllFloatsSketchKllFloatsSketch.writableWrap​(org.apache.datasketches.memory.WritableMemory srcMem, + org.apache.datasketches.memory.MemoryRequestServer memReqSvr) +
      Wrap a sketch around the given source Writable Memory containing sketch data + that originated from this sketch.
      +
      + + + + + + + + + + + + +
      Constructors in org.apache.datasketches.kll with parameters of type KllFloatsSketch 
      ConstructorDescription
      KllFloatsSketchSortedView​(KllFloatsSketch sketch) +
      Constructs this Sorted View given the sketch
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchIterator.html new file mode 100644 index 000000000..73bf3ae30 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchIterator.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllFloatsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllFloatsSketchIterator

+
+
No usage of org.apache.datasketches.kll.KllFloatsSketchIterator
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchSortedView.html new file mode 100644 index 000000000..3b24fbe3f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllFloatsSketchSortedView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllFloatsSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllFloatsSketchSortedView

+
+
No usage of org.apache.datasketches.kll.KllFloatsSketchSortedView
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketch.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketch.html new file mode 100644 index 000000000..23cd710e9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketch.html @@ -0,0 +1,227 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllItemsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchIterator.html new file mode 100644 index 000000000..612cc7cb2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchIterator.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllItemsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllItemsSketchIterator

+
+
No usage of org.apache.datasketches.kll.KllItemsSketchIterator
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchSortedView.html new file mode 100644 index 000000000..0ac6bb7f1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllItemsSketchSortedView.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllItemsSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllItemsSketchSortedView

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchStructure.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchStructure.html new file mode 100644 index 000000000..d8964c9bb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchStructure.html @@ -0,0 +1,212 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllSketch.SketchStructure (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllSketch.SketchStructure

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchType.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchType.html new file mode 100644 index 000000000..befd640e4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.SketchType.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllSketch.SketchType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllSketch.SketchType

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.html new file mode 100644 index 000000000..c82ef1bba --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketch.html @@ -0,0 +1,244 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketchIterator.html b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketchIterator.html new file mode 100644 index 000000000..488079194 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/class-use/KllSketchIterator.html @@ -0,0 +1,212 @@ + + + + + +Uses of Class org.apache.datasketches.kll.KllSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.kll.KllSketchIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/package-summary.html b/docs/5.0.X/org/apache/datasketches/kll/package-summary.html new file mode 100644 index 000000000..9884f02e3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/package-summary.html @@ -0,0 +1,259 @@ + + + + + +org.apache.datasketches.kll (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.kll

+
+
+
+ + +
This package is for the implementations of the sketch algorithm developed by Zohar Karnin, Kevin Lang, + and Edo Liberty that is commonly referred to as the "KLL" sketch after the authors' last names.
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/package-tree.html b/docs/5.0.X/org/apache/datasketches/kll/package-tree.html new file mode 100644 index 000000000..17b99852d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/package-tree.html @@ -0,0 +1,195 @@ + + + + + +org.apache.datasketches.kll Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.kll

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/kll/package-use.html b/docs/5.0.X/org/apache/datasketches/kll/package-use.html new file mode 100644 index 000000000..ee9621df9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/kll/package-use.html @@ -0,0 +1,232 @@ + + + + + +Uses of Package org.apache.datasketches.kll (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.kll

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/package-summary.html b/docs/5.0.X/org/apache/datasketches/package-summary.html new file mode 100644 index 000000000..239ac3381 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/package-summary.html @@ -0,0 +1,159 @@ + + + + + +org.apache.datasketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches

+
+
+
+ + +
This package is the parent package for all sketch families and common code areas.
+
+
Author:
+
Lee Rhodes
+
+
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/package-tree.html b/docs/5.0.X/org/apache/datasketches/package-tree.html new file mode 100644 index 000000000..d4043de93 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/package-tree.html @@ -0,0 +1,152 @@ + + + + + +org.apache.datasketches Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches

+Package Hierarchies: + +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/package-use.html b/docs/5.0.X/org/apache/datasketches/package-use.html new file mode 100644 index 000000000..c88297ce9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package org.apache.datasketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches

+
+
No usage of org.apache.datasketches
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/BoundsRule.html b/docs/5.0.X/org/apache/datasketches/partitions/BoundsRule.html new file mode 100644 index 000000000..ef76fccb8 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/BoundsRule.html @@ -0,0 +1,401 @@ + + + + + +BoundsRule (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum BoundsRule

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        INCLUDE_BOTH

        +
        public static final BoundsRule INCLUDE_BOTH
        +
        Include both the upper and lower bounds
        +
      • +
      + + + +
        +
      • +

        INCLUDE_UPPER

        +
        public static final BoundsRule INCLUDE_UPPER
        +
        Include only the upper bound but not the lower bound
        +
      • +
      + + + +
        +
      • +

        INCLUDE_LOWER

        +
        public static final BoundsRule INCLUDE_LOWER
        +
        Include only the lower bound but not the upper bound
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static BoundsRule[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (BoundsRule c : BoundsRule.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static BoundsRule valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.PartitionBoundsRow.html b/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.PartitionBoundsRow.html new file mode 100644 index 000000000..650cd096f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.PartitionBoundsRow.html @@ -0,0 +1,386 @@ + + + + + +Partitioner.PartitionBoundsRow (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Partitioner.PartitionBoundsRow<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        part

        +
        public int part
        +
      • +
      + + + +
        +
      • +

        levelPartId

        +
        public String levelPartId
        +
      • +
      + + + +
        +
      • +

        approxNumDeltaItems

        +
        public long approxNumDeltaItems
        +
      • +
      + + + + + + + +
        +
      • +

        lowerBound

        +
        public T lowerBound
        +
      • +
      + + + +
        +
      • +

        upperBound

        +
        public T upperBound
        +
      • +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.StackElement.html b/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.StackElement.html new file mode 100644 index 000000000..d09c3ac9c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.StackElement.html @@ -0,0 +1,348 @@ + + + + + +Partitioner.StackElement (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Partitioner.StackElement<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.partitions.Partitioner.StackElement<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.html b/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.html new file mode 100644 index 000000000..172998df4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/Partitioner.html @@ -0,0 +1,410 @@ + + + + + +Partitioner (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Partitioner<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.partitions.Partitioner<T,​S>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - the data type
    +
    S - the quantiles sketch that implements both QuantilesGenericAPI and PartitioningFeature.
    +
    +
    +
    public class Partitioner<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>>
    +extends Object
    +
    A partitioning process that can partition very large data sets into thousands + of partitions of approximately the same size. + +

    The code included here does work fine for moderate sized partitioning tasks. + As an example, using the test code in the test branch with the partitioning task of splitting + a data set of 1 billion items into 324 partitions of size 3M items completed in under 3 minutes, which was + performed on a single CPU. For much larger partitioning tasks, it is recommended that this code be leveraged into a + parallelized systems environment.

    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Partitioner

        +
        public Partitioner​(long tgtPartitionSize,
        +                   int maxPartsPerPass,
        +                   SketchFillRequest<T,​S> fillReq)
        +
        This constructor assumes a QuantileSearchCriteria of INCLUSIVE.
        +
        +
        Parameters:
        +
        tgtPartitionSize - the target size of the resulting partitions in number of items.
        +
        maxPartsPerPass - The maximum number of partitions to request from the sketch. The smaller this number is + the smaller the variance will be of the resulting partitions, but this will increase the number of passes of the + source data set.
        +
        fillReq - The is an implementation of the SketchFillRequest call-back supplied by the user and implements + the SketchFillRequest interface.
        +
        +
      • +
      + + + +
        +
      • +

        Partitioner

        +
        public Partitioner​(long tgtPartitionSize,
        +                   int maxPartsPerSk,
        +                   SketchFillRequest<T,​S> fillReq,
        +                   QuantileSearchCriteria criteria)
        +
        This constructor includes the QuantileSearchCriteria criteria as a parameter.
        +
        +
        Parameters:
        +
        tgtPartitionSize - the target size of the resulting partitions in number of items.
        +
        maxPartsPerSk - The maximum number of partitions to request from the sketch. The smaller this number is + the smaller the variance will be of the resulting partitions, but this will increase the number of passes of the + source data set.
        +
        fillReq - The is an implementation of the SketchFillRequest call-back supplied by the user.
        +
        criteria - This is the desired QuantileSearchCriteria to be used.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        partition

        +
        public List<Partitioner.PartitionBoundsRow<T>> partition​(S sk)
        +
        This initiates the partitioning process
        +
        +
        Parameters:
        +
        sk - A sketch of the entire data set.
        +
        Returns:
        +
        the final partitioning list
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/SketchFillRequest.html b/docs/5.0.X/org/apache/datasketches/partitions/SketchFillRequest.html new file mode 100644 index 000000000..705be479e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/SketchFillRequest.html @@ -0,0 +1,279 @@ + + + + + +SketchFillRequest (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface SketchFillRequest<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>>

+
+
+
+
    +
  • +
    +
    public interface SketchFillRequest<T,​S extends QuantilesGenericAPI<T> & PartitioningFeature<T>>
    +
    This is a callback request to the data source to fill a quantiles sketch, + which is returned to the caller.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      SgetRange​(T lowerQuantile, + T upperQuantile, + BoundsRule boundsRule) +
      This is a callback request to the data source to fill a quantiles sketch + with a range of data between upper and lower bounds.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        getRange

        +
        S getRange​(T lowerQuantile,
        +           T upperQuantile,
        +           BoundsRule boundsRule)
        +
        This is a callback request to the data source to fill a quantiles sketch + with a range of data between upper and lower bounds. Which of these bounds are to be included is determined by + the BoundsRule. + +

        This range of data may or may not be subsequently further partitioned.

        +
        +
        Parameters:
        +
        lowerQuantile - the lowest quantile of a range
        +
        upperQuantile - the highest quantile of a range
        +
        boundsRule - determines which quantile bounds to include
        +
        Returns:
        +
        a quantiles sketch filled from the given upper and lower bounds.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/class-use/BoundsRule.html b/docs/5.0.X/org/apache/datasketches/partitions/class-use/BoundsRule.html new file mode 100644 index 000000000..e574aa112 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/class-use/BoundsRule.html @@ -0,0 +1,238 @@ + + + + + +Uses of Class org.apache.datasketches.partitions.BoundsRule (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.partitions.BoundsRule

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.PartitionBoundsRow.html b/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.PartitionBoundsRow.html new file mode 100644 index 000000000..8733af19c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.PartitionBoundsRow.html @@ -0,0 +1,195 @@ + + + + + +Uses of Class org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.partitions.Partitioner.PartitionBoundsRow

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.StackElement.html b/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.StackElement.html new file mode 100644 index 000000000..17fa4b614 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.StackElement.html @@ -0,0 +1,191 @@ + + + + + +Uses of Class org.apache.datasketches.partitions.Partitioner.StackElement (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.partitions.Partitioner.StackElement

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.html b/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.html new file mode 100644 index 000000000..4bd010dd2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/class-use/Partitioner.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.partitions.Partitioner (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.partitions.Partitioner

+
+
No usage of org.apache.datasketches.partitions.Partitioner
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/class-use/SketchFillRequest.html b/docs/5.0.X/org/apache/datasketches/partitions/class-use/SketchFillRequest.html new file mode 100644 index 000000000..ee8be90f8 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/class-use/SketchFillRequest.html @@ -0,0 +1,204 @@ + + + + + +Uses of Interface org.apache.datasketches.partitions.SketchFillRequest (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.partitions.SketchFillRequest

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/package-summary.html b/docs/5.0.X/org/apache/datasketches/partitions/package-summary.html new file mode 100644 index 000000000..6f9fa5d6a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/package-summary.html @@ -0,0 +1,215 @@ + + + + + +org.apache.datasketches.partitions (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.partitions

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/package-tree.html b/docs/5.0.X/org/apache/datasketches/partitions/package-tree.html new file mode 100644 index 000000000..eae9e98b4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/package-tree.html @@ -0,0 +1,186 @@ + + + + + +org.apache.datasketches.partitions Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.partitions

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/partitions/package-use.html b/docs/5.0.X/org/apache/datasketches/partitions/package-use.html new file mode 100644 index 000000000..a5c84f4ca --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/partitions/package-use.html @@ -0,0 +1,203 @@ + + + + + +Uses of Package org.apache.datasketches.partitions (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.partitions

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/ClassicUtil.html b/docs/5.0.X/org/apache/datasketches/quantiles/ClassicUtil.html new file mode 100644 index 000000000..2e82197e5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/ClassicUtil.html @@ -0,0 +1,318 @@ + + + + + +ClassicUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ClassicUtil

+
+
+ +
+
    +
  • +
    +
    public final class ClassicUtil
    +extends Object
    +
    Utilities for the classic quantiles sketches and independent of the type.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getNormalizedRankError

        +
        public static double getNormalizedRankError​(int k,
        +                                            boolean pmf)
        +
        Used by Classic Quantiles. + Gets the normalized rank error given k and pmf for the Quantiles DoubleSketch and ItemsSketch.
        +
        +
        Parameters:
        +
        k - the configuration parameter
        +
        pmf - if true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        Returns:
        +
        if pmf is true, the normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        +
      • +
      + + + +
        +
      • +

        getKFromEpsilon

        +
        public static int getKFromEpsilon​(double epsilon,
        +                                  boolean pmf)
        +
        Used by Classic Quantiles. + Gets the approximate k to use given epsilon, the normalized rank error + for the Quantiles DoubleSketch and ItemsSketch.
        +
        +
        Parameters:
        +
        epsilon - the normalized rank error between zero and one.
        +
        pmf - if true, this function returns k assuming the input epsilon + is the desired "double-sided" epsilon for the getPMF() function. Otherwise, this function + returns k assuming the input epsilon is the desired "single-sided" + epsilon for all the other queries.
        +
        Returns:
        +
        k given epsilon.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/CompactDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/CompactDoublesSketch.html new file mode 100644 index 000000000..51a21d246 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/CompactDoublesSketch.html @@ -0,0 +1,388 @@ + + + + + +CompactDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CompactDoublesSketch

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static CompactDoublesSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
      • +
      + + + +
        +
      • +

        isReadOnly

        +
        public boolean isReadOnly()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is read only.
        +
        +
        Specified by:
        +
        isReadOnly in interface QuantilesAPI
        +
        Specified by:
        +
        isReadOnly in class DoublesSketch
        +
        Returns:
        +
        true if this sketch is read only.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Description copied from class: DoublesSketch
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +

        The parameter k will not change.

        +
        +
        Specified by:
        +
        reset in interface QuantilesAPI
        +
        Specified by:
        +
        reset in class DoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(double quantile)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Updates this sketch with the given item.
        +
        +
        Parameters:
        +
        quantile - from a stream of quantiles. NaNs are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketch.html new file mode 100644 index 000000000..6105c34ad --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketch.html @@ -0,0 +1,1573 @@ + + + + + +DoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoublesSketch

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    QuantilesAPI, QuantilesDoublesAPI
    +
    +
    +
    Direct Known Subclasses:
    +
    CompactDoublesSketch, UpdateDoublesSketch
    +
    +
    +
    public abstract class DoublesSketch
    +extends Object
    +implements QuantilesDoublesAPI
    +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using doubles, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi: + +

    Reference:

    + +

    A k of 128 produces a normalized, rank error of about 1.7%. + For example, the median returned from getQuantile(0.5) will be between the actual quantiles + from the hypothetically sorted array of input quantiles at normalized ranks of 0.483 and 0.517, with + a confidence of about 99%.

    + +
    +Table Guide for DoublesSketch Size in Bytes and Approximate Error:
    +          K => |      16      32      64     128     256     512   1,024
    +    ~ Error => | 12.145%  6.359%  3.317%  1.725%  0.894%  0.463%  0.239%
    +             N | Size in Bytes ->
    +------------------------------------------------------------------------
    +             0 |       8       8       8       8       8       8       8
    +             1 |      72      72      72      72      72      72      72
    +             3 |      72      72      72      72      72      72      72
    +             7 |     104     104     104     104     104     104     104
    +            15 |     168     168     168     168     168     168     168
    +            31 |     296     296     296     296     296     296     296
    +            63 |     424     552     552     552     552     552     552
    +           127 |     552     808   1,064   1,064   1,064   1,064   1,064
    +           255 |     680   1,064   1,576   2,088   2,088   2,088   2,088
    +           511 |     808   1,320   2,088   3,112   4,136   4,136   4,136
    +         1,023 |     936   1,576   2,600   4,136   6,184   8,232   8,232
    +         2,047 |   1,064   1,832   3,112   5,160   8,232  12,328  16,424
    +         4,095 |   1,192   2,088   3,624   6,184  10,280  16,424  24,616
    +         8,191 |   1,320   2,344   4,136   7,208  12,328  20,520  32,808
    +        16,383 |   1,448   2,600   4,648   8,232  14,376  24,616  41,000
    +        32,767 |   1,576   2,856   5,160   9,256  16,424  28,712  49,192
    +        65,535 |   1,704   3,112   5,672  10,280  18,472  32,808  57,384
    +       131,071 |   1,832   3,368   6,184  11,304  20,520  36,904  65,576
    +       262,143 |   1,960   3,624   6,696  12,328  22,568  41,000  73,768
    +       524,287 |   2,088   3,880   7,208  13,352  24,616  45,096  81,960
    +     1,048,575 |   2,216   4,136   7,720  14,376  26,664  49,192  90,152
    +     2,097,151 |   2,344   4,392   8,232  15,400  28,712  53,288  98,344
    +     4,194,303 |   2,472   4,648   8,744  16,424  30,760  57,384 106,536
    +     8,388,607 |   2,600   4,904   9,256  17,448  32,808  61,480 114,728
    +    16,777,215 |   2,728   5,160   9,768  18,472  34,856  65,576 122,920
    +    33,554,431 |   2,856   5,416  10,280  19,496  36,904  69,672 131,112
    +    67,108,863 |   2,984   5,672  10,792  20,520  38,952  73,768 139,304
    +   134,217,727 |   3,112   5,928  11,304  21,544  41,000  77,864 147,496
    +   268,435,455 |   3,240   6,184  11,816  22,568  43,048  81,960 155,688
    +   536,870,911 |   3,368   6,440  12,328  23,592  45,096  86,056 163,880
    + 1,073,741,823 |   3,496   6,696  12,840  24,616  47,144  90,152 172,072
    + 2,147,483,647 |   3,624   6,952  13,352  25,640  49,192  94,248 180,264
    + 4,294,967,295 |   3,752   7,208  13,864  26,664  51,240  98,344 188,456
    + 
    +
    +
    See Also:
    +
    QuantilesAPI
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static DoublesSketchBuilderbuilder() +
      Returns a new builder
      +
      DoublesSketchdownSample​(DoublesSketch srcSketch, + int smallerK, + org.apache.datasketches.memory.WritableMemory dstMem) +
      From an source sketch, create a new sketch that must have a smaller K.
      +
      double[]getCDF​(double[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      static intgetCompactSerialiedSizeBytes​(int k, + long n) +
      Returns the number of bytes a DoublesSketch would require to store in compact form + given k and n.
      +
      intgetCurrentCompactSerializedSizeBytes() +
      Returns the current number of bytes this sketch would require to store in the compact Memory Format.
      +
      intgetCurrentUpdatableSerializedSizeBytes() +
      Returns the current number of bytes this sketch would require to store in the updatable Memory Format.
      +
      intgetK() +
      Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
      +
      static intgetKFromEpsilon​(double epsilon, + boolean pmf) +
      Gets the approximate k to use given epsilon, the normalized rank error.
      +
      abstract doublegetMaxItem() +
      Returns the maximum item of the stream.
      +
      abstract doublegetMinItem() +
      Returns the minimum item of the stream.
      +
      abstract longgetN() +
      Gets the length of the input stream offered to the sketch..
      +
      doublegetNormalizedRankError​(boolean pmf) +
      Gets the approximate rank error of this sketch normalized as a fraction between zero and one.
      +
      static doublegetNormalizedRankError​(int k, + boolean pmf) +
      Gets the normalized rank error given k and pmf.
      +
      intgetNumRetained() +
      Gets the number of quantiles retained by the sketch.
      +
      double[]getPMF​(double[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      doublegetQuantile​(double rank, + QuantileSearchCriteria searchCrit) +
      Gets the approximate quantile of the given normalized rank and the given search criterion.
      +
      doublegetQuantileLowerBound​(double rank) +
      Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
      +
      double[]getQuantiles​(double[] ranks, + QuantileSearchCriteria searchCrit) +
      Gets an array of quantiles from the given array of normalized ranks.
      +
      doublegetQuantileUpperBound​(double rank) +
      Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
      +
      doublegetRank​(double quantile, + QuantileSearchCriteria searchCrit) +
      Gets the normalized rank corresponding to the given a quantile.
      +
      doublegetRankLowerBound​(double rank) +
      Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      double[]getRanks​(double[] quantiles, + QuantileSearchCriteria searchCrit) +
      Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
      +
      doublegetRankUpperBound​(double rank) +
      Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      intgetSerializedSizeBytes() +
      Returns the current number of bytes this Sketch would require if serialized.
      +
      DoublesSortedViewgetSortedView() +
      Gets the sorted view of this sketch
      +
      static intgetUpdatableStorageBytes​(int k, + long n) +
      Returns the number of bytes a sketch would require to store in updatable form.
      +
      abstract booleanhasMemory() +
      Returns true if this sketch's data structure is backed by Memory or WritableMemory.
      +
      static DoublesSketchheapify​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
      +
      abstract booleanisDirect() +
      Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
      +
      booleanisEmpty() +
      Returns true if this sketch is empty.
      +
      booleanisEstimationMode() +
      Returns true if this sketch is in estimation mode.
      +
      abstract booleanisReadOnly() +
      Returns true if this sketch is read only.
      +
      booleanisSameResource​(org.apache.datasketches.memory.Memory that) +
      Returns true if the backing resource of this is identical with the backing resource + of that.
      +
      QuantilesDoublesSketchIteratoriterator() +
      Gets the iterator for this sketch, which is not sorted.
      +
      voidputMemory​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Puts the current sketch into the given Memory in compact form if there is sufficient space, + otherwise, it throws an error.
      +
      voidputMemory​(org.apache.datasketches.memory.WritableMemory dstMem, + boolean compact) +
      Puts the current sketch into the given Memory if there is sufficient space, otherwise, + throws an error.
      +
      abstract voidreset() +
      Resets this sketch to the empty state.
      +
      byte[]toByteArray() +
      Returns a byte array representation of this sketch.
      +
      byte[]toByteArray​(boolean compact) +
      Serialize this sketch in a byte array form.
      +
      StringtoString() +
      Returns a summary of the key parameters of the sketch.
      +
      StringtoString​(boolean sketchSummary, + boolean dataDetail) +
      Returns summary information about this sketch.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of a DoublesSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of a DoublesSketch.
      +
      static DoublesSketchwrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap this sketch around the given Memory image of a DoublesSketch, compact or updatable.
      +
      + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        builder

        +
        public static final DoublesSketchBuilder builder()
        +
        Returns a new builder
        +
        +
        Returns:
        +
        a new builder
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static DoublesSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        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.
        +
        +
        Parameters:
        +
        srcMem - a Memory image of a Sketch. + See Memory
        +
        Returns:
        +
        a heap-based Sketch based on the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static DoublesSketch wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap this sketch around the given Memory image of a DoublesSketch, compact or updatable. + A DirectUpdateDoublesSketch can only wrap an updatable array, and a + DirectCompactDoublesSketch can only wrap a compact array.
        +
        +
        Parameters:
        +
        srcMem - the given Memory image of a DoublesSketch that may have data,
        +
        Returns:
        +
        a sketch that wraps the given srcMem
        +
        +
      • +
      + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(double[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public abstract double getMaxItem()
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns the maximum item of the stream. This is provided for convenience and may be different from the + item returned by getQuantile(1.0).
        +
        +
        Specified by:
        +
        getMaxItem in interface QuantilesDoublesAPI
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public abstract double getMinItem()
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns the minimum item of the stream. This is provided for convenience and may be different from the + item returned by getQuantile(0.0).
        +
        +
        Specified by:
        +
        getMinItem in interface QuantilesDoublesAPI
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(double[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public double getQuantile​(double rank,
        +                          QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public double[] getQuantiles​(double[] ranks,
        +                             QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Specified by:
        +
        getQuantiles in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        public double getQuantileLowerBound​(double rank)
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getQuantileLowerBound in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        public double getQuantileUpperBound​(double rank)
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getQuantileUpperBound in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(double quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        public double getRankLowerBound​(double rank)
        +
        Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankLowerBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        public double getRankUpperBound​(double rank)
        +
        Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.99.
        +
        +
        Specified by:
        +
        getRankUpperBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        public double[] getRanks​(double[] quantiles,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Specified by:
        +
        getRanks in interface QuantilesDoublesAPI
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
        Specified by:
        +
        getK in interface QuantilesAPI
        +
        Returns:
        +
        the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public abstract long getN()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the length of the input stream offered to the sketch..
        +
        +
        Specified by:
        +
        getN in interface QuantilesAPI
        +
        Returns:
        +
        the length of the input stream offered to the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRankError

        +
        public double getNormalizedRankError​(boolean pmf)
        +
        Gets the approximate rank error of this sketch normalized as a fraction between zero and one. + The epsilon returned is a best fit to 99 percent confidence empirically measured max error + in thousands of trials.
        +
        +
        Parameters:
        +
        pmf - if true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        Returns:
        +
        if pmf is true, returns the normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRankError

        +
        public static double getNormalizedRankError​(int k,
        +                                            boolean pmf)
        +
        Gets the normalized rank error given k and pmf. + Static method version of the getNormalizedRankError(boolean). + The epsilon returned is a best fit to 99 percent confidence empirically measured max error + in thousands of trials.
        +
        +
        Parameters:
        +
        k - the configuration parameter
        +
        pmf - if true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        Returns:
        +
        if pmf is true, the normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        +
      • +
      + + + +
        +
      • +

        getKFromEpsilon

        +
        public static int getKFromEpsilon​(double epsilon,
        +                                  boolean pmf)
        +
        Gets the approximate k to use given epsilon, the normalized rank error.
        +
        +
        Parameters:
        +
        epsilon - the normalized rank error between zero and one.
        +
        pmf - if true, this function returns k assuming the input epsilon + is the desired "double-sided" epsilon for the getPMF() function. Otherwise, this function + returns k assuming the input epsilon is the desired "single-sided" + epsilon for all the other queries.
        +
        Returns:
        +
        k given epsilon.
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        public abstract boolean hasMemory()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
        Specified by:
        +
        hasMemory in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        public abstract boolean isDirect()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
        Specified by:
        +
        isDirect in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is in estimation mode.
        +
        +
        Specified by:
        +
        isEstimationMode in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is in estimation mode.
        +
        +
      • +
      + + + +
        +
      • +

        isReadOnly

        +
        public abstract boolean isReadOnly()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is read only.
        +
        +
        Specified by:
        +
        isReadOnly in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is read only.
        +
        +
      • +
      + + + +
        +
      • +

        isSameResource

        +
        public boolean isSameResource​(org.apache.datasketches.memory.Memory that)
        +
        Returns true if the backing resource of this is identical with the backing resource + of that. The capacities must be the same. If this is a region, + the region offset must also be the same.
        +
        +
        Parameters:
        +
        that - A different non-null object
        +
        Returns:
        +
        true if the backing resource of this is the same as the backing resource + of that.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns a byte array representation of this sketch.
        +
        +
        Specified by:
        +
        toByteArray in interface QuantilesDoublesAPI
        +
        Returns:
        +
        a byte array representation of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(boolean compact)
        +
        Serialize this sketch in a byte array form.
        +
        +
        Parameters:
        +
        compact - if true the sketch will be serialized in compact form. + DirectCompactDoublesSketch can wrap() only a compact byte array; + DirectUpdateDoublesSketch can wrap() only a updatable byte array.
        +
        Returns:
        +
        this sketch in a byte array form.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns a summary of the key parameters of the sketch.
        +
        +
        Specified by:
        +
        toString in interface QuantilesAPI
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        a summary of the key parameters of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean sketchSummary,
        +                       boolean dataDetail)
        +
        Returns summary information about this sketch. Used for debugging.
        +
        +
        Parameters:
        +
        sketchSummary - if true includes sketch summary
        +
        dataDetail - if true includes data detail
        +
        Returns:
        +
        summary information about the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of a DoublesSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a DoublesSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of a DoublesSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a DoublesSketch.
        +
        +
      • +
      + + + +
        +
      • +

        downSample

        +
        public DoublesSketch downSample​(DoublesSketch srcSketch,
        +                                int smallerK,
        +                                org.apache.datasketches.memory.WritableMemory dstMem)
        +
        From an source sketch, create a new sketch that must have a smaller K. + The original sketch is not modified.
        +
        +
        Parameters:
        +
        srcSketch - the sourcing sketch
        +
        smallerK - the new sketch's K that must be smaller than this K. + It is required that this.getK() = smallerK * 2^(nonnegative integer).
        +
        dstMem - the destination Memory. It must not overlap the Memory of this sketch. + If null, a heap sketch will be returned, otherwise it will be off-heap.
        +
        Returns:
        +
        the new sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNumRetained

        +
        public int getNumRetained()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the number of quantiles retained by the sketch.
        +
        +
        Specified by:
        +
        getNumRetained in interface QuantilesAPI
        +
        Returns:
        +
        the number of quantiles retained by the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentCompactSerializedSizeBytes

        +
        public int getCurrentCompactSerializedSizeBytes()
        +
        Returns the current number of bytes this sketch would require to store in the compact Memory Format.
        +
        +
        Returns:
        +
        the current number of bytes this sketch would require to store in the compact Memory Format.
        +
        +
      • +
      + + + +
        +
      • +

        getCompactSerialiedSizeBytes

        +
        public static int getCompactSerialiedSizeBytes​(int k,
        +                                               long n)
        +
        Returns the number of bytes a DoublesSketch would require to store in compact form + given k and n. The compact form is not updatable.
        +
        +
        Parameters:
        +
        k - the size configuration parameter for the sketch
        +
        n - the number of quantiles input into the sketch
        +
        Returns:
        +
        the number of bytes required to store this sketch in compact form.
        +
        +
      • +
      + + + +
        +
      • +

        getSerializedSizeBytes

        +
        public int getSerializedSizeBytes()
        +
        Description copied from interface: QuantilesDoublesAPI
        +
        Returns the current number of bytes this Sketch would require if serialized.
        +
        +
        Specified by:
        +
        getSerializedSizeBytes in interface QuantilesDoublesAPI
        +
        Returns:
        +
        the number of bytes this sketch would require if serialized.
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentUpdatableSerializedSizeBytes

        +
        public int getCurrentUpdatableSerializedSizeBytes()
        +
        Returns the current number of bytes this sketch would require to store in the updatable Memory Format.
        +
        +
        Returns:
        +
        the current number of bytes this sketch would require to store in the updatable Memory Format.
        +
        +
      • +
      + + + +
        +
      • +

        getUpdatableStorageBytes

        +
        public static int getUpdatableStorageBytes​(int k,
        +                                           long n)
        +
        Returns the number of bytes a sketch would require to store in updatable form. + This uses roughly 2X the storage of the compact form + given k and n.
        +
        +
        Parameters:
        +
        k - the size configuration parameter for the sketch
        +
        n - the number of quantiles input into the sketch
        +
        Returns:
        +
        the number of bytes this sketch would require to store in updatable form.
        +
        +
      • +
      + + + +
        +
      • +

        putMemory

        +
        public void putMemory​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Puts the current sketch into the given Memory in compact form if there is sufficient space, + otherwise, it throws an error.
        +
        +
        Parameters:
        +
        dstMem - the given memory.
        +
        +
      • +
      + + + +
        +
      • +

        putMemory

        +
        public void putMemory​(org.apache.datasketches.memory.WritableMemory dstMem,
        +                      boolean compact)
        +
        Puts the current sketch into the given Memory if there is sufficient space, otherwise, + throws an error.
        +
        +
        Parameters:
        +
        dstMem - the given memory.
        +
        compact - if true, compacts and sorts the base buffer, which optimizes merge + performance at the cost of slightly increased serialization time.
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        reset

        +
        public abstract void reset()
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +

        The parameter k will not change.

        +
        +
        Specified by:
        +
        reset in interface QuantilesAPI
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchBuilder.html new file mode 100644 index 000000000..453df5a85 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchBuilder.html @@ -0,0 +1,419 @@ + + + + + +DoublesSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoublesSketchBuilder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantiles.DoublesSketchBuilder
    • +
    +
  • +
+
+
    +
  • +
    +
    public class DoublesSketchBuilder
    +extends Object
    +
    For building a new quantiles DoublesSketch.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoublesSketchBuilder

        +
        public DoublesSketchBuilder()
        +
        Constructor for a new DoublesSketchBuilder. The default configuration is +
          +
        • k: 128. This produces a normalized rank error of about 1.7%
        • +
        • Memory: null
        • +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setK

        +
        public DoublesSketchBuilder setK​(int k)
        +
        Sets the parameter k that determines the accuracy and size of the sketch.
        +
        +
        Parameters:
        +
        k - determines the accuracy and size of the sketch. + It is recommended that k be a power of 2 to enable unioning of sketches with + different k. It is only possible to union from + larger k to smaller k.
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Gets the current configured k
        +
        +
        Returns:
        +
        the current configured k
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public UpdateDoublesSketch build()
        +
        Returns an UpdateDoublesSketch with the current configuration of this Builder.
        +
        +
        Returns:
        +
        a UpdateDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public UpdateDoublesSketch build​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns a quantiles UpdateDoublesSketch with the current configuration of this builder + and the specified backing destination Memory store.
        +
        +
        Parameters:
        +
        dstMem - destination memory for use by the sketch
        +
        Returns:
        +
        an UpdateDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Creates a human readable string that describes the current configuration of this builder.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchIterator.html new file mode 100644 index 000000000..81d7da466 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchIterator.html @@ -0,0 +1,338 @@ + + + + + +DoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoublesSketchIterator

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantiles.DoublesSketchIterator
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public double getQuantile()
        +
        Description copied from interface: QuantilesDoublesSketchIterator
        +
        Gets the double quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesDoublesSketchIterator
        +
        Returns:
        +
        the double quantile at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        getWeight

        +
        public long getWeight()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Gets the natural weight at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getWeight in interface QuantilesSketchIterator
        +
        Returns:
        +
        the natural weight at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        next

        +
        public boolean next()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Advances the index and checks if it is valid. + The state of this iterator is undefined before the first call of this method.
        +
        +
        Specified by:
        +
        next in interface QuantilesSketchIterator
        +
        Returns:
        +
        true if the next index is valid.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchSortedView.html new file mode 100644 index 000000000..cc1234ca1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesSketchSortedView.html @@ -0,0 +1,555 @@ + + + + + +DoublesSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoublesSketchSortedView

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantiles.DoublesSketchSortedView
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    DoublesSortedView, SortedView
    +
    +
    +
    public final class DoublesSketchSortedView
    +extends Object
    +implements DoublesSortedView
    +
    The SortedView of the Classic Quantiles DoublesSketch.
    +
    +
    Author:
    +
    Alexander Saydakov, Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoublesSketchSortedView

        +
        public DoublesSketchSortedView​(DoublesSketch sketch)
        +
        Constructs this Sorted View given the sketch
        +
        +
        Parameters:
        +
        sketch - the given Classic Quantiles DoublesSketch
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCumulativeWeights

        +
        public long[] getCumulativeWeights()
        +
        Description copied from interface: SortedView
        +
        Returns the array of cumulative weights from the sketch. + Also known as the natural ranks, which are the Natural Numbers on the interval [1, N].
        +
        +
        Specified by:
        +
        getCumulativeWeights in interface SortedView
        +
        Returns:
        +
        the array of cumulative weights (or natural ranks).
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public double getMaxItem()
        +
        Description copied from interface: DoublesSortedView
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface DoublesSortedView
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public double getMinItem()
        +
        Description copied from interface: DoublesSortedView
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface DoublesSortedView
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: SortedView
        +
        Returns the total number of items presented to the sourcing sketch.
        +
        +
        Specified by:
        +
        getN in interface SortedView
        +
        Returns:
        +
        the total number of items presented to the sourcing sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public double getQuantile​(double rank,
        +                          QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: DoublesSortedView
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface DoublesSortedView
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(double quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: DoublesSortedView
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface DoublesSortedView
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public double[] getQuantiles()
        +
        Description copied from interface: DoublesSortedView
        +
        Returns an array of all retained quantiles by the sketch.
        +
        +
        Specified by:
        +
        getQuantiles in interface DoublesSortedView
        +
        Returns:
        +
        an array of all retained quantiles by the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: SortedView
        +
        Returns true if this sorted view is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface SortedView
        +
        Returns:
        +
        true if this sorted view is empty.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnion.html b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnion.html new file mode 100644 index 000000000..c6e10879d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnion.html @@ -0,0 +1,791 @@ + + + + + +DoublesUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoublesUnion

+
+
+ +
+
    +
  • +
    +
    public abstract class DoublesUnion
    +extends Object
    +
    The API for Union operations for quantiles DoublesSketches
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      DoublesUnion() 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static DoublesUnionBuilderbuilder() +
      Returns a new UnionBuilder
      +
      abstract intgetEffectiveK() +
      Returns the effective k of this Union.
      +
      abstract intgetMaxK() +
      Returns the configured maxK of this Union.
      +
      abstract UpdateDoublesSketchgetResult() +
      Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch.
      +
      abstract UpdateDoublesSketchgetResult​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Places the result of this Union into the provided memory as an UpdateDoublesSketch, + which enables further update operations on the resulting sketch.
      +
      abstract UpdateDoublesSketchgetResultAndReset() +
      Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch.
      +
      abstract booleanhasMemory() +
      Returns true if this union's data structure is backed by Memory or WritableMemory.
      +
      static DoublesUnionheapify​(org.apache.datasketches.memory.Memory srcMem) +
      Returns a Heap Union object that has been initialized with the data from the given memory + image of a sketch.
      +
      static DoublesUnionheapify​(DoublesSketch sketch) +
      Returns a Heap Union object that has been initialized with the data from the given sketch.
      +
      abstract booleanisDirect() +
      Returns true if this union is off-heap (direct)
      +
      abstract booleanisEmpty() +
      Returns true if this union is empty
      +
      abstract booleanisSameResource​(org.apache.datasketches.memory.Memory that) +
      Returns true if the backing resource of this is identical with the backing resource + of that.
      +
      abstract voidreset() +
      Resets this Union to a virgin state.
      +
      abstract byte[]toByteArray() +
      Serialize this union to a byte array.
      +
      abstract StringtoString() +
      Returns summary information about the backing sketch.
      +
      abstract StringtoString​(boolean sketchSummary, + boolean dataDetail) +
      Returns summary information about the backing sketch.
      +
      abstract voidunion​(org.apache.datasketches.memory.Memory mem) +
      Iterative union operation, which means this method can be repeatedly called.
      +
      abstract voidunion​(DoublesSketch sketchIn) +
      Iterative union operation, which means this method can be repeatedly called.
      +
      abstract voidupdate​(double dataItem) +
      Update this union with the given double (or float) data Item.
      +
      static DoublesUnionwrap​(org.apache.datasketches.memory.Memory mem) +
      Returns a read-only Union object that wraps off-heap data of the given memory image of + a sketch.
      +
      static DoublesUnionwrap​(org.apache.datasketches.memory.WritableMemory mem) +
      Returns an updatable Union object that wraps off-heap data of the given memory image of + a sketch.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoublesUnion

        +
        public DoublesUnion()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        builder

        +
        public static DoublesUnionBuilder builder()
        +
        Returns a new UnionBuilder
        +
        +
        Returns:
        +
        a new UnionBuilder
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static DoublesUnion heapify​(DoublesSketch sketch)
        +
        Returns a Heap Union object that has been initialized with the data from the given sketch.
        +
        +
        Parameters:
        +
        sketch - A DoublesSketch to be used as a source of data only and will not be modified.
        +
        Returns:
        +
        a DoublesUnion object
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static DoublesUnion heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Returns a Heap Union object that has been initialized with the data from the given memory + image of a sketch.
        +
        +
        Parameters:
        +
        srcMem - A memory image of a DoublesSketch to be used as a source of data, + but will not be modified.
        +
        Returns:
        +
        a Union object
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static DoublesUnion wrap​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a read-only Union object that wraps off-heap data of the given memory image of + a sketch. The data structures of the Union remain off-heap.
        +
        +
        Parameters:
        +
        mem - A memory region to be used as the data structure for the sketch + and will be modified.
        +
        Returns:
        +
        a Union object
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static DoublesUnion wrap​(org.apache.datasketches.memory.WritableMemory mem)
        +
        Returns an updatable Union object that wraps off-heap data of the given memory image of + a sketch. The data structures of the Union remain off-heap.
        +
        +
        Parameters:
        +
        mem - A memory region to be used as the data structure for the sketch + and will be modified.
        +
        Returns:
        +
        a Union object
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        public abstract boolean hasMemory()
        +
        Returns true if this union's data structure is backed by Memory or WritableMemory.
        +
        +
        Returns:
        +
        true if this union's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        public abstract boolean isDirect()
        +
        Returns true if this union is off-heap (direct)
        +
        +
        Returns:
        +
        true if this union is off-heap (direct)
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public abstract boolean isEmpty()
        +
        Returns true if this union is empty
        +
        +
        Returns:
        +
        true if this union is empty
        +
        +
      • +
      + + + +
        +
      • +

        getMaxK

        +
        public abstract int getMaxK()
        +
        Returns the configured maxK of this Union.
        +
        +
        Returns:
        +
        the configured maxK of this Union.
        +
        +
      • +
      + + + +
        +
      • +

        getEffectiveK

        +
        public abstract int getEffectiveK()
        +
        Returns the effective k of this Union.
        +
        +
        Returns:
        +
        the effective k of this Union.
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public abstract void union​(DoublesSketch sketchIn)
        +
        Iterative union operation, which means this method can be repeatedly called. + Merges the given sketch into this union object. + The given sketch is not modified. + It is required that the ratio of the two K's be a power of 2. + This is easily satisfied if each of the K's are already a power of 2. + If the given sketch is null or empty it is ignored. + +

        It is required that the results of the union operation, which can be obtained at any time, + is obtained from getResult().

        +
        +
        Parameters:
        +
        sketchIn - the sketch to be merged into this one.
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public abstract void union​(org.apache.datasketches.memory.Memory mem)
        +
        Iterative union operation, which means this method can be repeatedly called. + Merges the given Memory image of a DoublesSketch into this union object. + The given Memory object is not modified and a link to it is not retained. + It is required that the ratio of the two K's be a power of 2. + This is easily satisfied if each of the K's are already a power of 2. + If the given sketch is null or empty it is ignored. + +

        It is required that the results of the union operation, which can be obtained at any time, + is obtained from getResult().

        +
        +
        Parameters:
        +
        mem - Memory image of sketch to be merged
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(double dataItem)
        +
        Update this union with the given double (or float) data Item.
        +
        +
        Parameters:
        +
        dataItem - The given double datum.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract UpdateDoublesSketch getResult()
        +
        Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch. The Union state has not been changed, which allows + further union operations.
        +
        +
        Returns:
        +
        the result of this Union operation
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract UpdateDoublesSketch getResult​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Places the result of this Union into the provided memory as an UpdateDoublesSketch, + which enables further update operations on the resulting sketch. The Union state has not + been changed, which allows further union operations.
        +
        +
        Parameters:
        +
        dstMem - the destination memory for the result
        +
        Returns:
        +
        the result of this Union operation
        +
        +
      • +
      + + + +
        +
      • +

        getResultAndReset

        +
        public abstract UpdateDoublesSketch getResultAndReset()
        +
        Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch. The Union is reset to the virgin state.
        +
        +
        Returns:
        +
        the result of this Union operation and reset.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public abstract void reset()
        +
        Resets this Union to a virgin state.
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public abstract byte[] toByteArray()
        +
        Serialize this union to a byte array. Result is an UpdateDoublesSketch, serialized in an + unordered, non-compact form. The resulting byte[] can be heapified or wrapped as either a + sketch or a union.
        +
        +
        Returns:
        +
        byte array of this union
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public abstract String toString()
        +
        Returns summary information about the backing sketch.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public abstract String toString​(boolean sketchSummary,
        +                                boolean dataDetail)
        +
        Returns summary information about the backing sketch. Used for debugging.
        +
        +
        Parameters:
        +
        sketchSummary - if true includes sketch summary
        +
        dataDetail - if true includes data detail
        +
        Returns:
        +
        summary information about the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        isSameResource

        +
        public abstract boolean isSameResource​(org.apache.datasketches.memory.Memory that)
        +
        Returns true if the backing resource of this is identical with the backing resource + of that. The capacities must be the same. If this is a region, + the region offset must also be the same.
        +
        +
        Parameters:
        +
        that - A different non-null object
        +
        Returns:
        +
        true if the backing resource of this is the same as the backing resource + of that.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnionBuilder.html b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnionBuilder.html new file mode 100644 index 000000000..f022009d5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/DoublesUnionBuilder.html @@ -0,0 +1,400 @@ + + + + + +DoublesUnionBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoublesUnionBuilder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantiles.DoublesUnionBuilder
    • +
    +
  • +
+
+
    +
  • +
    +
    public class DoublesUnionBuilder
    +extends Object
    +
    For building a new DoublesSketch Union operation.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoublesUnionBuilder

        +
        public DoublesUnionBuilder()
        +
        Constructor for a new DoublesUnionBuilder. The default configuration is +
          +
        • k: 128. This produces a normalized rank error of about 1.7%
        • +
        • Memory: null
        • +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setMaxK

        +
        public DoublesUnionBuilder setMaxK​(int maxK)
        +
        Sets the parameter masK that determines the maximum size of the sketch that + results from a union and its accuracy.
        +
        +
        Parameters:
        +
        maxK - determines the accuracy and size of the union and is a maximum. + The effective k can be smaller due to unions with smaller k sketches. + It is recommended that maxK be a power of 2 to enable unioning of sketches with + different k.
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        getMaxK

        +
        public int getMaxK()
        +
        Gets the current configured maxK
        +
        +
        Returns:
        +
        the current configured maxK
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public DoublesUnion build()
        +
        Returns a new empty Union object with the current configuration of this Builder.
        +
        +
        Returns:
        +
        a Union object
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public DoublesUnion build​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns a new empty Union object with the current configuration of this Builder + and the specified backing destination Memory store.
        +
        +
        Parameters:
        +
        dstMem - the destination memory
        +
        Returns:
        +
        a Union object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketch.html new file mode 100644 index 000000000..6a7463934 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketch.html @@ -0,0 +1,1494 @@ + + + + + +ItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ItemsSketch<T>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    T - The sketch data type
    +
    +
    +
    All Implemented Interfaces:
    +
    PartitioningFeature<T>, QuantilesAPI, QuantilesGenericAPI<T>
    +
    +
    +
    public final class ItemsSketch<T>
    +extends Object
    +implements QuantilesGenericAPI<T>, PartitioningFeature<T>
    +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using generic items, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi: + +

    Reference:

    + +

    A k of 128 produces a normalized, rank error of about 1.7%. + For example, the median returned from getQuantile(0.5) will be between the actual quantiles + from the hypothetically sorted array of input quantiles at normalized ranks of 0.483 and 0.517, with + a confidence of about 99%.

    + +

    The size of an ItemsSketch is very dependent on the size of the generic Items input into the sketch, + so there is no comparable size table as there is for the DoublesSketch.

    +
    +
    See Also:
    +
    QuantilesAPI
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      ItemsSketch<T>downSample​(int newK) +
      From an existing sketch, this creates a new sketch that can have a smaller K.
      +
      double[]getCDF​(T[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      static <T> ItemsSketch<T>getInstance​(Class<T> clazz, + int k, + Comparator<? super T> comparator) +
      Obtains a new instance of an ItemsSketch.
      +
      static <T> ItemsSketch<T>getInstance​(Class<T> clazz, + Comparator<? super T> comparator) +
      Obtains a new instance of an ItemsSketch using the DEFAULT_K.
      +
      static <T> ItemsSketch<T>getInstance​(Class<T> clazz, + org.apache.datasketches.memory.Memory srcMem, + Comparator<? super T> comparator, + ArrayOfItemsSerDe<T> serDe) +
      Heapifies the given srcMem, which must be a Memory image of a ItemsSketch
      +
      intgetK() +
      Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
      +
      static intgetKFromEpsilon​(double epsilon, + boolean pmf) +
      Gets the approximate k to use given epsilon, the normalized rank error.
      +
      TgetMaxItem() +
      Returns the maximum item of the stream.
      +
      TgetMinItem() +
      Returns the minimum item of the stream.
      +
      longgetN() +
      Gets the length of the input stream offered to the sketch..
      +
      doublegetNormalizedRankError​(boolean pmf) +
      Gets the approximate rank error of this sketch normalized as a fraction between zero and one.
      +
      static doublegetNormalizedRankError​(int k, + boolean pmf) +
      Gets the normalized rank error given k and pmf.
      +
      intgetNumRetained() +
      Gets the number of quantiles retained by the sketch.
      +
      GenericPartitionBoundaries<T>getPartitionBoundaries​(int numEquallySized, + QuantileSearchCriteria searchCrit) +
      This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
      +
      double[]getPMF​(T[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      TgetQuantile​(double rank, + QuantileSearchCriteria searchCrit) +
      Gets the approximate quantile of the given normalized rank and the given search criterion.
      +
      TgetQuantileLowerBound​(double rank) +
      Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
      +
      T[]getQuantiles​(double[] ranks, + QuantileSearchCriteria searchCrit) +
      Gets an array of quantiles from the given array of normalized ranks.
      +
      TgetQuantileUpperBound​(double rank) +
      Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
      +
      doublegetRank​(T quantile, + QuantileSearchCriteria searchCrit) +
      Gets the normalized rank corresponding to the given a quantile.
      +
      doublegetRankLowerBound​(double rank) +
      Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      double[]getRanks​(T[] quantiles, + QuantileSearchCriteria searchCrit) +
      Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
      +
      doublegetRankUpperBound​(double rank) +
      Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      Class<T>getSketchType() 
      ItemsSketchSortedView<T>getSortedView() +
      Gets the sorted view of this sketch
      +
      booleanhasMemory() +
      Returns true if this sketch's data structure is backed by Memory or WritableMemory.
      +
      booleanisDirect() +
      Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
      +
      booleanisEmpty() +
      Returns true if this sketch is empty.
      +
      booleanisEstimationMode() +
      Returns true if this sketch is in estimation mode.
      +
      booleanisReadOnly() +
      Returns true if this sketch is read only.
      +
      QuantilesGenericSketchIterator<T>iterator() +
      Gets the iterator for this sketch, which is not sorted.
      +
      voidputMemory​(org.apache.datasketches.memory.WritableMemory dstMem, + ArrayOfItemsSerDe<T> serDe) +
      Puts the current sketch into the given Memory if there is sufficient space.
      +
      voidreset() +
      Resets this sketch to the empty state.
      +
      byte[]toByteArray​(boolean ordered, + ArrayOfItemsSerDe<T> serDe) +
      Serialize this sketch to a byte array form.
      +
      byte[]toByteArray​(ArrayOfItemsSerDe<T> serDe) +
      Serialize this sketch to a byte array form.
      +
      StringtoString​(boolean sketchSummary, + boolean dataDetail) +
      Returns summary information about this sketch.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of an ItemsSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of an ItemsSketch.
      +
      voidupdate​(T item) +
      Updates this sketch with the given item.
      +
      + + + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        rand

        +
        public static final Random rand
        +
        Setting the seed makes the results of the sketch deterministic if the input items are + received in exactly the same order. This is only useful when performing test comparisons, + otherwise, it is not recommended.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsSketch<T> getInstance​(Class<T> clazz,
        +                                             Comparator<? super T> comparator)
        +
        Obtains a new instance of an ItemsSketch using the DEFAULT_K.
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        clazz - the given class of T
        +
        comparator - to compare items
        +
        Returns:
        +
        an ItemSketch<T>.
        +
        +
      • +
      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsSketch<T> getInstance​(Class<T> clazz,
        +                                             int k,
        +                                             Comparator<? super T> comparator)
        +
        Obtains a new instance of an ItemsSketch.
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        clazz - the given class of T
        +
        k - Parameter that controls space usage of sketch and accuracy of estimates. + Must be greater than 2 and less than 65536 and a power of 2.
        +
        comparator - to compare items
        +
        Returns:
        +
        an ItemSketch<T>.
        +
        +
      • +
      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsSketch<T> getInstance​(Class<T> clazz,
        +                                             org.apache.datasketches.memory.Memory srcMem,
        +                                             Comparator<? super T> comparator,
        +                                             ArrayOfItemsSerDe<T> serDe)
        +
        Heapifies the given srcMem, which must be a Memory image of a ItemsSketch
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        clazz - the given class of T
        +
        srcMem - a Memory image of a sketch. + See Memory
        +
        comparator - to compare items
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a ItemSketch<T> on the Java heap.
        +
        +
      • +
      + + + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getSketchType

        +
        public Class<T> getSketchType()
        +
        +
        Returns:
        +
        the sketch item type
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public T getMaxItem()
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface QuantilesGenericAPI<T>
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public T getMinItem()
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface QuantilesGenericAPI<T>
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getPartitionBoundaries

        +
        public GenericPartitionBoundaries<T> getPartitionBoundaries​(int numEquallySized,
        +                                                            QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: PartitioningFeature
        +
        This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
        +
        +
        Specified by:
        +
        getPartitionBoundaries in interface PartitioningFeature<T>
        +
        Parameters:
        +
        numEquallySized - an integer that specifies the number of equally sized partitions between + getMinItem() and + getMaxItem(). + This must be a positive integer greater than zero. +
          +
        • A 1 will return: minItem, maxItem.
        • +
        • A 2 will return: minItem, median quantile, maxItem.
        • +
        • Etc.
        • +
        +
        searchCrit - If INCLUSIVE, all the returned quantiles are the upper boundaries of the equally sized partitions + with the exception of the lowest returned quantile, which is the lowest boundary of the lowest ranked partition. + If EXCLUSIVE, all the returned quantiles are the lower boundaries of the equally sized partitions + with the exception of the highest returned quantile, which is the upper boundary of the highest ranked partition.
        +
        Returns:
        +
        an instance of GenericPartitionBoundaries.
        +
        +
      • +
      + + + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public T getQuantile​(double rank,
        +                     QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        public T getQuantileLowerBound​(double rank)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Specified by:
        +
        getQuantileLowerBound in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        public T getQuantileUpperBound​(double rank)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Specified by:
        +
        getQuantileUpperBound in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public T[] getQuantiles​(double[] ranks,
        +                        QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Specified by:
        +
        getQuantiles in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + +
        +
      • +

        getRank

        +
        public double getRank​(T quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        public double getRankLowerBound​(double rank)
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
        Specified by:
        +
        getRankLowerBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        public double getRankUpperBound​(double rank)
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
        Specified by:
        +
        getRankUpperBound in interface QuantilesAPI
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRanks

        +
        public double[] getRanks​(T[] quantiles,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Specified by:
        +
        getRanks in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
        Specified by:
        +
        getK in interface QuantilesAPI
        +
        Returns:
        +
        the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the length of the input stream offered to the sketch..
        +
        +
        Specified by:
        +
        getN in interface QuantilesAPI
        +
        Returns:
        +
        the length of the input stream offered to the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRankError

        +
        public double getNormalizedRankError​(boolean pmf)
        +
        Gets the approximate rank error of this sketch normalized as a fraction between zero and one.
        +
        +
        Parameters:
        +
        pmf - if true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        Returns:
        +
        if pmf is true, returns the normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRankError

        +
        public static double getNormalizedRankError​(int k,
        +                                            boolean pmf)
        +
        Gets the normalized rank error given k and pmf. + Static method version of the getNormalizedRankError(boolean).
        +
        +
        Parameters:
        +
        k - the configuration parameter
        +
        pmf - if true, returns the "double-sided" normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        Returns:
        +
        if pmf is true, the normalized rank error for the getPMF() function. + Otherwise, it is the "single-sided" normalized rank error for all the other queries.
        +
        +
      • +
      + + + +
        +
      • +

        getKFromEpsilon

        +
        public static int getKFromEpsilon​(double epsilon,
        +                                  boolean pmf)
        +
        Gets the approximate k to use given epsilon, the normalized rank error.
        +
        +
        Parameters:
        +
        epsilon - the normalized rank error between zero and one.
        +
        pmf - if true, this function returns k assuming the input epsilon + is the desired "double-sided" epsilon for the getPMF() function. Otherwise, this function + returns k assuming the input epsilon is the desired "single-sided" + epsilon for all the other queries.
        +
        Returns:
        +
        k given epsilon.
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        public boolean hasMemory()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
        Specified by:
        +
        hasMemory in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        public boolean isDirect()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
        Specified by:
        +
        isDirect in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is in estimation mode.
        +
        +
        Specified by:
        +
        isEstimationMode in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is in estimation mode.
        +
        +
      • +
      + + + +
        +
      • +

        isReadOnly

        +
        public boolean isReadOnly()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is read only.
        +
        +
        Specified by:
        +
        isReadOnly in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is read only.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Description copied from interface: QuantilesAPI
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +
        +
        Specified by:
        +
        reset in interface QuantilesAPI
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<T> serDe)
        +
        Serialize this sketch to a byte array form.
        +
        +
        Parameters:
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        byte array of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(boolean ordered,
        +                          ArrayOfItemsSerDe<T> serDe)
        +
        Serialize this sketch to a byte array form.
        +
        +
        Parameters:
        +
        ordered - if true the base buffer will be ordered (default == false).
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        this sketch in a byte array form.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean sketchSummary,
        +                       boolean dataDetail)
        +
        Returns summary information about this sketch. Used for debugging.
        +
        +
        Parameters:
        +
        sketchSummary - if true includes sketch summary
        +
        dataDetail - if true includes data detail
        +
        Returns:
        +
        summary information about the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of an ItemsSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of an ItemsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of an ItemsSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of an ItemsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        downSample

        +
        public ItemsSketch<T> downSample​(int newK)
        +
        From an existing sketch, this creates a new sketch that can have a smaller K. + The original sketch is not modified.
        +
        +
        Parameters:
        +
        newK - the new K that must be smaller than current K. + It is required that this.getK() = newK * 2^(nonnegative integer).
        +
        Returns:
        +
        the new sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNumRetained

        +
        public int getNumRetained()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the number of quantiles retained by the sketch.
        +
        +
        Specified by:
        +
        getNumRetained in interface QuantilesAPI
        +
        Returns:
        +
        the number of quantiles retained by the sketch
        +
        +
      • +
      + + + +
        +
      • +

        putMemory

        +
        public void putMemory​(org.apache.datasketches.memory.WritableMemory dstMem,
        +                      ArrayOfItemsSerDe<T> serDe)
        +
        Puts the current sketch into the given Memory if there is sufficient space. + Otherwise, throws an error.
        +
        +
        Parameters:
        +
        dstMem - the given memory.
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        +
      • +
      + + + + + + + + + +
        +
      • +

        update

        +
        public void update​(T item)
        +
        Description copied from interface: QuantilesGenericAPI
        +
        Updates this sketch with the given item.
        +
        +
        Specified by:
        +
        update in interface QuantilesGenericAPI<T>
        +
        Parameters:
        +
        item - from a stream of items. Nulls are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchIterator.html new file mode 100644 index 000000000..cc556da62 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchIterator.html @@ -0,0 +1,342 @@ + + + + + +ItemsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ItemsSketchIterator<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantiles.ItemsSketchIterator<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public T getQuantile()
        +
        Description copied from interface: QuantilesGenericSketchIterator
        +
        Gets the generic quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesGenericSketchIterator<T>
        +
        Returns:
        +
        the generic quantile at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        getWeight

        +
        public long getWeight()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Gets the natural weight at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getWeight in interface QuantilesSketchIterator
        +
        Returns:
        +
        the natural weight at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        next

        +
        public boolean next()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Advances the index and checks if it is valid. + The state of this iterator is undefined before the first call of this method.
        +
        +
        Specified by:
        +
        next in interface QuantilesSketchIterator
        +
        Returns:
        +
        true if the next index is valid.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchSortedView.html new file mode 100644 index 000000000..31c01bf11 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsSketchSortedView.html @@ -0,0 +1,699 @@ + + + + + +ItemsSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ItemsSketchSortedView<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantiles.ItemsSketchSortedView<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        If the sketch is empty this returns null.

        + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface GenericSortedView<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getCumulativeWeights

        +
        public long[] getCumulativeWeights()
        +
        Description copied from interface: SortedView
        +
        Returns the array of cumulative weights from the sketch. + Also known as the natural ranks, which are the Natural Numbers on the interval [1, N].
        +
        +
        Specified by:
        +
        getCumulativeWeights in interface SortedView
        +
        Returns:
        +
        the array of cumulative weights (or natural ranks).
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public T getMaxItem()
        +
        Description copied from interface: GenericSortedView
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface GenericSortedView<T>
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public T getMinItem()
        +
        Description copied from interface: GenericSortedView
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface GenericSortedView<T>
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: SortedView
        +
        Returns the total number of items presented to the sourcing sketch.
        +
        +
        Specified by:
        +
        getN in interface SortedView
        +
        Returns:
        +
        the total number of items presented to the sourcing sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getPartitionBoundaries

        +
        public GenericPartitionBoundaries<T> getPartitionBoundaries​(int numEquallySized,
        +                                                            QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: PartitioningFeature
        +
        This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
        +
        +
        Specified by:
        +
        getPartitionBoundaries in interface PartitioningFeature<T>
        +
        Parameters:
        +
        numEquallySized - an integer that specifies the number of equally sized partitions between + getMinItem() and + getMaxItem(). + This must be a positive integer greater than zero. +
          +
        • A 1 will return: minItem, maxItem.
        • +
        • A 2 will return: minItem, median quantile, maxItem.
        • +
        • Etc.
        • +
        +
        searchCrit - If INCLUSIVE, all the returned quantiles are the upper boundaries of the equally sized partitions + with the exception of the lowest returned quantile, which is the lowest boundary of the lowest ranked partition. + If EXCLUSIVE, all the returned quantiles are the lower boundaries of the equally sized partitions + with the exception of the highest returned quantile, which is the upper boundary of the highest ranked partition.
        +
        Returns:
        +
        an instance of GenericPartitionBoundaries.
        +
        +
      • +
      + + + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(T[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface GenericSortedView<T>
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public T getQuantile​(double rank,
        +                     QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface GenericSortedView<T>
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getQuantiles

        +
        public T[] getQuantiles()
        +
        Description copied from interface: GenericSortedView
        +
        Returns the full array of quantiles.
        +
        +
        Specified by:
        +
        getQuantiles in interface GenericSortedView<T>
        +
        Returns:
        +
        the full array of quantiles.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRank

        +
        public double getRank​(T quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: GenericSortedView
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface GenericSortedView<T>
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: SortedView
        +
        Returns true if this sorted view is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface SortedView
        +
        Returns:
        +
        true if this sorted view is empty.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/ItemsUnion.html b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsUnion.html new file mode 100644 index 000000000..ebfc15e98 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/ItemsUnion.html @@ -0,0 +1,687 @@ + + + + + +ItemsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ItemsUnion<T>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    T - type of item
    +
    +
    +
    public final class ItemsUnion<T>
    +extends Object
    +
    The API for Union operations for generic ItemsSketches
    +
    +
    Author:
    +
    Lee Rhodes, Alexander Saydakov
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsUnion<T> getInstance​(Class<T> clazz,
        +                                            Comparator<? super T> comparator)
        +
        Create an instance of ItemsUnion with the default k
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        clazz - The sketch class type
        +
        comparator - to compare items
        +
        Returns:
        +
        an instance of ItemsUnion
        +
        +
      • +
      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsUnion<T> getInstance​(Class<T> clazz,
        +                                            int maxK,
        +                                            Comparator<? super T> comparator)
        +
        Create an instance of ItemsUnion
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        clazz - The sketch class type
        +
        maxK - determines the accuracy and size of the union and is a maximum. + The effective k can be smaller due to unions with smaller k sketches. + It is recommended that maxK be a power of 2 to enable unioning of sketches with a + different k.
        +
        comparator - to compare items
        +
        Returns:
        +
        an instance of ItemsUnion
        +
        +
      • +
      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsUnion<T> getInstance​(Class<T> clazz,
        +                                            org.apache.datasketches.memory.Memory srcMem,
        +                                            Comparator<? super T> comparator,
        +                                            ArrayOfItemsSerDe<T> serDe)
        +
        Heapify the given srcMem into a Union object.
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        clazz - The sketch class type + A reference to srcMem will not be maintained internally.
        +
        srcMem - the given srcMem.
        +
        comparator - to compare items
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        an instance of ItemsUnion
        +
        +
      • +
      + + + +
        +
      • +

        getInstance

        +
        public static <T> ItemsUnion<T> getInstance​(ItemsSketch<T> sketch)
        +
        Create an instance of ItemsUnion based on ItemsSketch
        +
        +
        Type Parameters:
        +
        T - The sketch data type
        +
        Parameters:
        +
        sketch - the basis of the union
        +
        Returns:
        +
        an instance of ItemsUnion
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public void union​(ItemsSketch<T> sketchIn)
        +
        Iterative union operation, which means this method can be repeatedly called. + Merges the given sketch into this union object. + The given sketch is not modified. + It is required that the ratio of the two K's be a power of 2. + This is easily satisfied if each of the K's are already a power of 2. + If the given sketch is null or empty it is ignored. + +

        It is required that the results of the union operation, which can be obtained at any time, + is obtained from getResult().

        +
        +
        Parameters:
        +
        sketchIn - the sketch to be merged into this one.
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public void union​(org.apache.datasketches.memory.Memory srcMem,
        +                  ArrayOfItemsSerDe<T> serDe)
        +
        Iterative union operation, which means this method can be repeatedly called. + Merges the given Memory image of a ItemsSketch into this union object. + The given Memory object is not modified and a link to it is not retained. + It is required that the ratio of the two K's be a power of 2. + This is easily satisfied if each of the K's are already a power of 2. + If the given sketch is null or empty it is ignored. + +

        It is required that the results of the union operation, which can be obtained at any time, + is obtained from getResult().

        +
        +
        Parameters:
        +
        srcMem - Memory image of sketch to be merged
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(T dataItem)
        +
        Update this union with the given dataItem.
        +
        +
        Parameters:
        +
        dataItem - The given datum.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public ItemsSketch<T> getResult()
        +
        Gets the result of this Union operation as a copy of the internal state. + This enables further union update operations on this state.
        +
        +
        Returns:
        +
        the result of this Union operation
        +
        +
      • +
      + + + +
        +
      • +

        getResultAndReset

        +
        public ItemsSketch<T> getResultAndReset()
        +
        Gets the result of this Union operation (without a copy) and resets this Union to the + virgin state.
        +
        +
        Returns:
        +
        the result of this Union operation and reset.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this Union to a virgin state. + Keeps maxK, comparator and clazz
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Returns true if this union is empty
        +
        +
        Returns:
        +
        true if this union is empty
        +
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        public boolean isDirect()
        +
        Returns true if this union is direct
        +
        +
        Returns:
        +
        true if this union is direct
        +
        +
      • +
      + + + +
        +
      • +

        getMaxK

        +
        public int getMaxK()
        +
        Returns the configured maxK of this Union.
        +
        +
        Returns:
        +
        the configured maxK of this Union.
        +
        +
      • +
      + + + +
        +
      • +

        getEffectiveK

        +
        public int getEffectiveK()
        +
        Returns the effective k of this Union.
        +
        +
        Returns:
        +
        the effective k of this Union.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns summary information about the backing sketch.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean sketchSummary,
        +                       boolean dataDetail)
        +
        Returns summary information about the backing sketch. Used for debugging.
        +
        +
        Parameters:
        +
        sketchSummary - if true includes sketch summary
        +
        dataDetail - if true includes data detail
        +
        Returns:
        +
        summary information about the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<T> serDe)
        +
        Serialize this union to a byte array. Result is an ItemsSketch, serialized in an + unordered, non-compact form. The resulting byte[] can be passed to getInstance for either a + sketch or union.
        +
        +
        Parameters:
        +
        serDe - an instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        byte array of this union
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/UpdateDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/UpdateDoublesSketch.html new file mode 100644 index 000000000..7aee6fa42 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/UpdateDoublesSketch.html @@ -0,0 +1,397 @@ + + + + + +UpdateDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UpdateDoublesSketch

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        wrap

        +
        public static UpdateDoublesSketch wrap​(org.apache.datasketches.memory.WritableMemory srcMem)
        +
        Wrap this sketch around the given non-compact Memory image of a DoublesSketch.
        +
        +
        Parameters:
        +
        srcMem - the given Memory image of a DoublesSketch that may have data,
        +
        Returns:
        +
        a sketch that wraps the given srcMem
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(double item)
        +
        Updates this sketch with the given double data item
        +
        +
        Parameters:
        +
        item - an item from a stream of items. NaNs are ignored.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static UpdateDoublesSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactDoublesSketch compact()
        +
        +
        Returns:
        +
        a CompactDoublesSketch of this class
        +
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactDoublesSketch compact​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns a compact version of this sketch. If passing in a Memory object, the compact sketch + will use that direct memory; otherwise, an on-heap sketch will be returned.
        +
        +
        Parameters:
        +
        dstMem - An optional target memory to hold the sketch.
        +
        Returns:
        +
        A compact version of this sketch
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ClassicUtil.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ClassicUtil.html new file mode 100644 index 000000000..19b16f611 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ClassicUtil.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.ClassicUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.ClassicUtil

+
+
No usage of org.apache.datasketches.quantiles.ClassicUtil
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/CompactDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/CompactDoublesSketch.html new file mode 100644 index 000000000..b900bbc28 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/CompactDoublesSketch.html @@ -0,0 +1,208 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.CompactDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.CompactDoublesSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketch.html new file mode 100644 index 000000000..4fb1da91a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketch.html @@ -0,0 +1,284 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.DoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.DoublesSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchBuilder.html new file mode 100644 index 000000000..c9b183687 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchBuilder.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.DoublesSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.DoublesSketchBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchIterator.html new file mode 100644 index 000000000..1008c02cb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchIterator.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.DoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.DoublesSketchIterator

+
+
No usage of org.apache.datasketches.quantiles.DoublesSketchIterator
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchSortedView.html new file mode 100644 index 000000000..9808348e0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesSketchSortedView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.DoublesSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.DoublesSketchSortedView

+
+
No usage of org.apache.datasketches.quantiles.DoublesSketchSortedView
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnion.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnion.html new file mode 100644 index 000000000..7f920bb17 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnion.html @@ -0,0 +1,237 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.DoublesUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.DoublesUnion

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use DoublesUnion 
    PackageDescription
    org.apache.datasketches.quantiles +
    The quantiles package contains stochastic streaming algorithms that enable single-pass + analysis of the distribution of a stream of quantiles.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of DoublesUnion in org.apache.datasketches.quantiles

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.quantiles that return DoublesUnion 
      Modifier and TypeMethodDescription
      DoublesUnionDoublesUnionBuilder.build() +
      Returns a new empty Union object with the current configuration of this Builder.
      +
      DoublesUnionDoublesUnionBuilder.build​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Returns a new empty Union object with the current configuration of this Builder + and the specified backing destination Memory store.
      +
      static DoublesUnionDoublesUnion.heapify​(org.apache.datasketches.memory.Memory srcMem) +
      Returns a Heap Union object that has been initialized with the data from the given memory + image of a sketch.
      +
      static DoublesUnionDoublesUnion.heapify​(DoublesSketch sketch) +
      Returns a Heap Union object that has been initialized with the data from the given sketch.
      +
      static DoublesUnionDoublesUnion.wrap​(org.apache.datasketches.memory.Memory mem) +
      Returns a read-only Union object that wraps off-heap data of the given memory image of + a sketch.
      +
      static DoublesUnionDoublesUnion.wrap​(org.apache.datasketches.memory.WritableMemory mem) +
      Returns an updatable Union object that wraps off-heap data of the given memory image of + a sketch.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnionBuilder.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnionBuilder.html new file mode 100644 index 000000000..0092db972 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/DoublesUnionBuilder.html @@ -0,0 +1,206 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.DoublesUnionBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.DoublesUnionBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketch.html new file mode 100644 index 000000000..a46366e42 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketch.html @@ -0,0 +1,264 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.ItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.ItemsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchIterator.html new file mode 100644 index 000000000..ed1ff054e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchIterator.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.ItemsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.ItemsSketchIterator

+
+
No usage of org.apache.datasketches.quantiles.ItemsSketchIterator
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchSortedView.html new file mode 100644 index 000000000..1af855c90 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsSketchSortedView.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.ItemsSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.ItemsSketchSortedView

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsUnion.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsUnion.html new file mode 100644 index 000000000..e7a9b39e7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/ItemsUnion.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.ItemsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.ItemsUnion

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/class-use/UpdateDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/UpdateDoublesSketch.html new file mode 100644 index 000000000..37bb53d98 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/class-use/UpdateDoublesSketch.html @@ -0,0 +1,242 @@ + + + + + +Uses of Class org.apache.datasketches.quantiles.UpdateDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantiles.UpdateDoublesSketch

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use UpdateDoublesSketch 
    PackageDescription
    org.apache.datasketches.quantiles +
    The quantiles package contains stochastic streaming algorithms that enable single-pass + analysis of the distribution of a stream of quantiles.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of UpdateDoublesSketch in org.apache.datasketches.quantiles

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.quantiles that return UpdateDoublesSketch 
      Modifier and TypeMethodDescription
      UpdateDoublesSketchDoublesSketchBuilder.build() +
      Returns an UpdateDoublesSketch with the current configuration of this Builder.
      +
      UpdateDoublesSketchDoublesSketchBuilder.build​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Returns a quantiles UpdateDoublesSketch with the current configuration of this builder + and the specified backing destination Memory store.
      +
      abstract UpdateDoublesSketchDoublesUnion.getResult() +
      Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch.
      +
      abstract UpdateDoublesSketchDoublesUnion.getResult​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Places the result of this Union into the provided memory as an UpdateDoublesSketch, + which enables further update operations on the resulting sketch.
      +
      abstract UpdateDoublesSketchDoublesUnion.getResultAndReset() +
      Gets the result of this Union as an UpdateDoublesSketch, which enables further update + operations on the resulting sketch.
      +
      static UpdateDoublesSketchUpdateDoublesSketch.heapify​(org.apache.datasketches.memory.Memory srcMem) 
      static UpdateDoublesSketchUpdateDoublesSketch.wrap​(org.apache.datasketches.memory.WritableMemory srcMem) +
      Wrap this sketch around the given non-compact Memory image of a DoublesSketch.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/package-summary.html b/docs/5.0.X/org/apache/datasketches/quantiles/package-summary.html new file mode 100644 index 000000000..0fcafaaf2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/package-summary.html @@ -0,0 +1,255 @@ + + + + + +org.apache.datasketches.quantiles (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.quantiles

+
+
+
+ + +

The quantiles package contains stochastic streaming algorithms that enable single-pass + analysis of the distribution of a stream of quantiles. +

+
+
See Also:
+
DoublesSketch, +ItemsSketch
+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ClassicUtil +
    Utilities for the classic quantiles sketches and independent of the type.
    +
    CompactDoublesSketch +
    Compact sketches are inherently read ony.
    +
    DoublesSketch +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using doubles, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
    +
    DoublesSketchBuilder +
    For building a new quantiles DoublesSketch.
    +
    DoublesSketchIterator +
    Iterator over DoublesSketch.
    +
    DoublesSketchSortedView +
    The SortedView of the Classic Quantiles DoublesSketch.
    +
    DoublesUnion +
    The API for Union operations for quantiles DoublesSketches
    +
    DoublesUnionBuilder +
    For building a new DoublesSketch Union operation.
    +
    ItemsSketch<T> +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using generic items, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
    +
    ItemsSketchIterator<T> +
    Iterator over ItemsSketch.
    +
    ItemsSketchSortedView<T> +
    The SortedView of the Classic Quantiles ItemsSketch.
    +
    ItemsUnion<T> +
    The API for Union operations for generic ItemsSketches
    +
    UpdateDoublesSketch 
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/package-tree.html b/docs/5.0.X/org/apache/datasketches/quantiles/package-tree.html new file mode 100644 index 000000000..90da216ba --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/package-tree.html @@ -0,0 +1,179 @@ + + + + + +org.apache.datasketches.quantiles Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.quantiles

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantiles/package-use.html b/docs/5.0.X/org/apache/datasketches/quantiles/package-use.html new file mode 100644 index 000000000..6caf2433e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantiles/package-use.html @@ -0,0 +1,239 @@ + + + + + +Uses of Package org.apache.datasketches.quantiles (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.quantiles

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use org.apache.datasketches.quantiles 
    PackageDescription
    org.apache.datasketches.quantiles +
    The quantiles package contains stochastic streaming algorithms that enable single-pass + analysis of the distribution of a stream of quantiles.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Classes in org.apache.datasketches.quantiles used by org.apache.datasketches.quantiles 
    ClassDescription
    CompactDoublesSketch +
    Compact sketches are inherently read ony.
    +
    DoublesSketch +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using doubles, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
    +
    DoublesSketchBuilder +
    For building a new quantiles DoublesSketch.
    +
    DoublesUnion +
    The API for Union operations for quantiles DoublesSketches
    +
    DoublesUnionBuilder +
    For building a new DoublesSketch Union operation.
    +
    ItemsSketch +
    This is an implementation of the Low Discrepancy Mergeable Quantiles Sketch, using generic items, + described in section 3.2 of the journal version of the paper "Mergeable Summaries" + by Agarwal, Cormode, Huang, Phillips, Wei, and Yi:
    +
    ItemsSketchSortedView +
    The SortedView of the Classic Quantiles ItemsSketch.
    +
    ItemsUnion +
    The API for Union operations for generic ItemsSketches
    +
    UpdateDoublesSketch 
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/BinarySearch.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/BinarySearch.html new file mode 100644 index 000000000..d08de3255 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/BinarySearch.html @@ -0,0 +1,397 @@ + + + + + +BinarySearch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BinarySearch

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantilescommon.BinarySearch
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class BinarySearch
    +extends Object
    +
    Contains common equality binary search algorithms.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      BinarySearch() 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static intfind​(double[] arr, + int low, + int high, + double v) +
      Binary Search for the index of the exact double value in the given search range.
      +
      static intfind​(float[] arr, + int low, + int high, + float v) +
      Binary Search for the index of the exact float value in the given search range.
      +
      static intfind​(long[] arr, + int low, + int high, + long v) +
      Binary Search for the index of the exact long value in the given search range.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BinarySearch

        +
        public BinarySearch()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        find

        +
        public static int find​(float[] arr,
        +                       int low,
        +                       int high,
        +                       float v)
        +
        Binary Search for the index of the exact float value in the given search range. + If -1 is returned there are no values in the search range that equals the given value.
        +
        +
        Parameters:
        +
        arr - The given ordered array to search.
        +
        low - the index of the lowest value of the search range
        +
        high - the index of the highest value of the search range
        +
        v - the value to search for
        +
        Returns:
        +
        return the index of the value, if found, otherwise, return -1;
        +
        +
      • +
      + + + +
        +
      • +

        find

        +
        public static int find​(double[] arr,
        +                       int low,
        +                       int high,
        +                       double v)
        +
        Binary Search for the index of the exact double value in the given search range. + If -1 is returned there are no values in the search range that equals the given value.
        +
        +
        Parameters:
        +
        arr - The given ordered array to search.
        +
        low - the index of the lowest value of the search range
        +
        high - the index of the highest value of the search range
        +
        v - the value to search for
        +
        Returns:
        +
        return the index of the value, if found, otherwise, return -1;
        +
        +
      • +
      + + + +
        +
      • +

        find

        +
        public static int find​(long[] arr,
        +                       int low,
        +                       int high,
        +                       long v)
        +
        Binary Search for the index of the exact long value in the given search range. + If -1 is returned there are no values in the search range that equals the given value.
        +
        +
        Parameters:
        +
        arr - The given ordered array to search.
        +
        low - the index of the lowest value of the search range
        +
        high - the index of the highest value of the search range
        +
        v - the value to search for
        +
        Returns:
        +
        return the index of the value, if found, otherwise, return -1;
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedView.html new file mode 100644 index 000000000..fd98eca1e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedView.html @@ -0,0 +1,531 @@ + + + + + +DoublesSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface DoublesSortedView

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and TypeMethodDescription
      default double[]getCDF​(double[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      doublegetMaxItem() +
      Returns the maximum item of the stream.
      +
      doublegetMinItem() +
      Returns the minimum item of the stream.
      +
      default double[]getPMF​(double[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      doublegetQuantile​(double rank, + QuantileSearchCriteria searchCrit) +
      Gets the approximate quantile of the given normalized rank and the given search criterion.
      +
      double[]getQuantiles() +
      Returns an array of all retained quantiles by the sketch.
      +
      doublegetRank​(double quantile, + QuantileSearchCriteria searchCrit) +
      Gets the normalized rank corresponding to the given a quantile.
      +
      DoublesSortedViewIteratoriterator() +
      Returns an iterator for this Sorted View.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCDF

        +
        default double[] getCDF​(double[] splitPoints,
        +                        QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        double getMaxItem()
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the maximum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        double getMinItem()
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the minimum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        default double[] getPMF​(double[] splitPoints,
        +                        QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        double getQuantile​(double rank,
        +                   QuantileSearchCriteria searchCrit)
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        double[] getQuantiles()
        +
        Returns an array of all retained quantiles by the sketch.
        +
        +
        Returns:
        +
        an array of all retained quantiles by the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        double getRank​(double quantile,
        +               QuantileSearchCriteria searchCrit)
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedViewIterator.html new file mode 100644 index 000000000..a127500b1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/DoublesSortedViewIterator.html @@ -0,0 +1,349 @@ + + + + + +DoublesSortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoublesSortedViewIterator

+
+
+ +
+
    +
  • +
    +
    public final class DoublesSortedViewIterator
    +extends SortedViewIterator
    +
    Iterator over quantile sketches of primitive type double.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoublesSortedViewIterator

        +
        public DoublesSortedViewIterator​(double[] quantiles,
        +                                 long[] cumWeights)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public double getQuantile()
        +
        Gets the quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedView.html new file mode 100644 index 000000000..e140a0017 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedView.html @@ -0,0 +1,531 @@ + + + + + +FloatsSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface FloatsSortedView

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and TypeMethodDescription
      default double[]getCDF​(float[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      floatgetMaxItem() +
      Returns the maximum item of the stream.
      +
      floatgetMinItem() +
      Returns the minimum item of the stream.
      +
      default double[]getPMF​(float[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      floatgetQuantile​(double rank, + QuantileSearchCriteria searchCrit) +
      Gets the approximate quantile of the given normalized rank and the given search criterion.
      +
      float[]getQuantiles() +
      Returns an array of all retained quantiles by the sketch.
      +
      doublegetRank​(float quantile, + QuantileSearchCriteria searchCrit) +
      Gets the normalized rank corresponding to the given a quantile.
      +
      FloatsSortedViewIteratoriterator() +
      Returns an iterator for this Sorted View.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCDF

        +
        default double[] getCDF​(float[] splitPoints,
        +                        QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        float getMaxItem()
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the maximum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        float getMinItem()
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the minimum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        default double[] getPMF​(float[] splitPoints,
        +                        QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        float getQuantile​(double rank,
        +                  QuantileSearchCriteria searchCrit)
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        float[] getQuantiles()
        +
        Returns an array of all retained quantiles by the sketch.
        +
        +
        Returns:
        +
        an array of all retained quantiles by the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        double getRank​(float quantile,
        +               QuantileSearchCriteria searchCrit)
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedViewIterator.html new file mode 100644 index 000000000..049c40436 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/FloatsSortedViewIterator.html @@ -0,0 +1,349 @@ + + + + + +FloatsSortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FloatsSortedViewIterator

+
+
+ +
+
    +
  • +
    +
    public final class FloatsSortedViewIterator
    +extends SortedViewIterator
    +
    Iterator over quantile sketches of primitive type float.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FloatsSortedViewIterator

        +
        public FloatsSortedViewIterator​(float[] quantiles,
        +                                long[] cumWeights)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public float getQuantile()
        +
        Gets the quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.Inequality.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.Inequality.html new file mode 100644 index 000000000..96de9b7d7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.Inequality.html @@ -0,0 +1,492 @@ + + + + + +GenericInequalitySearch.Inequality (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum GenericInequalitySearch.Inequality

+
+
+ +
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      EQ +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the adjacent pair of + values {A,B} such that A ≤ V ≤ B.
      +
      GE +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A < V ≤ B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      GT +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A ≤ V < B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      LE +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A ≤ V < B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      LT +
      Given a sorted array of increasing values arr[] and a key value v, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A < v ≤ B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        LT

        +
        public static final GenericInequalitySearch.Inequality LT
        +
        Given a sorted array of increasing values arr[] and a key value v, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A < v ≤ B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v > arr[high], return arr[high].
        + If v ≤ arr[low], return -1.
        + Else return index of A.

        +
      • +
      + + + +
        +
      • +

        LE

        +
        public static final GenericInequalitySearch.Inequality LE
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A ≤ V < B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v ≥ arr[high], return arr[high].
        + If v < arr[low], return -1.
        + Else return index of A.

        +
      • +
      + + + +
        +
      • +

        EQ

        +
        public static final GenericInequalitySearch.Inequality EQ
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the adjacent pair of + values {A,B} such that A ≤ V ≤ B. + The returned value from the binary search algorithm will be the index of A or B, + if one of them is equal to V, or -1 if V is not equal to either one.
        +
      • +
      + + + +
        +
      • +

        GE

        +
        public static final GenericInequalitySearch.Inequality GE
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A < V ≤ B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v ≤ arr[low], return arr[low].
        + If v > arr[high], return -1.
        + Else return index of B.

        +
      • +
      + + + +
        +
      • +

        GT

        +
        public static final GenericInequalitySearch.Inequality GT
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A ≤ V < B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v < arr[low], return arr[low].
        + If v ≥ arr[high], return -1.
        + Else return index of B.

        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static GenericInequalitySearch.Inequality[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (GenericInequalitySearch.Inequality c : GenericInequalitySearch.Inequality.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static GenericInequalitySearch.Inequality valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.html new file mode 100644 index 000000000..d50d98089 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericInequalitySearch.html @@ -0,0 +1,388 @@ + + + + + +GenericInequalitySearch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GenericInequalitySearch

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantilescommon.GenericInequalitySearch
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class GenericInequalitySearch
    +extends Object
    +
    This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values. The inequality criteria include + <, ≤, ==, ≥, >. All the inequality criteria use the same search algorithm. + (Although == is not an inequality, it is included for convenience.) + +

    In order to make the searching unique and unambiguous, we modified the traditional binary + search algorithm to search for adjacent pairs of values {A, B} in the values array + instead of just a single value, where a and b are the array indices of two + adjacent values in the array. For all the search criteria, when the algorithm has narrowed the + search down to a single value or adjacent pair of values, the resolve() method provides the + final result of the search. If there is no valid value in the array that satisfies the search + criterion, the algorithm will return -1 to the caller.

    + +

    Given a sorted array of values arr[] and a search key value v, the algorithms for + the searching criteria are given with each enum criterion.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    See Also:
    +
    + Sketching Quantiles and Ranks Tutorial
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GenericInequalitySearch

        +
        public GenericInequalitySearch()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        find

        +
        public static <T> int find​(T[] arr,
        +                           int low,
        +                           int high,
        +                           T v,
        +                           GenericInequalitySearch.Inequality crit,
        +                           Comparator<T> comparator)
        +
        Binary Search for the index of the generic value in the given search range that satisfies + the given Inequality criterion. + If -1 is returned there are no values in the search range that satisfy the inequality.
        +
        +
        Type Parameters:
        +
        T - The generic type of value to be used in the search process.
        +
        Parameters:
        +
        arr - the given array of comparable values that must be sorted. + The array must not be null or empty and the values of the array must not be null (or NaN) + in the range [low, high].
        +
        low - the lowest index of the lowest value in the search range, inclusive.
        +
        high - the highest index of the highest value in the search range, inclusive.
        +
        v - the value to search for. It must not be null (or NaN).
        +
        crit - one of the Inequality criteria: LT, LE, EQ, GE, GT. It must not be null.
        +
        comparator - for the type T. + It must not be null. It must return: -1 if A < B, 0 if A == B, and +1 if A > B.
        +
        Returns:
        +
        the index of the value in the given search range that satisfies the Inequality criterion.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericPartitionBoundaries.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericPartitionBoundaries.html new file mode 100644 index 000000000..e7e1fca8a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericPartitionBoundaries.html @@ -0,0 +1,555 @@ + + + + + +GenericPartitionBoundaries (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GenericPartitionBoundaries<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantilescommon.GenericPartitionBoundaries<T>
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + + + +
        +
      • +

        GenericPartitionBoundaries

        +
        public GenericPartitionBoundaries​(long totalN,
        +                                  T[] boundaries,
        +                                  long[] natRanks,
        +                                  double[] normRanks,
        +                                  T maxItem,
        +                                  T minItem,
        +                                  QuantileSearchCriteria searchCrit)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: PartitionBoundaries
        +
        Gets the length of the input stream offered to the underlying sketch.
        +
        +
        Specified by:
        +
        getN in interface PartitionBoundaries
        +
        Returns:
        +
        the length of the input stream offered to the underlying sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getBoundaries

        +
        public T[] getBoundaries()
        +
        Gets an ordered array of boundaries that sequentially define the upper and lower boundaries of partitions. + These partitions are to be constructed by an external process. Each boundary is essentially a reference and + should uniquely identify an item or a set of identical items from the original stream of data fed to the + originating sketch. + +

        Assume boundaries array has size N + 1. Let the indicies be sequentially numbered from 0 to N. + The number of partitions is always one less than the size of the boundaries array. + Let the the partitions be sequentially numbered from 1 to N. + +

        If these results were computed using QuantileSearchCriteria.INCLUSIVE then these sequential boundaries + are to be interpreted as follows: +

          +
        • Partition 1: include all items ≥ index 0 and ≤ index 1.
        • +
        • Partition 2: include all items > index 1 and ≤ index 2.
        • +
        • Partition N: include all items > index N-1 and ≤ index N.
        • +
        + +

        If these results were computed using QuantileSearchCriteria.EXCLUSIVE then these sequential boundaries + are to be interpreted as follows: +

          +
        • Partition 1: include all items ≥ index 0 and < index 1.
        • +
        • Partition 2: include all items ≥ index 1 and < index 2.
        • +
        • Partition N: include all items ≥ index N-1 and ≤ index N.
        • +
        +
        +
        Returns:
        +
        an array of boundaries that sequentially define the upper and lower boundaries of partitions.
        +
        +
      • +
      + + + +
        +
      • +

        getNaturalRanks

        +
        public long[] getNaturalRanks()
        +
        Description copied from interface: PartitionBoundaries
        +
        Gets an ordered array of natural ranks of the associated array of partition boundaries utilizing + a specified search criterion. Natural ranks are integral values on the interval [1, N]
        +
        +
        Specified by:
        +
        getNaturalRanks in interface PartitionBoundaries
        +
        Returns:
        +
        an array of natural ranks.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRanks

        +
        public double[] getNormalizedRanks()
        +
        Description copied from interface: PartitionBoundaries
        +
        Gets an ordered array of normalized ranks of the associated array of partition boundaries utilizing + a specified search criterion. Normalized ranks are double values on the interval [0.0, 1.0].
        +
        +
        Specified by:
        +
        getNormalizedRanks in interface PartitionBoundaries
        +
        Returns:
        +
        an array of normalized ranks.
        +
        +
      • +
      + + + +
        +
      • +

        getNumDeltaItems

        +
        public long[] getNumDeltaItems()
        +
        Description copied from interface: PartitionBoundaries
        +
        Gets the number of items to be included for each partition as an array. + The count at index 0 is 0. The number of items included in the first partition, defined by the boundaries at + index 0 and index 1, is at index 1 in this array, etc.
        +
        +
        Specified by:
        +
        getNumDeltaItems in interface PartitionBoundaries
        +
        Returns:
        +
        the number of items to be included for each partition as an array.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getMaxItem

        +
        public T getMaxItem()
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the maximum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public T getMinItem()
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the minimum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedView.html new file mode 100644 index 000000000..cd78a169e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedView.html @@ -0,0 +1,572 @@ + + + + + +GenericSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface GenericSortedView<T>

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      double[]getCDF​(T[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      TgetMaxItem() +
      Returns the maximum item of the stream.
      +
      TgetMinItem() +
      Returns the minimum item of the stream.
      +
      double[]getPMF​(T[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      TgetQuantile​(double rank, + QuantileSearchCriteria searchCrit) +
      Gets the approximate quantile of the given normalized rank and the given search criterion.
      +
      T[]getQuantiles() +
      Returns the full array of quantiles.
      +
      doublegetRank​(T quantile, + QuantileSearchCriteria searchCrit) +
      Gets the normalized rank corresponding to the given a quantile.
      +
      GenericSortedViewIterator<T>iterator() +
      Returns an iterator for this Sorted View.
      +
      static <T> voidvalidateItems​(T[] items, + Comparator<? super T> comparator) +
      Checks the sequential validity of the given array of generic items.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        getCDF

        +
        double[] getCDF​(T[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        If the sketch is empty this returns null.

        + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        T getMaxItem()
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the maximum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        T getMinItem()
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the minimum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + + + +
        +
      • +

        getPMF

        +
        double[] getPMF​(T[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        T getQuantile​(double rank,
        +              QuantileSearchCriteria searchCrit)
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        T[] getQuantiles()
        +
        Returns the full array of quantiles.
        +
        +
        Returns:
        +
        the full array of quantiles.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRank

        +
        double getRank​(T quantile,
        +               QuantileSearchCriteria searchCrit)
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + + + + + +
        +
      • +

        validateItems

        +
        static <T> void validateItems​(T[] items,
        +                              Comparator<? super T> comparator)
        +
        Checks the sequential validity of the given array of generic items. + They must be unique, monotonically increasing and not null.
        +
        +
        Type Parameters:
        +
        T - the data type
        +
        Parameters:
        +
        items - given array of generic items
        +
        comparator - the comparator for generic item data type T
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedViewIterator.html new file mode 100644 index 000000000..3f174f7c3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/GenericSortedViewIterator.html @@ -0,0 +1,355 @@ + + + + + +GenericSortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GenericSortedViewIterator<T>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    T - The generic quantile type
    +
    +
    +
    public class GenericSortedViewIterator<T>
    +extends SortedViewIterator
    +
    Iterator over quantile sketches of generic type.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + + + +
        +
      • +

        GenericSortedViewIterator

        +
        public GenericSortedViewIterator​(T[] quantiles,
        +                                 long[] cumWeights)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public T getQuantile()
        +
        Gets the quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/InequalitySearch.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/InequalitySearch.html new file mode 100644 index 000000000..accbaf307 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/InequalitySearch.html @@ -0,0 +1,807 @@ + + + + + +InequalitySearch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum InequalitySearch

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<InequalitySearch>
    +
    +
    +
    public enum InequalitySearch
    +extends Enum<InequalitySearch>
    +
    This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values. The inequality criteria include + <, ≤, ==, ≥, >. All the inequality criteria use the same search algorithm. + (Although == is not an inequality, it is included for convenience.) + +

    In order to make the searching unique and unambiguous, we modified the traditional binary + search algorithm to search for adjacent pairs of values {A, B} in the values array + instead of just a single value, where a and b are the array indices of two + adjacent values in the array. For all the search criteria, when the algorithm has narrowed the + search down to a single value or adjacent pair of values, the resolve() method provides the + final result of the search. If there is no valid value in the array that satisfies the search + criterion, the algorithm will return -1 to the caller.

    + +

    Given a sorted array of values arr[] and a search key value v, the algorithms for + the searching criteria are given with each enum criterion.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    See Also:
    +
    + Sketching Quantiles and Ranks Tutorial
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      EQ +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the adjacent pair of + values {A,B} such that A ≤ V ≤ B.
      +
      GE +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A < V ≤ B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      GT +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A ≤ V < B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      LE +
      Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A ≤ V < B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      LT +
      Given a sorted array of increasing values arr[] and a key value v, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A < v ≤ B.
      + Let low = index of the lowest value in the range.
      + Let high = index of the highest value in the range.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethodDescription
      abstract Stringdesc​(double[] arr, + int low, + int high, + double v, + int idx) +
      Optional call that describes the details of the results of the search.
      +
      abstract Stringdesc​(float[] arr, + int low, + int high, + float v, + int idx) +
      Optional call that describes the details of the results of the search.
      +
      abstract Stringdesc​(long[] arr, + int low, + int high, + double v, + int idx) +
      Optional call that describes the details of the results of the search.
      +
      abstract Stringdesc​(long[] arr, + int low, + int high, + long v, + int idx) +
      Optional call that describes the details of the results of the search.
      +
      static intfind​(double[] arr, + int low, + int high, + double v, + InequalitySearch crit) +
      Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      static intfind​(float[] arr, + int low, + int high, + float v, + InequalitySearch crit) +
      Binary Search for the index of the float value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      static intfind​(long[] arr, + int low, + int high, + double v, + InequalitySearch crit) +
      Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      static intfind​(long[] arr, + int low, + int high, + long v, + InequalitySearch crit) +
      Binary Search for the index of the long value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      static InequalitySearchvalueOf​(String name) +
      Returns the enum constant of this type with the specified name.
      +
      static InequalitySearch[]values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        LT

        +
        public static final InequalitySearch LT
        +
        Given a sorted array of increasing values arr[] and a key value v, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A < v ≤ B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v > arr[high], return arr[high].
        + If v ≤ arr[low], return -1.
        + Else return index of A.

        +
      • +
      + + + +
        +
      • +

        LE

        +
        public static final InequalitySearch LE
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the highest adjacent pair of + values {A,B} such that A ≤ V < B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v ≥ arr[high], return arr[high].
        + If v < arr[low], return -1.
        + Else return index of A.

        +
      • +
      + + + +
        +
      • +

        EQ

        +
        public static final InequalitySearch EQ
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the adjacent pair of + values {A,B} such that A ≤ V ≤ B. + The returned value from the binary search algorithm will be the index of A or B, + if one of them is equal to V, or -1 if V is not equal to either one.
        +
      • +
      + + + +
        +
      • +

        GE

        +
        public static final InequalitySearch GE
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A < V ≤ B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v ≤ arr[low], return arr[low].
        + If v > arr[high], return -1.
        + Else return index of B.

        +
      • +
      + + + +
        +
      • +

        GT

        +
        public static final InequalitySearch GT
        +
        Given a sorted array of increasing values arr[] and a key value V, + this criterion instructs the binary search algorithm to find the lowest adjacent pair of + values {A,B} such that A ≤ V < B.
        + Let low = index of the lowest value in the range.
        + Let high = index of the highest value in the range. + +

        If v < arr[low], return arr[low].
        + If v ≥ arr[high], return -1.
        + Else return index of B.

        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static InequalitySearch[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (InequalitySearch c : InequalitySearch.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static InequalitySearch valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        desc

        +
        public abstract String desc​(double[] arr,
        +                            int low,
        +                            int high,
        +                            double v,
        +                            int idx)
        +
        Optional call that describes the details of the results of the search. + Used primarily for debugging.
        +
        +
        Parameters:
        +
        arr - The underlying sorted array of values
        +
        low - the low index of the range
        +
        high - the high index of the range
        +
        v - the value to search for
        +
        idx - the resolved index from the search
        +
        Returns:
        +
        the descriptive string.
        +
        +
      • +
      + + + +
        +
      • +

        desc

        +
        public abstract String desc​(float[] arr,
        +                            int low,
        +                            int high,
        +                            float v,
        +                            int idx)
        +
        Optional call that describes the details of the results of the search. + Used primarily for debugging.
        +
        +
        Parameters:
        +
        arr - The underlying sorted array of values
        +
        low - the low index of the range
        +
        high - the high index of the range
        +
        v - the value to search for
        +
        idx - the resolved index from the search
        +
        Returns:
        +
        the descriptive string.
        +
        +
      • +
      + + + +
        +
      • +

        desc

        +
        public abstract String desc​(long[] arr,
        +                            int low,
        +                            int high,
        +                            long v,
        +                            int idx)
        +
        Optional call that describes the details of the results of the search. + Used primarily for debugging.
        +
        +
        Parameters:
        +
        arr - The underlying sorted array of values
        +
        low - the low index of the range
        +
        high - the high index of the range
        +
        v - the value to search for
        +
        idx - the resolved index from the search
        +
        Returns:
        +
        the descriptive string.
        +
        +
      • +
      + + + +
        +
      • +

        desc

        +
        public abstract String desc​(long[] arr,
        +                            int low,
        +                            int high,
        +                            double v,
        +                            int idx)
        +
        Optional call that describes the details of the results of the search. + Used primarily for debugging.
        +
        +
        Parameters:
        +
        arr - The underlying sorted array of values
        +
        low - the low index of the range
        +
        high - the high index of the range
        +
        v - the value to search for
        +
        idx - the resolved index from the search
        +
        Returns:
        +
        the descriptive string.
        +
        +
      • +
      + + + +
        +
      • +

        find

        +
        public static int find​(double[] arr,
        +                       int low,
        +                       int high,
        +                       double v,
        +                       InequalitySearch crit)
        +
        Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion. + If -1 is returned there are no values in the search range that satisfy the criterion.
        +
        +
        Parameters:
        +
        arr - the given array of comparable values that must be sorted with increasing values. + The array must not be null and the values of the array must not be NaN in the range [low, high].
        +
        low - the lowest index of the lowest value in the search range, inclusive.
        +
        high - the highest index of the highest value in the search range, inclusive.
        +
        v - the value to search for. It must not be NaN.
        +
        crit - one of the InequalitySearch criteria: LT, LE, EQ, GT, GE. It must not be null.
        +
        Returns:
        +
        the index of the value in the given search range that satisfies the InequalitySearch criterion
        +
        +
      • +
      + + + +
        +
      • +

        find

        +
        public static int find​(float[] arr,
        +                       int low,
        +                       int high,
        +                       float v,
        +                       InequalitySearch crit)
        +
        Binary Search for the index of the float value in the given search range that satisfies + the given InequalitySearch criterion. + If -1 is returned there are no values in the search range that satisfy the criterion.
        +
        +
        Parameters:
        +
        arr - the given array that must be sorted. + It must not be null and must not contain any NaN values in the range {low, high} inclusive.
        +
        low - the lowest index of the lowest value in the search range, inclusive.
        +
        high - the highest index of the highest value in the search range, inclusive.
        +
        v - the value to search for. It must not be NaN.
        +
        crit - one of LT, LE, EQ, GT, GE
        +
        Returns:
        +
        the index of the value in the given search range that satisfies the criterion
        +
        +
      • +
      + + + +
        +
      • +

        find

        +
        public static int find​(long[] arr,
        +                       int low,
        +                       int high,
        +                       long v,
        +                       InequalitySearch crit)
        +
        Binary Search for the index of the long value in the given search range that satisfies + the given InequalitySearch criterion. + If -1 is returned there are no values in the search range that satisfy the criterion.
        +
        +
        Parameters:
        +
        arr - the given array that must be sorted.
        +
        low - the lowest index of the lowest value in the search range, inclusive.
        +
        high - the highest index of the highest value in the search range, inclusive.
        +
        v - the value to search for.
        +
        crit - one of LT, LE, EQ, GT, GE
        +
        Returns:
        +
        the index of the value in the given search range that satisfies the criterion
        +
        +
      • +
      + + + +
        +
      • +

        find

        +
        public static int find​(long[] arr,
        +                       int low,
        +                       int high,
        +                       double v,
        +                       InequalitySearch crit)
        +
        Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion. + If -1 is returned there are no values in the search range that satisfy the criterion.
        +
        +
        Parameters:
        +
        arr - the given array that must be sorted.
        +
        low - the lowest index of the lowest value in the search range, inclusive.
        +
        high - the highest index of the highest value in the search range, inclusive.
        +
        v - the value to search for.
        +
        crit - one of LT, LE, EQ, GT, GE
        +
        Returns:
        +
        the index of the value in the given search range that satisfies the criterion
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/PartitionBoundaries.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/PartitionBoundaries.html new file mode 100644 index 000000000..d56c1dc54 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/PartitionBoundaries.html @@ -0,0 +1,375 @@ + + + + + +PartitionBoundaries (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface PartitionBoundaries

+
+
+
+
    +
  • +
    +
    All Known Implementing Classes:
    +
    GenericPartitionBoundaries
    +
    +
    +
    public interface PartitionBoundaries
    +
    This defines a set of results computed from the getParitionBoundaries() function and + encapsulates the basic methods needed to construct actual partitions based on generic items.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      longgetN() +
      Gets the length of the input stream offered to the underlying sketch.
      +
      long[]getNaturalRanks() +
      Gets an ordered array of natural ranks of the associated array of partition boundaries utilizing + a specified search criterion.
      +
      double[]getNormalizedRanks() +
      Gets an ordered array of normalized ranks of the associated array of partition boundaries utilizing + a specified search criterion.
      +
      long[]getNumDeltaItems() +
      Gets the number of items to be included for each partition as an array.
      +
      intgetNumPartitions() +
      Gets the number of partitions
      +
      QuantileSearchCriteriagetSearchCriteria() +
      Gets the search criteria specified for the source sketch
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getN

        +
        long getN()
        +
        Gets the length of the input stream offered to the underlying sketch.
        +
        +
        Returns:
        +
        the length of the input stream offered to the underlying sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNaturalRanks

        +
        long[] getNaturalRanks()
        +
        Gets an ordered array of natural ranks of the associated array of partition boundaries utilizing + a specified search criterion. Natural ranks are integral values on the interval [1, N]
        +
        +
        Returns:
        +
        an array of natural ranks.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRanks

        +
        double[] getNormalizedRanks()
        +
        Gets an ordered array of normalized ranks of the associated array of partition boundaries utilizing + a specified search criterion. Normalized ranks are double values on the interval [0.0, 1.0].
        +
        +
        Returns:
        +
        an array of normalized ranks.
        +
        +
      • +
      + + + +
        +
      • +

        getNumDeltaItems

        +
        long[] getNumDeltaItems()
        +
        Gets the number of items to be included for each partition as an array. + The count at index 0 is 0. The number of items included in the first partition, defined by the boundaries at + index 0 and index 1, is at index 1 in this array, etc.
        +
        +
        Returns:
        +
        the number of items to be included for each partition as an array.
        +
        +
      • +
      + + + +
        +
      • +

        getNumPartitions

        +
        int getNumPartitions()
        +
        Gets the number of partitions
        +
        +
        Returns:
        +
        the number of partitions
        +
        +
      • +
      + + + +
        +
      • +

        getSearchCriteria

        +
        QuantileSearchCriteria getSearchCriteria()
        +
        Gets the search criteria specified for the source sketch
        +
        +
        Returns:
        +
        The search criteria specified for the source sketch
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/PartitioningFeature.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/PartitioningFeature.html new file mode 100644 index 000000000..38ce01767 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/PartitioningFeature.html @@ -0,0 +1,332 @@ + + + + + +PartitioningFeature (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface PartitioningFeature<T>

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        getPartitionBoundaries

        +
        GenericPartitionBoundaries<T> getPartitionBoundaries​(int numEquallySized,
        +                                                     QuantileSearchCriteria searchCrit)
        +
        This method returns an instance of + GenericPartitionBoundaries which provides + sufficient information for the user to create the given number of equally sized partitions, where "equally sized" + refers to an approximately equal number of items per partition.
        +
        +
        Parameters:
        +
        numEquallySized - an integer that specifies the number of equally sized partitions between + getMinItem() and + getMaxItem(). + This must be a positive integer greater than zero. +
          +
        • A 1 will return: minItem, maxItem.
        • +
        • A 2 will return: minItem, median quantile, maxItem.
        • +
        • Etc.
        • +
        +
        searchCrit - If INCLUSIVE, all the returned quantiles are the upper boundaries of the equally sized partitions + with the exception of the lowest returned quantile, which is the lowest boundary of the lowest ranked partition. + If EXCLUSIVE, all the returned quantiles are the lower boundaries of the equally sized partitions + with the exception of the highest returned quantile, which is the upper boundary of the highest ranked partition.
        +
        Returns:
        +
        an instance of GenericPartitionBoundaries.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        IllegalArgumentException - if numEquallySized is less than 1.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantileSearchCriteria.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantileSearchCriteria.html new file mode 100644 index 000000000..70080ff0b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantileSearchCriteria.html @@ -0,0 +1,415 @@ + + + + + +QuantileSearchCriteria (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum QuantileSearchCriteria

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        INCLUSIVE

        +
        public static final QuantileSearchCriteria INCLUSIVE
        +
        Definition of INCLUSIVE getQuantile(r) search:
        + Given rank r, return the quantile of the smallest rank that is + strictly greater than or equal to r. + +

        Definition of INCLUSIVE getRank(q) search:
        + Given quantile q, return the rank, r, of the largest quantile that is + less than or equal to q.

        +
      • +
      + + + +
        +
      • +

        EXCLUSIVE

        +
        public static final QuantileSearchCriteria EXCLUSIVE
        +
        Definition of EXCLUSIVE getQuantile(r) search:
        + Given rank r, return the quantile of the smallest rank that is + strictly greater than r. + +

        However, if the given rank is is equal to 1.0, or there is no quantile that satisfies this criterion + the method will return a NaN or null.

        + +

        Definition of EXCLUSIVE getRank(q) search:
        + Given quantile q, return the rank, r, of the largest quantile that is + strictly less than q.

        + +

        If there is no quantile value that is strictly less than q, + the method will return a rank of zero.

        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static QuantileSearchCriteria[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (QuantileSearchCriteria c : QuantileSearchCriteria.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static QuantileSearchCriteria valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesAPI.html new file mode 100644 index 000000000..f736570fd --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesAPI.html @@ -0,0 +1,810 @@ + + + + + +QuantilesAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesAPI

+
+
+
+
    +
  • +
    +
    All Known Subinterfaces:
    +
    QuantilesDoublesAPI, QuantilesFloatsAPI, QuantilesGenericAPI<T>
    +
    +
    +
    All Known Implementing Classes:
    +
    CompactDoublesSketch, DoublesSketch, ItemsSketch, KllDoublesSketch, KllFloatsSketch, KllItemsSketch, KllSketch, ReqSketch, UpdateDoublesSketch
    +
    +
    +
    public interface QuantilesAPI
    +

    This is a stochastic streaming sketch that enables near-real time analysis of the + approximate distribution of items from a very large stream in a single pass, requiring only + that the items are comparable. + The analysis is obtained using the getQuantile() function or the + inverse functions getRank(), getPMF() (the Probability Mass Function), and getCDF() + (the Cumulative Distribution Function).

    + +

    Given an input stream of N items, the natural rank of any specific + item is defined as its index (1 to N) in the hypothetical sorted stream of all + N input items.

    + +

    The normalized rank (rank) of any specific item is defined as its + natural rank divided by N, which is a number in the interval [0.0, 1.0]. + In the Javadocs for all the quantile sketches natural rank is seldom used + so any reference to just rank should be interpreted as normalized rank.

    + +

    Inputs into a quantile sketch are called "items" that can be either generic or specific + primitives, like float or double depending on the sketch implementation. + In order to keep its size small, sketches don't retain all the items offered and retain only + a small fraction of all the items, thus purging most of the items. The items retained are + then sorted and associated with a rank. At this point we call the retained items quantiles. + Thus, all quantiles are items, but only a few items become quantiles. Depending on the context + the two terms can be interchangeable.

    + +

    All quantile sketches are configured with a parameter k, which affects the size of + the sketch and its estimation error.

    + +

    In the research literature, the estimation error is commonly called epsilon + (or eps) and is a fraction between zero and one. + Larger sizes of k result in a smaller epsilon, but also a larger sketch. + The epsilon error is always with respect to the rank domain. Estimating the confidence interval + in the quantile domain can be done by first computing the error in the rank domain and then + translating that to the quantile domain. The sketch provides methods to assist with that.

    + +

    The relationship between the normalized rank and the corresponding quantiles can be viewed + as a two dimensional monotonic plot with the normalized rank on one axis and the + corresponding quantiles on the other axis. Let q := quantile and r := rank then both + q = getQuantile(r) and r = getRank(q) are monotonically increasing functions. + If the y-axis is used for the rank domain and the x-axis for the quantile domain, + then y = getRank(x) is also the single point Cumulative Distribution Function (CDF).

    + +

    The functions getQuantile() translate ranks into corresponding quantiles. + The functions getRank(), getCDF(), and getPMF() (Probability Mass Function) + perform the opposite operation and translate quantiles into ranks (or cumulative probabilities, + or probability masses, depending on the context).

    + +

    As an example, consider a large stream of one million items such as packet sizes coming into a network node. + The absolute rank of any specific item size is simply its index in the hypothetical sorted + array of such items. + The normalized rank is the natural rank divided by the stream size, or N, + in this case one million. + The quantile corresponding to the normalized rank of 0.5 represents the 50th percentile or median + of the distribution, obtained from getQuantile(0.5). Similarly, the 95th percentile is obtained from + getQuantile(0.95).

    + +

    From the min and max quantiles, for example, say 1 and 1000 bytes, + you can obtain the PMF from getPMF(100, 500, 900) that will result in an array of + 4 probability masses such as {.4, .3, .2, .1}, which means that +

      +
    • 40% of the mass was < 100,
    • +
    • 30% of the mass was ≥ 100 and < 500,
    • +
    • 20% of the mass was ≥ 500 and < 900, and
    • +
    • 10% of the mass was ≥ 900.
    • +
    + A frequency histogram can be obtained by simply multiplying these probability masses by getN(), + which is the total count of items received. + The getCDF() works similarly, but produces the cumulative distribution instead. + +

    The accuracy of this sketch is a function of the configured k, which also affects + the overall size of the sketch. Accuracy of this quantile sketch is always with respect to + the normalized rank. + +

    The getPMF() function has about 13 to 47% worse rank error (depending + on k) than the other queries because the mass of each "bin" of the PMF has + "double-sided" error from the upper and lower edges of the bin as a result of a subtraction + of random variables where the errors from the two edges can sometimes add.

    + +

    A getQuantile(rank) query has the following probabilistic guarantees:

    +
      +
    • Let q = getQuantile(r) where r is the rank between zero and one.
    • +
    • The quantile q will be a quantile from the input stream.
    • +
    • Let trueRank be the true rank of q derived from the hypothetical sorted + stream of all N quantiles.
    • +
    • Let eps = getNormalizedRankError(false)[*].
    • +
    • Then r - eps ≤ trueRank ≤ r + eps. + Note that the error is on the rank, not the quantile.
    • +
    + +

    A getRank(quantile) query has the following probabilistic guarantees:

    +
      +
    • Let r = getRank(q) where q is a quantile between the min and max quantiles of + the input stream.
    • +
    • Let trueRank be the true rank of q derived from the hypothetical sorted + stream of all N quantiles.
    • +
    • Let eps = getNormalizedRankError(false)[*].
    • +
    • Then r - eps ≤ trueRank ≤ r + eps.
    • +
    + +

    A getPMF() query has the following probabilistic guarantees:

    +
      +
    • Let {r1, r2, ..., rm+1} + = getPMF(v1, v2, ..., vm) where + q1, q2, ..., qm are monotonically increasing quantiles + supplied by the user that are part of the monotonic sequence + q0 = min, q1, q2, ..., qm, qm+1 = max, + and where min and max are the actual minimum and maximum quantiles of the input + stream automatically included in the sequence by the getPMF(...) function. + +
    • Let ri = massi = estimated mass between + vi-1 and qi where q0 = min + and qm+1 = max.
    • + +
    • Let trueMass be the true mass between the quantiles of qi, + qi+1 derived from the hypothetical sorted stream of all N quantiles.
    • +
    • Let eps = getNormalizedRankError(true)[*].
    • +
    • Then mass - eps ≤ trueMass ≤ mass + eps.
    • +
    • r1 includes the mass of all points between min = q0 and + q1.
    • +
    • rm+1 includes the mass of all points between qm and + max = qm+1.
    • +
    + +

    A getCDF(...) query has the following probabilistic guarantees:

    +
      +
    • Let {r1, r2, ..., rm+1} + = getCDF(q1, q2, ..., qm) where + q1, q2, ..., qm) are monotonically increasing quantiles + supplied by the user that are part of the monotonic sequence + {q0 = min, q1, q2, ..., qm, qm+1 = max}, + and where min and max are the actual minimum and maximum quantiles of the input + stream automatically included in the sequence by the getCDF(...) function. + +
    • Let ri = massi = estimated mass between + q0 = min and qi.
    • + +
    • Let trueMass be the true mass between the true ranks of qi, + qi+1 derived from the hypothetical sorted stream of all N quantiles.
    • +
    • Let eps = getNormalizedRankError(true)[*].
    • +
    • then mass - eps ≤ trueMass ≤ mass + eps.
    • +
    • r1 includes the mass of all points between min = q0 and + q1.
    • +
    • rm+1 includes the mass of all points between min = q0 and + max = qm+1.
    • +
    + +

    Because errors are independent, we can make some estimates of the size of the confidence bounds + for the quantile returned from a call to getQuantile(), but not error bounds. + These confidence bounds may be quite large for certain distributions.

    + +
      +
    • Let q = getQuantile(r), the estimated quantile of rank r.
    • +
    • Let eps = getNormalizedRankError(false)[*].
    • +
    • Let qlo = estimated quantile of rank (r - eps).
    • +
    • Let qhi = estimated quantile of rank (r + eps).
    • +
    • Then qlo ≤ q ≤ qhi.
    • +
    + +

    This sketch is order and distribution insensitive

    + +

    This algorithm intentionally inserts randomness into the sampling process for items that + ultimately get retained in the sketch. Thus, the results produced by this algorithm are not + deterministic. For example, if the same stream is inserted into two different instances of this + sketch, the answers obtained from the two sketches should be close, but may not be be identical.

    + +

    Similarly, there may be directional inconsistencies. For example, if a quantile obtained + from getQuantile(rank) is input into the reverse query + getRank(quantile), the resulting rank should be close, but may not exactly equal the original rank.

    + +

    Please visit our website: DataSketches Home Page + and specific Javadocs for more information.

    + +

    [*] Note that obtaining epsilon may require using a similar function but with more parameters + based on the specific sketch implementation.

    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang, Alexander Saydakov
    +
    See Also:
    +
    + Sketching Quantiles and Ranks, Tutorial, +QuantileSearchCriteria
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      intgetK() +
      Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
      +
      longgetN() +
      Gets the length of the input stream offered to the sketch..
      +
      intgetNumRetained() +
      Gets the number of quantiles retained by the sketch.
      +
      doublegetRankLowerBound​(double rank) +
      Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      doublegetRankUpperBound​(double rank) +
      Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      booleanhasMemory() +
      Returns true if this sketch's data structure is backed by Memory or WritableMemory.
      +
      booleanisDirect() +
      Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
      +
      booleanisEmpty() +
      Returns true if this sketch is empty.
      +
      booleanisEstimationMode() +
      Returns true if this sketch is in estimation mode.
      +
      booleanisReadOnly() +
      Returns true if this sketch is read only.
      +
      voidreset() +
      Resets this sketch to the empty state.
      +
      StringtoString() +
      Returns a summary of the key parameters of the sketch.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getK

        +
        int getK()
        +
        Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
        Returns:
        +
        the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        long getN()
        +
        Gets the length of the input stream offered to the sketch..
        +
        +
        Returns:
        +
        the length of the input stream offered to the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNumRetained

        +
        int getNumRetained()
        +
        Gets the number of quantiles retained by the sketch.
        +
        +
        Returns:
        +
        the number of quantiles retained by the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        double getRankLowerBound​(double rank)
        +
        Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        double getRankUpperBound​(double rank)
        +
        Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        boolean hasMemory()
        +
        Returns true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
        Returns:
        +
        true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        boolean isDirect()
        +
        Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
        Returns:
        +
        true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        boolean isEmpty()
        +
        Returns true if this sketch is empty.
        +
        +
        Returns:
        +
        true if this sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        boolean isEstimationMode()
        +
        Returns true if this sketch is in estimation mode.
        +
        +
        Returns:
        +
        true if this sketch is in estimation mode.
        +
        +
      • +
      + + + +
        +
      • +

        isReadOnly

        +
        boolean isReadOnly()
        +
        Returns true if this sketch is read only.
        +
        +
        Returns:
        +
        true if this sketch is read only.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        void reset()
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +
      • +
      + + + +
        +
      • +

        toString

        +
        String toString()
        +
        Returns a summary of the key parameters of the sketch.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        a summary of the key parameters of the sketch.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesAPI.html new file mode 100644 index 000000000..7667540a7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesAPI.html @@ -0,0 +1,889 @@ + + + + + +QuantilesDoublesAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesDoublesAPI

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCDF

        +
        default double[] getCDF​(double[] splitPoints)
        +
        This is equivalent to getCDF(splitPoints, INCLUSIVE)
        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getCDF

        +
        double[] getCDF​(double[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        double getMaxItem()
        +
        Returns the maximum item of the stream. This is provided for convenience and may be different from the + item returned by getQuantile(1.0).
        +
        +
        Returns:
        +
        the maximum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        double getMinItem()
        +
        Returns the minimum item of the stream. This is provided for convenience and may be different from the + item returned by getQuantile(0.0).
        +
        +
        Returns:
        +
        the minimum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        default double[] getPMF​(double[] splitPoints)
        +
        This is equivalent to getPMF(splitPoints, INCLUSIVE)
        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        double[] getPMF​(double[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        default double getQuantile​(double rank)
        +
        This is equivalent to getQuantile(rank, INCLUSIVE)
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        double getQuantile​(double rank,
        +                   QuantileSearchCriteria searchCrit)
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        double getQuantileLowerBound​(double rank)
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        double getQuantileUpperBound​(double rank)
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        default double[] getQuantiles​(double[] ranks)
        +
        This is equivalent to getQuantiles(ranks, INCLUSIVE)
        +
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        double[] getQuantiles​(double[] ranks,
        +                      QuantileSearchCriteria searchCrit)
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        default double getRank​(double quantile)
        +
        This is equivalent to getRank(quantile, INCLUSIVE)
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        double getRank​(double quantile,
        +               QuantileSearchCriteria searchCrit)
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        default double[] getRanks​(double[] quantiles)
        +
        This is equivalent to getRanks(quantiles, INCLUSIVE)
        +
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        double[] getRanks​(double[] quantiles,
        +                  QuantileSearchCriteria searchCrit)
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getSerializedSizeBytes

        +
        int getSerializedSizeBytes()
        +
        Returns the current number of bytes this Sketch would require if serialized.
        +
        +
        Returns:
        +
        the number of bytes this sketch would require if serialized.
        +
        +
      • +
      + + + +
        +
      • +

        getSortedView

        +
        DoublesSortedView getSortedView()
        +
        Gets the sorted view of this sketch
        +
        +
        Returns:
        +
        the sorted view of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        iterator

        +
        QuantilesDoublesSketchIterator iterator()
        +
        Gets the iterator for this sketch, which is not sorted.
        +
        +
        Returns:
        +
        the iterator for this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        byte[] toByteArray()
        +
        Returns a byte array representation of this sketch.
        +
        +
        Returns:
        +
        a byte array representation of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        void update​(double item)
        +
        Updates this sketch with the given item.
        +
        +
        Parameters:
        +
        item - from a stream of quantiles. NaNs are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesSketchIterator.html new file mode 100644 index 000000000..c3e426d46 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesDoublesSketchIterator.html @@ -0,0 +1,284 @@ + + + + + +QuantilesDoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesDoublesSketchIterator

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        double getQuantile()
        +
        Gets the double quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the double quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsAPI.html new file mode 100644 index 000000000..213ee933c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsAPI.html @@ -0,0 +1,889 @@ + + + + + +QuantilesFloatsAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesFloatsAPI

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCDF

        +
        default double[] getCDF​(float[] splitPoints)
        +
        This is equivalent to getCDF(splitPoints, INCLUSIVE)
        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getCDF

        +
        double[] getCDF​(float[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        float getMaxItem()
        +
        Returns the maximum item of the stream. This is provided for convenience, but may be different from the largest + item retained by the sketch algorithm.
        +
        +
        Returns:
        +
        the maximum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        float getMinItem()
        +
        Returns the minimum item of the stream. This is provided for convenience, but is distinct from the smallest + item retained by the sketch algorithm.
        +
        +
        Returns:
        +
        the minimum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        default double[] getPMF​(float[] splitPoints)
        +
        This is equivalent to getPMF(splitPoints, INCLUSIVE)
        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        double[] getPMF​(float[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        default float getQuantile​(double rank)
        +
        This is equivalent to getQuantile(rank, INCLUSIVE)
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        float getQuantile​(double rank,
        +                  QuantileSearchCriteria searchCrit)
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        float getQuantileLowerBound​(double rank)
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        float getQuantileUpperBound​(double rank)
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        default float[] getQuantiles​(double[] ranks)
        +
        This is equivalent to getQuantiles(ranks, INCLUSIVE)
        +
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        float[] getQuantiles​(double[] ranks,
        +                     QuantileSearchCriteria searchCrit)
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        default double getRank​(float quantile)
        +
        This is equivalent to getRank(quantile, INCLUSIVE)
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        double getRank​(float quantile,
        +               QuantileSearchCriteria searchCrit)
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        default double[] getRanks​(float[] quantiles)
        +
        This is equivalent to getRanks(quantiles, INCLUSIVE)
        +
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        double[] getRanks​(float[] quantiles,
        +                  QuantileSearchCriteria searchCrit)
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getSerializedSizeBytes

        +
        int getSerializedSizeBytes()
        +
        Returns the current number of bytes this Sketch would require if serialized.
        +
        +
        Returns:
        +
        the number of bytes this sketch would require if serialized.
        +
        +
      • +
      + + + +
        +
      • +

        getSortedView

        +
        FloatsSortedView getSortedView()
        +
        Gets the sorted view of this sketch
        +
        +
        Returns:
        +
        the sorted view of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        iterator

        +
        QuantilesFloatsSketchIterator iterator()
        +
        Gets the iterator for this sketch, which is not sorted.
        +
        +
        Returns:
        +
        the iterator for this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        byte[] toByteArray()
        +
        Returns a byte array representation of this sketch.
        +
        +
        Returns:
        +
        a byte array representation of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        void update​(float item)
        +
        Updates this sketch with the given item.
        +
        +
        Parameters:
        +
        item - from a stream of quantiles. NaNs are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsSketchIterator.html new file mode 100644 index 000000000..32dc639b5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesFloatsSketchIterator.html @@ -0,0 +1,284 @@ + + + + + +QuantilesFloatsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesFloatsSketchIterator

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        float getQuantile()
        +
        Gets the float quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the float quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericAPI.html new file mode 100644 index 000000000..812889698 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericAPI.html @@ -0,0 +1,869 @@ + + + + + +QuantilesGenericAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesGenericAPI<T>

+
+
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - The given item type
    +
    +
    +
    All Superinterfaces:
    +
    QuantilesAPI
    +
    +
    +
    All Known Implementing Classes:
    +
    ItemsSketch, KllItemsSketch
    +
    +
    +
    public interface QuantilesGenericAPI<T>
    +extends QuantilesAPI
    +
    The Quantiles API for item type generic.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    See Also:
    +
    QuantilesAPI
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        getCDF

        +
        default double[] getCDF​(T[] splitPoints)
        +
        This is equivalent to getCDF(splitPoints, INCLUSIVE)
        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + + + +
        +
      • +

        getCDF

        +
        double[] getCDF​(T[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        T getMaxItem()
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the maximum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        T getMinItem()
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Returns:
        +
        the minimum item of the stream
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + + + +
        +
      • +

        getPMF

        +
        default double[] getPMF​(T[] splitPoints)
        +
        This is equivalent to getPMF(splitPoints, INCLUSIVE)
        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + + + +
        +
      • +

        getPMF

        +
        double[] getPMF​(T[] splitPoints,
        +                QuantileSearchCriteria searchCrit)
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        default T getQuantile​(double rank)
        +
        This is equivalent to getQuantile(rank, INCLUSIVE)
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        T getQuantile​(double rank,
        +              QuantileSearchCriteria searchCrit)
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        T getQuantileLowerBound​(double rank)
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        T getQuantileUpperBound​(double rank)
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        +
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        default T[] getQuantiles​(double[] ranks)
        +
        This is equivalent to getQuantiles(ranks, INCLUSIVE)
        +
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        T[] getQuantiles​(double[] ranks,
        +                 QuantileSearchCriteria searchCrit)
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Parameters:
        +
        ranks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + +
        +
      • +

        getRank

        +
        default double getRank​(T quantile)
        +
        This is equivalent to getRank(T quantile, INCLUSIVE)
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRank

        +
        double getRank​(T quantile,
        +               QuantileSearchCriteria searchCrit)
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + + + +
        +
      • +

        getRanks

        +
        default double[] getRanks​(T[] quantiles)
        +
        This is equivalent to getRanks(quantiles, INCLUSIVE)
        +
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        +
      • +
      + + + + + +
        +
      • +

        getRanks

        +
        double[] getRanks​(T[] quantiles,
        +                  QuantileSearchCriteria searchCrit)
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        Throws:
        +
        IllegalArgumentException - if sketch is empty.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getSortedView

        +
        GenericSortedView<T> getSortedView()
        +
        Gets the sorted view of this sketch
        +
        +
        Returns:
        +
        the sorted view of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        iterator

        +
        QuantilesGenericSketchIterator<T> iterator()
        +
        Gets the iterator for this sketch, which is not sorted.
        +
        +
        Returns:
        +
        the iterator for this sketch
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        void update​(T item)
        +
        Updates this sketch with the given item.
        +
        +
        Parameters:
        +
        item - from a stream of items. Nulls are ignored.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericSketchIterator.html new file mode 100644 index 000000000..c53f7e584 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesGenericSketchIterator.html @@ -0,0 +1,288 @@ + + + + + +QuantilesGenericSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesGenericSketchIterator<T>

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        T getQuantile()
        +
        Gets the generic quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the generic quantile at the current index.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesSketchIterator.html new file mode 100644 index 000000000..60d7fe77f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesSketchIterator.html @@ -0,0 +1,305 @@ + + + + + +QuantilesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface QuantilesSketchIterator

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      longgetWeight() +
      Gets the natural weight at the current index.
      +
      booleannext() +
      Advances the index and checks if it is valid.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getWeight

        +
        long getWeight()
        +
        Gets the natural weight at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the natural weight at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        next

        +
        boolean next()
        +
        Advances the index and checks if it is valid. + The state of this iterator is undefined before the first call of this method.
        +
        +
        Returns:
        +
        true if the next index is valid.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesUtil.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesUtil.html new file mode 100644 index 000000000..02c7e5f00 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/QuantilesUtil.html @@ -0,0 +1,548 @@ + + + + + +QuantilesUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class QuantilesUtil

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantilescommon.QuantilesUtil
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class QuantilesUtil
    +extends Object
    +
    Utilities for the quantiles sketches.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static doubletailRoundingFactor 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static voidcheckDoublesSplitPointsOrder​(double[] values) +
      Checks the sequential validity of the given array of double values.
      +
      static voidcheckFloatsSplitPointsOrder​(float[] values) +
      Checks the sequential validity of the given array of float values.
      +
      static voidcheckNormalizedRankBounds​(double nRank) +
      Checks that the given normalized rank: 0 ≤ nRank ≤ 1.0.
      +
      static double[]equallySpacedDoubles​(int num) +
      Returns an array of (num + 1) values that define equally sized intervals between 0.0, inclusive, and 1.0, + inclusive.
      +
      static long[]equallySpacedLongs​(long min, + long max, + int num) +
      Returns an array of (num + 1) longs that define, approximately, equally spaced intervals between the given + max, inclusive, and min, inclusive.
      +
      static double[]evenlyLogSpaced​(double value1, + double value2, + int num) +
      Returns a double array of values between min and max inclusive where the log of the + returned values are evenly spaced.
      +
      static double[]evenlySpacedDoubles​(double value1, + double value2, + int num) +
      Returns a double array of evenly spaced values between value1, inclusive, and value2 inclusive.
      +
      static float[]evenlySpacedFloats​(float value1, + float value2, + int num) +
      Returns a float array of evenly spaced values between value1, inclusive, and value2 inclusive.
      +
      static doublegetNaturalRank​(double normalizedRank, + long totalN, + QuantileSearchCriteria searchCrit) 
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        checkNormalizedRankBounds

        +
        public static final void checkNormalizedRankBounds​(double nRank)
        +
        Checks that the given normalized rank: 0 ≤ nRank ≤ 1.0.
        +
        +
        Parameters:
        +
        nRank - the given normalized rank.
        +
        +
      • +
      + + + +
        +
      • +

        checkDoublesSplitPointsOrder

        +
        public static final void checkDoublesSplitPointsOrder​(double[] values)
        +
        Checks the sequential validity of the given array of double values. + They must be unique, monotonically increasing and not NaN.
        +
        +
        Parameters:
        +
        values - the given array of double values
        +
        +
      • +
      + + + +
        +
      • +

        checkFloatsSplitPointsOrder

        +
        public static final void checkFloatsSplitPointsOrder​(float[] values)
        +
        Checks the sequential validity of the given array of float values. + They must be unique, monotonically increasing and not NaN.
        +
        +
        Parameters:
        +
        values - the given array of double values
        +
        +
      • +
      + + + +
        +
      • +

        equallySpacedDoubles

        +
        public static double[] equallySpacedDoubles​(int num)
        +
        Returns an array of (num + 1) values that define equally sized intervals between 0.0, inclusive, and 1.0, + inclusive. The end points 0.0 and 1.0 are part of the returned array. + +

        For example, if num == 2, three values will be returned: 0.0, .5, and 1, where the two equally sized regions + are {0.0,0.5}, and {0.5, 1.0}.

        +
        +
        Parameters:
        +
        num - the total number of equally sized intervals between 0.0, inclusive and 1.0, inclusive. + Must be 1 or greater.
        +
        Returns:
        +
        a double array of values that define (num + 1) equally sized intervals between 0.0, inclusive and 1.0, + inclusive.
        +
        Throws:
        +
        IllegalArgumentException - if num is less than 1.
        +
        +
      • +
      + + + +
        +
      • +

        equallySpacedLongs

        +
        public static long[] equallySpacedLongs​(long min,
        +                                        long max,
        +                                        int num)
        +
        Returns an array of (num + 1) longs that define, approximately, equally spaced intervals between the given + max, inclusive, and min, inclusive. The end points max and min are part of the + returned array. Because the range of the values may not exactly divide into num intervals, + the size of these intervals may vary by plus or minus one.
        +
        +
        Parameters:
        +
        min - the lowest positive valued (or zero) number of the range
        +
        max - the highest positive valued number of the range. max must be greater than min
        +
        num - Number of requested intervals. Must be greater or equal to one, and less than or equal to + max - min.
        +
        Returns:
        +
        an array of (num + 1) longs that are approximately equally spaced between the given min and max.
        +
        +
      • +
      + + + +
        +
      • +

        evenlySpacedFloats

        +
        public static float[] evenlySpacedFloats​(float value1,
        +                                         float value2,
        +                                         int num)
        +
        Returns a float array of evenly spaced values between value1, inclusive, and value2 inclusive. + If value2 > value1, the resulting sequence will be increasing. + If value2 < value1, the resulting sequence will be decreasing.
        +
        +
        Parameters:
        +
        value1 - will be in index 0 of the returned array
        +
        value2 - will be in the highest index of the returned array
        +
        num - the total number of values including value1 and value2. Must be 2 or greater.
        +
        Returns:
        +
        a float array of evenly spaced values between value1, inclusive, and value2 inclusive.
        +
        +
      • +
      + + + +
        +
      • +

        evenlySpacedDoubles

        +
        public static double[] evenlySpacedDoubles​(double value1,
        +                                           double value2,
        +                                           int num)
        +
        Returns a double array of evenly spaced values between value1, inclusive, and value2 inclusive. + If value2 > value1, the resulting sequence will be increasing. + If value2 < value1, the resulting sequence will be decreasing.
        +
        +
        Parameters:
        +
        value1 - will be in index 0 of the returned array
        +
        value2 - will be in the highest index of the returned array
        +
        num - the total number of values including value1 and value2. Must be 2 or greater.
        +
        Returns:
        +
        a float array of evenly spaced values between value1, inclusive, and value2 inclusive.
        +
        +
      • +
      + + + +
        +
      • +

        evenlyLogSpaced

        +
        public static double[] evenlyLogSpaced​(double value1,
        +                                       double value2,
        +                                       int num)
        +
        Returns a double array of values between min and max inclusive where the log of the + returned values are evenly spaced. + If value2 > value1, the resulting sequence will be increasing. + If value2 < value1, the resulting sequence will be decreasing.
        +
        +
        Parameters:
        +
        value1 - will be in index 0 of the returned array, and must be greater than zero.
        +
        value2 - will be in the highest index of the returned array, and must be greater than zero.
        +
        num - the total number of values including value1 and value2. Must be 2 or greater
        +
        Returns:
        +
        a double array of exponentially spaced values between value1 and value2 inclusive.
        +
        +
      • +
      + + + +
        +
      • +

        getNaturalRank

        +
        public static double getNaturalRank​(double normalizedRank,
        +                                    long totalN,
        +                                    QuantileSearchCriteria searchCrit)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/SortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/SortedView.html new file mode 100644 index 000000000..5847c5d33 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/SortedView.html @@ -0,0 +1,343 @@ + + + + + +SortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface SortedView

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      long[]getCumulativeWeights() +
      Returns the array of cumulative weights from the sketch.
      +
      longgetN() +
      Returns the total number of items presented to the sourcing sketch.
      +
      booleanisEmpty() +
      Returns true if this sorted view is empty.
      +
      SortedViewIteratoriterator() +
      Returns an iterator for this Sorted View.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCumulativeWeights

        +
        long[] getCumulativeWeights()
        +
        Returns the array of cumulative weights from the sketch. + Also known as the natural ranks, which are the Natural Numbers on the interval [1, N].
        +
        +
        Returns:
        +
        the array of cumulative weights (or natural ranks).
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        long getN()
        +
        Returns the total number of items presented to the sourcing sketch.
        +
        +
        Returns:
        +
        the total number of items presented to the sourcing sketch.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        boolean isEmpty()
        +
        Returns true if this sorted view is empty.
        +
        +
        Returns:
        +
        true if this sorted view is empty.
        +
        +
      • +
      + + + +
        +
      • +

        iterator

        +
        SortedViewIterator iterator()
        +
        Returns an iterator for this Sorted View.
        +
        +
        Returns:
        +
        an iterator for this Sorted View.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/SortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/SortedViewIterator.html new file mode 100644 index 000000000..151ec8d19 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/SortedViewIterator.html @@ -0,0 +1,471 @@ + + + + + +SortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SortedViewIterator

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.quantilescommon.SortedViewIterator
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    DoublesSortedViewIterator, FloatsSortedViewIterator, GenericSortedViewIterator
    +
    +
    +
    public class SortedViewIterator
    +extends Object
    +
    This is the base interface for the SortedViewIterator hierarchy used with a SortedView obtained + from a quantile-type sketch. This provides an ordered iterator over the retained quantiles of + the associated quantile-type sketch. + +

    Prototype example of the recommended iteration loop:

    +
    
    +   SortedViewIterator itr = sketch.getSortedView().iterator();
    +   while (itr.next()) {
    +     long weight = itr.getWeight();
    +     ...
    +   }
    + 
    +
    +
    Author:
    +
    Alexander Saydakov, Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        cumWeights

        +
        protected final long[] cumWeights
        +
      • +
      + + + +
        +
      • +

        totalN

        +
        protected long totalN
        +
      • +
      + + + +
        +
      • +

        index

        +
        protected int index
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getNaturalRank

        +
        public long getNaturalRank​(QuantileSearchCriteria searchCrit)
        +
        Gets the natural rank at the current index (or previous index) based on the chosen search criterion. + This is also referred to as the "cumulative weight". The natural rank is a number in the range [1, N], + where N (getN()) is the total number of items fed to the sketch. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Parameters:
        +
        searchCrit - if INCLUSIVE, includes the weight of the item at the current index in the computation of + the natural rank. + Otherwise, it will return the natural rank of the previous index.
        +
        Returns:
        +
        the natural rank at the current index (or previous index) based on the chosen search criterion.
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Gets the total count of all items presented to the sketch.
        +
        +
        Returns:
        +
        the total count of all items presented to the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getNormalizedRank

        +
        public double getNormalizedRank​(QuantileSearchCriteria searchCrit)
        +
        Gets the normalized rank at the current index (or previous index) + based on the chosen search criterion. Where normalized rank = natural rank / N (getN()) + and is a fraction in the range (0,1.0]. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Parameters:
        +
        searchCrit - if INCLUSIVE, includes the normalized rank at the current index. + Otherwise, returns the normalized rank of the previous index.
        +
        Returns:
        +
        the normalized rank at the current index (or previous index) + based on the chosen search criterion.
        +
        +
      • +
      + + + +
        +
      • +

        getWeight

        +
        public long getWeight()
        +
        Gets the weight contribution of the item at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Returns:
        +
        the weight contribution of the item at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        next

        +
        public boolean next()
        +
        Advances the index and checks if it is valid. + The state of this iterator is undefined before the first call of this method.
        +
        +
        Returns:
        +
        true if the next index is valid.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/BinarySearch.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/BinarySearch.html new file mode 100644 index 000000000..00aaf827b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/BinarySearch.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.BinarySearch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.BinarySearch

+
+
No usage of org.apache.datasketches.quantilescommon.BinarySearch
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedView.html new file mode 100644 index 000000000..d2420f81e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedView.html @@ -0,0 +1,290 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.DoublesSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.DoublesSortedView

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedViewIterator.html new file mode 100644 index 000000000..9d8f63cc2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/DoublesSortedViewIterator.html @@ -0,0 +1,254 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.DoublesSortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.DoublesSortedViewIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedView.html new file mode 100644 index 000000000..e936474c2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedView.html @@ -0,0 +1,289 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.FloatsSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.FloatsSortedView

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedViewIterator.html new file mode 100644 index 000000000..e079df4c5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/FloatsSortedViewIterator.html @@ -0,0 +1,253 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.FloatsSortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.FloatsSortedViewIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.Inequality.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.Inequality.html new file mode 100644 index 000000000..a8a67fce4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.Inequality.html @@ -0,0 +1,229 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.GenericInequalitySearch.Inequality

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.html new file mode 100644 index 000000000..1dcc3c40b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericInequalitySearch.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.GenericInequalitySearch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.GenericInequalitySearch

+
+
No usage of org.apache.datasketches.quantilescommon.GenericInequalitySearch
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericPartitionBoundaries.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericPartitionBoundaries.html new file mode 100644 index 000000000..5a4d4dd0f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericPartitionBoundaries.html @@ -0,0 +1,325 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.GenericPartitionBoundaries (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.GenericPartitionBoundaries

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedView.html new file mode 100644 index 000000000..7a87d3b4b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedView.html @@ -0,0 +1,260 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.GenericSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.GenericSortedView

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedViewIterator.html new file mode 100644 index 000000000..bbd916218 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/GenericSortedViewIterator.html @@ -0,0 +1,254 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.GenericSortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.GenericSortedViewIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/InequalitySearch.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/InequalitySearch.html new file mode 100644 index 000000000..c7ef02bb7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/InequalitySearch.html @@ -0,0 +1,264 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.InequalitySearch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.InequalitySearch

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use InequalitySearch 
    PackageDescription
    org.apache.datasketches.quantilescommon +
    This package contains common tools and methods for the quantiles, kll and + req packages.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of InequalitySearch in org.apache.datasketches.quantilescommon

      + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.quantilescommon that return InequalitySearch 
      Modifier and TypeMethodDescription
      static InequalitySearchInequalitySearch.valueOf​(String name) +
      Returns the enum constant of this type with the specified name.
      +
      static InequalitySearch[]InequalitySearch.values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.quantilescommon with parameters of type InequalitySearch 
      Modifier and TypeMethodDescription
      static intInequalitySearch.find​(double[] arr, + int low, + int high, + double v, + InequalitySearch crit) +
      Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      static intInequalitySearch.find​(float[] arr, + int low, + int high, + float v, + InequalitySearch crit) +
      Binary Search for the index of the float value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      static intInequalitySearch.find​(long[] arr, + int low, + int high, + double v, + InequalitySearch crit) +
      Binary Search for the index of the double value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      static intInequalitySearch.find​(long[] arr, + int low, + int high, + long v, + InequalitySearch crit) +
      Binary Search for the index of the long value in the given search range that satisfies + the given InequalitySearch criterion.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitionBoundaries.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitionBoundaries.html new file mode 100644 index 000000000..98c1784fe --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitionBoundaries.html @@ -0,0 +1,198 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.PartitionBoundaries (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.PartitionBoundaries

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitioningFeature.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitioningFeature.html new file mode 100644 index 000000000..ee0361cef --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/PartitioningFeature.html @@ -0,0 +1,282 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.PartitioningFeature (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.PartitioningFeature

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantileSearchCriteria.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantileSearchCriteria.html new file mode 100644 index 000000000..4941993b1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantileSearchCriteria.html @@ -0,0 +1,995 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.QuantileSearchCriteria (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.QuantileSearchCriteria

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesAPI.html new file mode 100644 index 000000000..1c72f1656 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesAPI.html @@ -0,0 +1,350 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesAPI

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesAPI.html new file mode 100644 index 000000000..51ead84c8 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesAPI.html @@ -0,0 +1,243 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesDoublesAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesDoublesAPI

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesSketchIterator.html new file mode 100644 index 000000000..225b72520 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesDoublesSketchIterator.html @@ -0,0 +1,290 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesDoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesDoublesSketchIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsAPI.html new file mode 100644 index 000000000..0bda3497a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsAPI.html @@ -0,0 +1,230 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesFloatsAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesFloatsAPI

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsSketchIterator.html new file mode 100644 index 000000000..d3e00f6d4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesFloatsSketchIterator.html @@ -0,0 +1,289 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesFloatsSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesFloatsSketchIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericAPI.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericAPI.html new file mode 100644 index 000000000..11613843c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericAPI.html @@ -0,0 +1,268 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesGenericAPI (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesGenericAPI

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericSketchIterator.html new file mode 100644 index 000000000..af1e69258 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesGenericSketchIterator.html @@ -0,0 +1,290 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesGenericSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesGenericSketchIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesSketchIterator.html new file mode 100644 index 000000000..4115c6f0c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesSketchIterator.html @@ -0,0 +1,333 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.QuantilesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.QuantilesSketchIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesUtil.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesUtil.html new file mode 100644 index 000000000..3c29d3a88 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/QuantilesUtil.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.QuantilesUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.QuantilesUtil

+
+
No usage of org.apache.datasketches.quantilescommon.QuantilesUtil
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedView.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedView.html new file mode 100644 index 000000000..ed4b3225d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedView.html @@ -0,0 +1,325 @@ + + + + + +Uses of Interface org.apache.datasketches.quantilescommon.SortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.quantilescommon.SortedView

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedViewIterator.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedViewIterator.html new file mode 100644 index 000000000..773b38a1e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/class-use/SortedViewIterator.html @@ -0,0 +1,229 @@ + + + + + +Uses of Class org.apache.datasketches.quantilescommon.SortedViewIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.quantilescommon.SortedViewIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/package-summary.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/package-summary.html new file mode 100644 index 000000000..dd9555cf9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/package-summary.html @@ -0,0 +1,348 @@ + + + + + +org.apache.datasketches.quantilescommon (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.quantilescommon

+
+
+
+ + +
This package contains common tools and methods for the quantiles, kll and + req packages.
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    DoublesSortedView +
    The Sorted View for quantile sketches of primitive type double.
    +
    FloatsSortedView +
    The Sorted View for quantiles of primitive type float.
    +
    GenericSortedView<T> +
    The Sorted View for quantiles of generic type.
    +
    PartitionBoundaries +
    This defines a set of results computed from the getParitionBoundaries() function and + encapsulates the basic methods needed to construct actual partitions based on generic items.
    +
    PartitioningFeature<T> +
    This enables the special functions for performing efficient partitioning of massive data.
    +
    QuantilesAPI +
    This is a stochastic streaming sketch that enables near-real time analysis of the + approximate distribution of items from a very large stream in a single pass, requiring only + that the items are comparable.
    +
    QuantilesDoublesAPI +
    The Quantiles API for item type double.
    +
    QuantilesDoublesSketchIterator +
    The quantiles sketch iterator for primitive type double.
    +
    QuantilesFloatsAPI +
    The Quantiles API for item type float.
    +
    QuantilesFloatsSketchIterator +
    The quantiles sketch iterator for primitive type float.
    +
    QuantilesGenericAPI<T> +
    The Quantiles API for item type generic.
    +
    QuantilesGenericSketchIterator<T> +
    The quantiles sketch iterator for generic types.
    +
    QuantilesSketchIterator +
    This is the base interface for the SketchIterator hierarchy used for viewing the + non-ordered quantiles retained by a sketch.
    +
    SortedView +
    This is the base interface for the Sorted View interface hierarchy and defines the methods that are type independent.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    BinarySearch +
    Contains common equality binary search algorithms.
    +
    DoublesSortedViewIterator +
    Iterator over quantile sketches of primitive type double.
    +
    FloatsSortedViewIterator +
    Iterator over quantile sketches of primitive type float.
    +
    GenericInequalitySearch +
    This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values.
    +
    GenericPartitionBoundaries<T> +
    Implements PartitionBoundaries
    +
    GenericSortedViewIterator<T> +
    Iterator over quantile sketches of generic type.
    +
    QuantilesUtil +
    Utilities for the quantiles sketches.
    +
    SortedViewIterator +
    This is the base interface for the SortedViewIterator hierarchy used with a SortedView obtained + from a quantile-type sketch.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    GenericInequalitySearch.Inequality +
    The enumerator of inequalities
    +
    InequalitySearch +
    This provides efficient, unique and unambiguous binary searching for inequality comparison criteria + for ordered arrays of values that may include duplicate values.
    +
    QuantileSearchCriteria +
    These search criteria are used by the KLL, REQ and Classic Quantiles sketches in the DataSketches library.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/package-tree.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/package-tree.html new file mode 100644 index 000000000..4021f06e8 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/package-tree.html @@ -0,0 +1,218 @@ + + + + + +org.apache.datasketches.quantilescommon Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.quantilescommon

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/quantilescommon/package-use.html b/docs/5.0.X/org/apache/datasketches/quantilescommon/package-use.html new file mode 100644 index 000000000..d6ad71fab --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/quantilescommon/package-use.html @@ -0,0 +1,646 @@ + + + + + +Uses of Package org.apache.datasketches.quantilescommon (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.quantilescommon

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/ReqDebug.html b/docs/5.0.X/org/apache/datasketches/req/ReqDebug.html new file mode 100644 index 000000000..0025b841f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/ReqDebug.html @@ -0,0 +1,450 @@ + + + + + +ReqDebug (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ReqDebug

+
+
+
+
    +
  • +
    +
    public interface ReqDebug
    +
    The signaling interface that allows comprehensive analysis of the ReqSketch and ReqCompactor + while eliminating code clutter in the main classes. The implementation of this interface can be + found in the test tree.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        emitStart

        +
        void emitStart​(ReqSketch sk)
        +
        Emit the start signal
        +
        +
        Parameters:
        +
        sk - the sketch
        +
        +
      • +
      + + + +
        +
      • +

        emitStartCompress

        +
        void emitStartCompress()
        +
        Emit Start Compress
        +
      • +
      + + + +
        +
      • +

        emitCompressDone

        +
        void emitCompressDone()
        +
        Emit compress done.
        +
      • +
      + + + +
        +
      • +

        emitAllHorizList

        +
        void emitAllHorizList()
        +
        Emit all horizontal lists
        +
      • +
      + + + +
        +
      • +

        emitMustAddCompactor

        +
        void emitMustAddCompactor()
        +
        Emit Must add compactor
        +
      • +
      + + + +
        +
      • +

        emitCompactingStart

        +
        void emitCompactingStart​(byte lgWeight)
        +
        Emit Compaction Start.
        +
        +
        Parameters:
        +
        lgWeight - compactor lgWeight or height
        +
        +
      • +
      + + + +
        +
      • +

        emitNewCompactor

        +
        void emitNewCompactor​(byte lgWeight)
        +
        Emit new compactor configuration
        +
        +
        Parameters:
        +
        lgWeight - the log weight
        +
        +
      • +
      + + + +
        +
      • +

        emitAdjSecSizeNumSec

        +
        void emitAdjSecSizeNumSec​(byte lgWeight)
        +
        Emit adjusting section size and number of sections.
        +
        +
        Parameters:
        +
        lgWeight - the log weight
        +
        +
      • +
      + + + +
        +
      • +

        emitCompactionDetail

        +
        void emitCompactionDetail​(int compactionStart,
        +                          int compactionEnd,
        +                          int secsToCompact,
        +                          int promoteLen,
        +                          boolean coin)
        +
        Emit Compaction details.
        +
        +
        Parameters:
        +
        compactionStart - the offset of compaction start
        +
        compactionEnd - the offset of compaction end
        +
        secsToCompact - the number of sections to compact
        +
        promoteLen - the length of the promotion field
        +
        coin - the state of the random coin.
        +
        +
      • +
      + + + +
        +
      • +

        emitCompactionDone

        +
        void emitCompactionDone​(byte lgWeight)
        +
        Emit compaction done and number of compactions so far.
        +
        +
        Parameters:
        +
        lgWeight - the log weight
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/req/ReqSketch.html b/docs/5.0.X/org/apache/datasketches/req/ReqSketch.html new file mode 100644 index 000000000..687f320b2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/ReqSketch.html @@ -0,0 +1,1351 @@ + + + + + +ReqSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReqSketch

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    QuantilesAPI, QuantilesFloatsAPI
    +
    +
    +
    public final class ReqSketch
    +extends Object
    +
    This Relative Error Quantiles Sketch is the Java implementation based on the paper + "Relative Error Streaming Quantiles" by Graham Cormode, Zohar Karnin, Edo Liberty, + Justin Thaler, Pavel Veselý, and loosely derived from a Python prototype written by Pavel Veselý. + +

    Reference: https://arxiv.org/abs/2004.01668

    + +

    This implementation differs from the algorithm described in the paper in the following:

    + +
      +
    • The algorithm requires no upper bound on the stream length. + Instead, each relative-compactor counts the number of compaction operations performed + so far (via variable state). Initially, the relative-compactor starts with INIT_NUMBER_OF_SECTIONS. + Each time the number of compactions (variable state) exceeds 2^{numSections - 1}, we double + numSections. Note that after merging the sketch with another one variable state may not correspond + to the number of compactions performed at a particular level, however, since the state variable + never exceeds the number of compactions, the guarantees of the sketch remain valid.
    • + +
    • The size of each section (variable k and sectionSize in the code and parameter k in + the paper) is initialized with a number set by the user via variable k. + When the number of sections doubles, we decrease sectionSize by a factor of sqrt(2). + This is applied at each level separately. Thus, when we double the number of sections, the + nominal compactor size increases by a factor of approx. sqrt(2) (+/- rounding).
    • + +
    • The merge operation here does not perform "special compactions", which are used in the paper + to allow for a tight mathematical analysis of the sketch.
    • +
    + +

    This implementation provides a number of capabilities not discussed in the paper or provided + in the Python prototype.

    + +
    • The Python prototype only implemented high accuracy for low ranks. This implementation + provides the user with the ability to choose either high rank accuracy or low rank accuracy at + the time of sketch construction.
    • +
    • The Python prototype only implemented a comparison criterion of "INCLUSIVE". This implementation + allows the user to switch back and forth between the "INCLUSIVE" criterion and the "EXCLUSIVE" criterion.
    • +
    • This implementation provides extensive debug visibility into the operation of the sketch with + two levels of detail output. This is not only useful for debugging, but is a powerful tool to + help users understand how the sketch works.
    • +
    +
    +
    Author:
    +
    Edo Liberty, Pavel Vesely, Lee Rhodes
    +
    See Also:
    +
    QuantilesAPI
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static ReqSketchBuilderbuilder() +
      Returns a new ReqSketchBuilder
      +
      double[]getCDF​(float[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      booleangetHighRankAccuracyMode() +
      If true, the high ranks are prioritized for better accuracy.
      +
      intgetK() +
      Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
      +
      floatgetMaxItem() +
      Returns the maximum item of the stream.
      +
      floatgetMinItem() +
      Returns the minimum item of the stream.
      +
      longgetN() +
      Gets the length of the input stream offered to the sketch..
      +
      intgetNumRetained() +
      Gets the number of quantiles retained by the sketch.
      +
      double[]getPMF​(float[] splitPoints, + QuantileSearchCriteria searchCrit) +
      Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints.
      +
      floatgetQuantile​(double normRank, + QuantileSearchCriteria searchCrit) +
      Gets the approximate quantile of the given normalized rank and the given search criterion.
      +
      floatgetQuantileLowerBound​(double rank) +
      Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
      +
      floatgetQuantileLowerBound​(double rank, + int numStdDev) 
      float[]getQuantiles​(double[] normRanks, + QuantileSearchCriteria searchCrit) +
      Gets an array of quantiles from the given array of normalized ranks.
      +
      floatgetQuantileUpperBound​(double rank) +
      Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
      +
      floatgetQuantileUpperBound​(double rank, + int numStdDev) 
      doublegetRank​(float quantile, + QuantileSearchCriteria searchCrit) +
      Gets the normalized rank corresponding to the given a quantile.
      +
      doublegetRankLowerBound​(double rank) +
      Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      doublegetRankLowerBound​(double rank, + int numStdDev) +
      Gets an approximate lower bound rank of the given normalized rank.
      +
      double[]getRanks​(float[] quantiles, + QuantileSearchCriteria searchCrit) +
      Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
      +
      doublegetRankUpperBound​(double rank) +
      Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
      +
      doublegetRankUpperBound​(double rank, + int numStdDev) +
      Gets an approximate upper bound rank of the given rank.
      +
      static doublegetRSE​(int k, + double rank, + boolean hra, + long totalN) +
      Returns an a priori estimate of relative standard error (RSE, expressed as a number in [0,1]).
      +
      intgetSerializedSizeBytes() +
      Returns the current number of bytes this Sketch would require if serialized.
      +
      FloatsSortedViewgetSortedView() +
      Gets the sorted view of this sketch
      +
      booleanhasMemory() +
      Returns true if this sketch's data structure is backed by Memory or WritableMemory.
      +
      static ReqSketchheapify​(org.apache.datasketches.memory.Memory mem) +
      Returns an ReqSketch on the heap from a Memory image of the sketch.
      +
      booleanisDirect() +
      Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
      +
      booleanisEmpty() +
      Returns true if this sketch is empty.
      +
      booleanisEstimationMode() +
      Returns true if this sketch is in estimation mode.
      +
      booleanisReadOnly() +
      Returns true if this sketch is read only.
      +
      QuantilesFloatsSketchIteratoriterator() +
      Gets the iterator for this sketch, which is not sorted.
      +
      ReqSketchmerge​(ReqSketch other) +
      Merge other sketch into this one.
      +
      voidreset() +
      Resets this sketch to the empty state.
      +
      byte[]toByteArray() +
      Returns a byte array representation of this sketch.
      +
      StringtoString() +
      Returns a summary of the key parameters of the sketch.
      +
      voidupdate​(float item) +
      Updates this sketch with the given item.
      +
      StringviewCompactorDetail​(String fmt, + boolean allData) +
      A detailed, human readable view of the sketch compactors and their data.
      +
      + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        builder

        +
        public static final ReqSketchBuilder builder()
        +
        Returns a new ReqSketchBuilder
        +
        +
        Returns:
        +
        a new ReqSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static ReqSketch heapify​(org.apache.datasketches.memory.Memory mem)
        +
        Returns an ReqSketch on the heap from a Memory image of the sketch.
        +
        +
        Parameters:
        +
        mem - The Memory object holding a valid image of an ReqSketch
        +
        Returns:
        +
        an ReqSketch on the heap from a Memory image of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
        Specified by:
        +
        getK in interface QuantilesAPI
        +
        Returns:
        +
        the user configured parameter k, which controls the accuracy of the sketch + and its memory space usage.
        +
        +
      • +
      + + + +
        +
      • +

        getCDF

        +
        public double[] getCDF​(float[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns an approximation to the Cumulative Distribution Function (CDF) of the input stream + as a monotonically increasing array of double ranks (or cumulative probabilities) on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(false) function.

        +
        +
        Specified by:
        +
        getCDF in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 overlapping intervals. + +

        The start of each interval is below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and the end of the interval + is the rank or cumulative probability corresponding to the split point.

        + +

        The (m+1)th interval represents 100% of the distribution represented by the sketch + and consistent with the definition of a cumulative probability distribution, thus the (m+1)th + rank or probability in the returned array is always 1.0.

        + +

        If a split point exactly equals a retained item of the sketch and the search criterion is:

        + +
          +
        • INCLUSIVE, the resulting cumulative probability will include that item.
        • +
        • EXCLUSIVE, the resulting cumulative probability will not include the weight of that split point.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a discrete CDF array of m+1 double ranks (or cumulative probabilities) on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getHighRankAccuracyMode

        +
        public boolean getHighRankAccuracyMode()
        +
        If true, the high ranks are prioritized for better accuracy. Otherwise + the low ranks are prioritized for better accuracy. This state is chosen during sketch + construction.
        +
        +
        Returns:
        +
        the high ranks accuracy state.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public float getMaxItem()
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns the maximum item of the stream. This is provided for convenience, but may be different from the largest + item retained by the sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface QuantilesFloatsAPI
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public float getMinItem()
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns the minimum item of the stream. This is provided for convenience, but is distinct from the smallest + item retained by the sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface QuantilesFloatsAPI
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the length of the input stream offered to the sketch..
        +
        +
        Specified by:
        +
        getN in interface QuantilesAPI
        +
        Returns:
        +
        the length of the input stream offered to the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getPMF

        +
        public double[] getPMF​(float[] splitPoints,
        +                       QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns an approximation to the Probability Mass Function (PMF) of the input stream + as an array of probability masses as doubles on the interval [0.0, 1.0], + given a set of splitPoints. + +

        The resulting approximations have a probabilistic guarantee that can be obtained from the + getNormalizedRankError(true) function.

        +
        +
        Specified by:
        +
        getPMF in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        splitPoints - an array of m unique, monotonically increasing items + (of the same type as the input items) + that divide the item input domain into m+1 consecutive, non-overlapping intervals. + +

        Each interval except for the end intervals starts with a split point and ends with the next split + point in sequence.

        + +

        The first interval starts below the lowest item retained by the sketch + corresponding to a zero rank or zero probability, and ends with the first split point

        + +

        The last (m+1)th interval starts with the last split point and ends after the last + item retained by the sketch corresponding to a rank or probability of 1.0.

        + +

        The sum of the probability masses of all (m+1) intervals is 1.0.

        + +

        If the search criterion is:

        + +
          +
        • INCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will include that item. If the lower split point equals an item retained by the sketch, the interval will exclude + that item.
        • +
        • EXCLUSIVE, and the upper split point of an interval equals an item retained by the sketch, the interval + will exclude that item. If the lower split point equals an item retained by the sketch, the interval will include + that item.
        • +
        + +

        It is not recommended to include either the minimum or maximum items of the input stream.

        +
        searchCrit - the desired search criteria.
        +
        Returns:
        +
        a PMF array of m+1 probability masses as doubles on the interval [0.0, 1.0].
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public float getQuantile​(double normRank,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        normRank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public float[] getQuantiles​(double[] normRanks,
        +                            QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets an array of quantiles from the given array of normalized ranks.
        +
        +
        Specified by:
        +
        getQuantiles in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        normRanks - the given array of normalized ranks, each of which must be + in the interval [0.0,1.0].
        +
        searchCrit - if INCLUSIVE, the given ranks include all quantiles ≤ + the quantile directly corresponding to each rank.
        +
        Returns:
        +
        an array of quantiles corresponding to the given array of normalized ranks.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        public float getQuantileLowerBound​(double rank)
        +
        Gets the lower bound of the quantile confidence interval in which the quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile confidence interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.95.
        +
        +
        Specified by:
        +
        getQuantileLowerBound in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the lower bound of the quantile confidence interval in which the quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileLowerBound

        +
        public float getQuantileLowerBound​(double rank,
        +                                   int numStdDev)
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        public float getQuantileUpperBound​(double rank)
        +
        Gets the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists. + +

        Although it is possible to estimate the probability that the true quantile + exists within the quantile confidence interval specified by the upper and lower quantile bounds, + it is not possible to guarantee the width of the quantile interval + as an additive or multiplicative percent of the true quantile.

        + The approximate probability that the true quantile is within the confidence interval + specified by the upper and lower quantile bounds for this sketch is 0.95.
        +
        +
        Specified by:
        +
        getQuantileUpperBound in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        rank - the given normalized rank
        +
        Returns:
        +
        the upper bound of the quantile confidence interval in which the true quantile of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantileUpperBound

        +
        public float getQuantileUpperBound​(double rank,
        +                                   int numStdDev)
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(float quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        public double getRankLowerBound​(double rank)
        +
        Gets the lower bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.95.
        +
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the lower bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankLowerBound

        +
        public double getRankLowerBound​(double rank,
        +                                int numStdDev)
        +
        Gets an approximate lower bound rank of the given normalized rank.
        +
        +
        Parameters:
        +
        rank - the given rank, a number between 0 and 1.0.
        +
        numStdDev - the number of standard deviations. Must be 1, 2, or 3.
        +
        Returns:
        +
        an approximate lower bound rank.
        +
        +
      • +
      + + + +
        +
      • +

        getRanks

        +
        public double[] getRanks​(float[] quantiles,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Gets an array of normalized ranks corresponding to the given array of quantiles and the given + search criterion.
        +
        +
        Specified by:
        +
        getRanks in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        quantiles - the given array of quantiles
        +
        searchCrit - if INCLUSIVE, the given quantiles include the rank directly corresponding to each quantile.
        +
        Returns:
        +
        an array of normalized ranks corresponding to the given array of quantiles.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        public double getRankUpperBound​(double rank)
        +
        Gets the upper bound of the rank confidence interval in which the true rank of the + given rank exists. + The approximate probability that the true rank is within the confidence interval + specified by the upper and lower rank bounds for this sketch is 0.95.
        +
        +
        Parameters:
        +
        rank - the given normalized rank.
        +
        Returns:
        +
        the upper bound of the rank confidence interval in which the true rank of the + given rank exists.
        +
        +
      • +
      + + + +
        +
      • +

        getRankUpperBound

        +
        public double getRankUpperBound​(double rank,
        +                                int numStdDev)
        +
        Gets an approximate upper bound rank of the given rank.
        +
        +
        Parameters:
        +
        rank - the given rank, a number between 0 and 1.0.
        +
        numStdDev - the number of standard deviations. Must be 1, 2, or 3.
        +
        Returns:
        +
        an approximate upper bound rank.
        +
        +
      • +
      + + + +
        +
      • +

        getNumRetained

        +
        public int getNumRetained()
        +
        Description copied from interface: QuantilesAPI
        +
        Gets the number of quantiles retained by the sketch.
        +
        +
        Specified by:
        +
        getNumRetained in interface QuantilesAPI
        +
        Returns:
        +
        the number of quantiles retained by the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getSerializedSizeBytes

        +
        public int getSerializedSizeBytes()
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns the current number of bytes this Sketch would require if serialized.
        +
        +
        Specified by:
        +
        getSerializedSizeBytes in interface QuantilesFloatsAPI
        +
        Returns:
        +
        the number of bytes this sketch would require if serialized.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is empty.
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is in estimation mode.
        +
        +
        Specified by:
        +
        isEstimationMode in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is in estimation mode.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        merge

        +
        public ReqSketch merge​(ReqSketch other)
        +
        Merge other sketch into this one. The other sketch is not modified.
        +
        +
        Parameters:
        +
        other - sketch to be merged into this one.
        +
        Returns:
        +
        this
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch to the empty state. + If the sketch is read only this does nothing. + +

        The parameter k will not change.

        +

        The parameters k, highRankAccuracy, and reqDebug will not change.

        +
        +
        Specified by:
        +
        reset in interface QuantilesAPI
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Returns a byte array representation of this sketch.
        +
        +
        Specified by:
        +
        toByteArray in interface QuantilesFloatsAPI
        +
        Returns:
        +
        a byte array representation of this sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns a summary of the key parameters of the sketch.
        +
        +
        Specified by:
        +
        toString in interface QuantilesAPI
        +
        Returns:
        +
        a summary of the key parameters of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(float item)
        +
        Description copied from interface: QuantilesFloatsAPI
        +
        Updates this sketch with the given item.
        +
        +
        Specified by:
        +
        update in interface QuantilesFloatsAPI
        +
        Parameters:
        +
        item - from a stream of quantiles. NaNs are ignored.
        +
        +
      • +
      + + + +
        +
      • +

        viewCompactorDetail

        +
        public String viewCompactorDetail​(String fmt,
        +                                  boolean allData)
        +
        A detailed, human readable view of the sketch compactors and their data. + Each compactor string is prepended by the compactor lgWeight, the current number of retained + quantiles of the compactor and the current nominal capacity of the compactor.
        +
        +
        Parameters:
        +
        fmt - the format string for the quantiles; example: "%4.0f".
        +
        allData - all the retained quantiles for the sketch will be output by + compactor level. Otherwise, just a summary will be output.
        +
        Returns:
        +
        a detailed view of the compactors and their data
        +
        +
      • +
      + + + +
        +
      • +

        getRSE

        +
        public static double getRSE​(int k,
        +                            double rank,
        +                            boolean hra,
        +                            long totalN)
        +
        Returns an a priori estimate of relative standard error (RSE, expressed as a number in [0,1]). + Derived from Lemma 12 in https://arxiv.org/abs/2004.01668v2, but the constant factors were + adjusted based on empirical measurements.
        +
        +
        Parameters:
        +
        k - the given size of k
        +
        rank - the given normalized rank, a number in [0,1].
        +
        hra - if true High Rank Accuracy mode is being selected, otherwise, Low Rank Accuracy.
        +
        totalN - an estimate of the total number of items submitted to the sketch.
        +
        Returns:
        +
        an a priori estimate of relative standard error (RSE, expressed as a number in [0,1]).
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        public boolean hasMemory()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
        Specified by:
        +
        hasMemory in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        public boolean isDirect()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
        Specified by:
        +
        isDirect in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch's data structure is off-heap (a.k.a., Direct or Native memory).
        +
        +
      • +
      + + + +
        +
      • +

        isReadOnly

        +
        public boolean isReadOnly()
        +
        Description copied from interface: QuantilesAPI
        +
        Returns true if this sketch is read only.
        +
        +
        Specified by:
        +
        isReadOnly in interface QuantilesAPI
        +
        Returns:
        +
        true if this sketch is read only.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/req/ReqSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/req/ReqSketchBuilder.html new file mode 100644 index 000000000..f9a6d4568 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/ReqSketchBuilder.html @@ -0,0 +1,472 @@ + + + + + +ReqSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReqSketchBuilder

+
+
+ +
+
    +
  • +
    +
    public class ReqSketchBuilder
    +extends Object
    +
    For building a new ReqSketch
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ReqSketchBuilder

        +
        public ReqSketchBuilder()
        +
        Constructor for the ReqSketchBuilder.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        build

        +
        public ReqSketch build()
        +
        Returns a new ReqSketch with the current configuration of the builder.
        +
        +
        Returns:
        +
        a new ReqSketch
        +
        +
      • +
      + + + +
        +
      • +

        getHighRankAccuracy

        +
        public boolean getHighRankAccuracy()
        +
        Gets the builder configured High Rank Accuracy.
        +
        +
        Returns:
        +
        the builder configured High Rank Accuracy.
        +
        +
      • +
      + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Gets the builder configured k.
        +
        +
        Returns:
        +
        the builder configured k.
        +
        +
      • +
      + + + +
        +
      • +

        getReqDebug

        +
        public ReqDebug getReqDebug()
        +
        Gets the builder configured ReqDebug
        +
        +
        Returns:
        +
        the builder configured ReqDebug, or null.
        +
        +
      • +
      + + + +
        +
      • +

        setHighRankAccuracy

        +
        public ReqSketchBuilder setHighRankAccuracy​(boolean hra)
        +
        This sets the parameter highRankAccuracy.
        +
        +
        Parameters:
        +
        hra - See ReqSketch#ReqSketch(int, boolean, ReqDebug)
        +
        Returns:
        +
        this
        +
        +
      • +
      + + + +
        +
      • +

        setK

        +
        public ReqSketchBuilder setK​(int k)
        +
        This sets the parameter k.
        +
        +
        Parameters:
        +
        k - See ReqSketch#ReqSketch(int, boolean, ReqDebug)
        +
        Returns:
        +
        this
        +
        +
      • +
      + + + +
        +
      • +

        setReqDebug

        +
        public ReqSketchBuilder setReqDebug​(ReqDebug reqDebug)
        +
        This sets the parameter reqDebug.
        +
        +
        Parameters:
        +
        reqDebug - See ReqSketch#ReqSketch(int, boolean, ReqDebug)
        +
        Returns:
        +
        this
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/req/ReqSketchIterator.html b/docs/5.0.X/org/apache/datasketches/req/ReqSketchIterator.html new file mode 100644 index 000000000..b9cc82ff3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/ReqSketchIterator.html @@ -0,0 +1,342 @@ + + + + + +ReqSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReqSketchIterator

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getQuantile

        +
        public float getQuantile()
        +
        Description copied from interface: QuantilesFloatsSketchIterator
        +
        Gets the float quantile at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getQuantile in interface QuantilesFloatsSketchIterator
        +
        Returns:
        +
        the float quantile at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        getWeight

        +
        public long getWeight()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Gets the natural weight at the current index. + +

        Don't call this before calling next() for the first time + or after getting false from next().

        +
        +
        Specified by:
        +
        getWeight in interface QuantilesSketchIterator
        +
        Returns:
        +
        the natural weight at the current index.
        +
        +
      • +
      + + + +
        +
      • +

        next

        +
        public boolean next()
        +
        Description copied from interface: QuantilesSketchIterator
        +
        Advances the index and checks if it is valid. + The state of this iterator is undefined before the first call of this method.
        +
        +
        Specified by:
        +
        next in interface QuantilesSketchIterator
        +
        Returns:
        +
        true if the next index is valid.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/req/ReqSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/req/ReqSketchSortedView.html new file mode 100644 index 000000000..ca0b68dde --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/ReqSketchSortedView.html @@ -0,0 +1,555 @@ + + + + + +ReqSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReqSketchSortedView

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ReqSketchSortedView

        +
        public ReqSketchSortedView​(ReqSketch sketch)
        +
        Constructs this Sorted View given the sketch
        +
        +
        Parameters:
        +
        sketch - the given ReqSketch
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCumulativeWeights

        +
        public long[] getCumulativeWeights()
        +
        Description copied from interface: SortedView
        +
        Returns the array of cumulative weights from the sketch. + Also known as the natural ranks, which are the Natural Numbers on the interval [1, N].
        +
        +
        Specified by:
        +
        getCumulativeWeights in interface SortedView
        +
        Returns:
        +
        the array of cumulative weights (or natural ranks).
        +
        +
      • +
      + + + +
        +
      • +

        getMaxItem

        +
        public float getMaxItem()
        +
        Description copied from interface: FloatsSortedView
        +
        Returns the maximum item of the stream. This may be distinct from the largest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMaxItem in interface FloatsSortedView
        +
        Returns:
        +
        the maximum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getMinItem

        +
        public float getMinItem()
        +
        Description copied from interface: FloatsSortedView
        +
        Returns the minimum item of the stream. This may be distinct from the smallest item retained by the + sketch algorithm.
        +
        +
        Specified by:
        +
        getMinItem in interface FloatsSortedView
        +
        Returns:
        +
        the minimum item of the stream
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Description copied from interface: SortedView
        +
        Returns the total number of items presented to the sourcing sketch.
        +
        +
        Specified by:
        +
        getN in interface SortedView
        +
        Returns:
        +
        the total number of items presented to the sourcing sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getQuantile

        +
        public float getQuantile​(double rank,
        +                         QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: FloatsSortedView
        +
        Gets the approximate quantile of the given normalized rank and the given search criterion.
        +
        +
        Specified by:
        +
        getQuantile in interface FloatsSortedView
        +
        Parameters:
        +
        rank - the given normalized rank, a double in the range [0.0, 1.0].
        +
        searchCrit - If INCLUSIVE, the given rank includes all quantiles ≤ + the quantile directly corresponding to the given rank. + If EXCLUSIVE, he given rank includes all quantiles < + the quantile directly corresponding to the given rank.
        +
        Returns:
        +
        the approximate quantile given the normalized rank.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        getQuantiles

        +
        public float[] getQuantiles()
        +
        Description copied from interface: FloatsSortedView
        +
        Returns an array of all retained quantiles by the sketch.
        +
        +
        Specified by:
        +
        getQuantiles in interface FloatsSortedView
        +
        Returns:
        +
        an array of all retained quantiles by the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getRank

        +
        public double getRank​(float quantile,
        +                      QuantileSearchCriteria searchCrit)
        +
        Description copied from interface: FloatsSortedView
        +
        Gets the normalized rank corresponding to the given a quantile.
        +
        +
        Specified by:
        +
        getRank in interface FloatsSortedView
        +
        Parameters:
        +
        quantile - the given quantile
        +
        searchCrit - if INCLUSIVE the given quantile is included into the rank.
        +
        Returns:
        +
        the normalized rank corresponding to the given quantile.
        +
        See Also:
        +
        QuantileSearchCriteria
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Description copied from interface: SortedView
        +
        Returns true if this sorted view is empty.
        +
        +
        Specified by:
        +
        isEmpty in interface SortedView
        +
        Returns:
        +
        true if this sorted view is empty.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/req/class-use/ReqDebug.html b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqDebug.html new file mode 100644 index 000000000..885d0c212 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqDebug.html @@ -0,0 +1,214 @@ + + + + + +Uses of Interface org.apache.datasketches.req.ReqDebug (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.req.ReqDebug

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketch.html b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketch.html new file mode 100644 index 000000000..e12562057 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketch.html @@ -0,0 +1,246 @@ + + + + + +Uses of Class org.apache.datasketches.req.ReqSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.req.ReqSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchBuilder.html new file mode 100644 index 000000000..7f1d2f78e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchBuilder.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class org.apache.datasketches.req.ReqSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.req.ReqSketchBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchIterator.html b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchIterator.html new file mode 100644 index 000000000..fc85e9536 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchIterator.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.req.ReqSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.req.ReqSketchIterator

+
+
No usage of org.apache.datasketches.req.ReqSketchIterator
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchSortedView.html b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchSortedView.html new file mode 100644 index 000000000..f397f4ce1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/class-use/ReqSketchSortedView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.req.ReqSketchSortedView (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.req.ReqSketchSortedView

+
+
No usage of org.apache.datasketches.req.ReqSketchSortedView
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/package-summary.html b/docs/5.0.X/org/apache/datasketches/req/package-summary.html new file mode 100644 index 000000000..34263d728 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/package-summary.html @@ -0,0 +1,216 @@ + + + + + +org.apache.datasketches.req (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.req

+
+
+
+ + +
This package is for the implementation of the Relative Error Quantiles sketch algorithm.
+
+
See Also:
+
ReqSketch
+
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    ReqDebug +
    The signaling interface that allows comprehensive analysis of the ReqSketch and ReqCompactor + while eliminating code clutter in the main classes.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ReqSketch +
    This Relative Error Quantiles Sketch is the Java implementation based on the paper + "Relative Error Streaming Quantiles" by Graham Cormode, Zohar Karnin, Edo Liberty, + Justin Thaler, Pavel Veselý, and loosely derived from a Python prototype written by Pavel Veselý.
    +
    ReqSketchBuilder +
    For building a new ReqSketch
    +
    ReqSketchIterator +
    Iterator over all retained items of the ReqSketch.
    +
    ReqSketchSortedView +
    The SortedView of the ReqSketch.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/package-tree.html b/docs/5.0.X/org/apache/datasketches/req/package-tree.html new file mode 100644 index 000000000..2c13310dc --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/package-tree.html @@ -0,0 +1,173 @@ + + + + + +org.apache.datasketches.req Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.req

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+
    +
  • org.apache.datasketches.req.ReqDebug
  • +
+
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/req/package-use.html b/docs/5.0.X/org/apache/datasketches/req/package-use.html new file mode 100644 index 000000000..58f14c9f1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/req/package-use.html @@ -0,0 +1,203 @@ + + + + + +Uses of Package org.apache.datasketches.req (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.req

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use org.apache.datasketches.req 
    PackageDescription
    org.apache.datasketches.req +
    This package is for the implementation of the Relative Error Quantiles sketch algorithm.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + +
    Classes in org.apache.datasketches.req used by org.apache.datasketches.req 
    ClassDescription
    ReqDebug +
    The signaling interface that allows comprehensive analysis of the ReqSketch and ReqCompactor + while eliminating code clutter in the main classes.
    +
    ReqSketch +
    This Relative Error Quantiles Sketch is the Java implementation based on the paper + "Relative Error Streaming Quantiles" by Graham Cormode, Zohar Karnin, Edo Liberty, + Justin Thaler, Pavel Veselý, and loosely derived from a Python prototype written by Pavel Veselý.
    +
    ReqSketchBuilder +
    For building a new ReqSketch
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsSketch.html b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsSketch.html new file mode 100644 index 000000000..e33be8490 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsSketch.html @@ -0,0 +1,663 @@ + + + + + +ReservoirItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReservoirItemsSketch<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.ReservoirItemsSketch<T>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - The type of object held in the reservoir.
    +
    +
    +
    public final class ReservoirItemsSketch<T>
    +extends Object
    +
    This sketch provides a reservoir sample over an input stream of items. The sketch contains a + uniform random sample of unweighted items from the stream.
    +
    +
    Author:
    +
    Jon Malkin, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      SampleSubsetSummaryestimateSubsetSum​(Predicate<T> predicate) +
      Computes an estimated subset sum from the entire stream for objects matching a given + predicate.
      +
      intgetK() +
      Returns the sketch's value of k, the maximum number of samples stored in the + reservoir.
      +
      longgetN() +
      Returns the number of items processed from the input stream
      +
      intgetNumSamples() +
      Returns the current number of items in the reservoir, which may be smaller than the + reservoir capacity.
      +
      T[]getSamples() +
      Returns a copy of the items in the reservoir, or null if empty.
      +
      T[]getSamples​(Class<?> clazz) +
      Returns a copy of the items in the reservoir as members of Class clazz, or null + if empty.
      +
      static <T> ReservoirItemsSketch<T>heapify​(org.apache.datasketches.memory.Memory srcMem, + ArrayOfItemsSerDe<T> serDe) +
      Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
      +
      static <T> ReservoirItemsSketch<T>newInstance​(int k) +
      Construct a mergeable sampling sketch with up to k samples using the default resize + factor (8).
      +
      static <T> ReservoirItemsSketch<T>newInstance​(int k, + ResizeFactor rf) +
      Construct a mergeable sampling sketch with up to k samples using a specified resize factor.
      +
      voidreset() +
      Resets this sketch to the empty state, but retains the original value of k.
      +
      byte[]toByteArray​(ArrayOfItemsSerDe<? super T> serDe) +
      Returns a byte array representation of this sketch.
      +
      byte[]toByteArray​(ArrayOfItemsSerDe<? super T> serDe, + Class<?> clazz) +
      Returns a byte array representation of this sketch.
      +
      StringtoString() +
      Returns a human-readable summary of the sketch, without items.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of a ReservoirItemsSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of a ReservoirItemsSketch.
      +
      voidupdate​(T item) +
      Randomly decide whether or not to include an item in the sample set.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newInstance

        +
        public static <T> ReservoirItemsSketch<T> newInstance​(int k)
        +
        Construct a mergeable sampling sketch with up to k samples using the default resize + factor (8).
        +
        +
        Type Parameters:
        +
        T - The type of object held in the reservoir.
        +
        Parameters:
        +
        k - Maximum size of sampling. Allocated size may be smaller until reservoir fills. + Unlike many sketches in this package, this value does not need to be a + power of 2.
        +
        Returns:
        +
        A ReservoirLongsSketch initialized with maximum size k and the default resize factor.
        +
        +
      • +
      + + + +
        +
      • +

        newInstance

        +
        public static <T> ReservoirItemsSketch<T> newInstance​(int k,
        +                                                      ResizeFactor rf)
        +
        Construct a mergeable sampling sketch with up to k samples using a specified resize factor.
        +
        +
        Type Parameters:
        +
        T - The type of object held in the reservoir.
        +
        Parameters:
        +
        k - Maximum size of sampling. Allocated size may be smaller until reservoir fills. + Unlike many sketches in this package, this value does not need to be a + power of 2.
        +
        rf - See Resize Factor
        +
        Returns:
        +
        A ReservoirLongsSketch initialized with maximum size k and resize factor rf.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static <T> ReservoirItemsSketch<T> heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                                  ArrayOfItemsSerDe<T> serDe)
        +
        Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
        +
        +
        Type Parameters:
        +
        T - The type of item this sketch contains
        +
        Parameters:
        +
        srcMem - a Memory representation of a sketch of this class. + See Memory
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a sketch instance of this class
        +
        +
      • +
      + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Returns the sketch's value of k, the maximum number of samples stored in the + reservoir. The current number of items in the sketch may be lower.
        +
        +
        Returns:
        +
        k, the maximum number of samples in the reservoir
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Returns the number of items processed from the input stream
        +
        +
        Returns:
        +
        n, the number of stream items the sketch has seen
        +
        +
      • +
      + + + +
        +
      • +

        getNumSamples

        +
        public int getNumSamples()
        +
        Returns the current number of items in the reservoir, which may be smaller than the + reservoir capacity.
        +
        +
        Returns:
        +
        the number of items currently in the reservoir
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(T item)
        +
        Randomly decide whether or not to include an item in the sample set.
        +
        +
        Parameters:
        +
        item - a unit-weight (equivalently, unweighted) item of the set being sampled from
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch to the empty state, but retains the original value of k.
        +
      • +
      + + + +
        +
      • +

        getSamples

        +
        public T[] getSamples()
        +
        Returns a copy of the items in the reservoir, or null if empty. The returned array length + may be smaller than the reservoir capacity. + +

        In order to allocate an array of generic type T, uses the class of the first item in + the array. This method method may throw an ArrayAssignmentException if the + reservoir stores instances of a polymorphic base class.

        +
        +
        Returns:
        +
        A copy of the reservoir array
        +
        +
      • +
      + + + +
        +
      • +

        getSamples

        +
        public T[] getSamples​(Class<?> clazz)
        +
        Returns a copy of the items in the reservoir as members of Class clazz, or null + if empty. The returned array length may be smaller than the reservoir capacity. + +

        This method allocates an array of class clazz, which must either match or + extend T. This method should be used when objects in the array are all instances of T but + are not necessarily instances of the base class.

        +
        +
        Parameters:
        +
        clazz - A class to which the items are cast before returning
        +
        Returns:
        +
        A copy of the reservoir array
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human-readable summary of the sketch, without items.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        A string version of the sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of a ReservoirItemsSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a ReservoirItemsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of a ReservoirItemsSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a ReservoirItemsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<? super T> serDe)
        +
        Returns a byte array representation of this sketch. May fail for polymorphic item types.
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a byte array representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<? super T> serDe,
        +                          Class<?> clazz)
        +
        Returns a byte array representation of this sketch. Copies contents into an array of the + specified class for serialization to allow for polymorphic types.
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        clazz - The class represented by <T>
        +
        Returns:
        +
        a byte array representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        estimateSubsetSum

        +
        public SampleSubsetSummary estimateSubsetSum​(Predicate<T> predicate)
        +
        Computes an estimated subset sum from the entire stream for objects matching a given + predicate. Provides a lower bound, estimate, and upper bound using a target of 2 standard + deviations. + +

        This is technically a heuristic method, and tries to err on the conservative side.

        +
        +
        Parameters:
        +
        predicate - A predicate to use when identifying items.
        +
        Returns:
        +
        A summary object containing the estimate, upper and lower bounds, and the total + sketch weight.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsUnion.html b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsUnion.html new file mode 100644 index 000000000..6a987658e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirItemsUnion.html @@ -0,0 +1,547 @@ + + + + + +ReservoirItemsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReservoirItemsUnion<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.ReservoirItemsUnion<T>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - The specific Java type for this sketch
    +
    +
    +
    public final class ReservoirItemsUnion<T>
    +extends Object
    +
    Class to union reservoir samples of generic items. + +

    For efficiency reasons, the unioning process picks one of the two sketches to use as the + base. As a result, we provide only a stateful union. Using the same approach for a merge would + result in unpredictable side effects on the underlying sketches.

    + +

    A union object is created with a maximum value of k, represented using the + ReservoirSize class. The unioning process may cause the actual number of samples to fall below + that maximum value, but never to exceed it. The result of a union will be a reservoir where + each item from the global input has a uniform probability of selection, but there are no + claims about higher order statistics. For instance, in general all possible permutations of + the global input are not equally likely.

    + +

    If taking the union of two reservoirs of different sizes, the output sample will contain no more + than MIN(k_1, k_2) samples.

    +
    +
    Author:
    +
    Jon Malkin, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newInstance

        +
        public static <T> ReservoirItemsUnion<T> newInstance​(int maxK)
        +
        Creates an empty Union with a maximum reservoir capacity of size k.
        +
        +
        Type Parameters:
        +
        T - The type of item this sketch contains
        +
        Parameters:
        +
        maxK - The maximum allowed reservoir capacity for any sketches in the union
        +
        Returns:
        +
        A new ReservoirItemsUnion
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static <T> ReservoirItemsUnion<T> heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                                 ArrayOfItemsSerDe<T> serDe)
        +
        Instantiates a Union from Memory
        +
        +
        Type Parameters:
        +
        T - The type of item this sketch contains
        +
        Parameters:
        +
        srcMem - Memory object containing a serialized union
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        A ReservoirItemsUnion created from the provided Memory
        +
        +
      • +
      + + + +
        +
      • +

        getMaxK

        +
        public int getMaxK()
        +
        Returns the maximum allowed reservoir capacity in this union. The current reservoir capacity + may be lower.
        +
        +
        Returns:
        +
        The maximum allowed reservoir capacity in this union.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(ReservoirItemsSketch<T> sketchIn)
        +
        Union the given sketch. This method can be repeatedly called. If the given sketch is null it is + interpreted as an empty sketch.
        +
        +
        Parameters:
        +
        sketchIn - The incoming sketch.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(org.apache.datasketches.memory.Memory mem,
        +                   ArrayOfItemsSerDe<T> serDe)
        +
        Union the given Memory image of the sketch. + +

        This method can be repeatedly called. If the given sketch is null it is interpreted as an + empty sketch.

        +
        +
        Parameters:
        +
        mem - Memory image of sketch to be merged
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(T datum)
        +
        Present this union with a single item to be added to the union.
        +
        +
        Parameters:
        +
        datum - The given datum of type T.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long n,
        +                   int k,
        +                   ArrayList<T> input)
        +
        Present this union with raw elements of a sketch. Useful when operating in a distributed + environment like Pig Latin scripts, where an explicit SerDe may be overly complicated but + keeping raw values is simple. Values are not copied and the input array may be + modified.
        +
        +
        Parameters:
        +
        n - Total items seen
        +
        k - Reservoir size
        +
        input - Reservoir samples
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public ReservoirItemsSketch<T> getResult()
        +
        Returns a sketch representing the current state of the union.
        +
        +
        Returns:
        +
        The result of any unions already processed.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<T> serDe)
        +
        Returns a byte array representation of this union
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a byte array representation of this union
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human-readable summary of the sketch, without items.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        A string version of the sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<T> serDe,
        +                          Class<?> clazz)
        +
        Returns a byte array representation of this union. This method should be used when the array + elements are subclasses of a common base class.
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        clazz - A class to which the items are cast before serialization
        +
        Returns:
        +
        a byte array representation of this union
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsSketch.html b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsSketch.html new file mode 100644 index 000000000..be50c57e5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsSketch.html @@ -0,0 +1,584 @@ + + + + + +ReservoirLongsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReservoirLongsSketch

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.ReservoirLongsSketch
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class ReservoirLongsSketch
    +extends Object
    +
    This sketch provides a reservoir sample over an input stream of longs. The sketch + contains a uniform random sample of items from the stream.
    +
    +
    Author:
    +
    Jon Malkin, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      SampleSubsetSummaryestimateSubsetSum​(Predicate<Long> predicate) +
      Computes an estimated subset sum from the entire stream for objects matching a given + predicate.
      +
      intgetK() +
      Returns the sketch's value of k, the maximum number of samples stored in the reservoir.
      +
      longgetN() +
      Returns the number of items processed from the input stream
      +
      intgetNumSamples() +
      Returns the current number of items in the reservoir, which may be smaller than the reservoir + capacity.
      +
      long[]getSamples() +
      Returns a copy of the items in the reservoir.
      +
      static ReservoirLongsSketchheapify​(org.apache.datasketches.memory.Memory srcMem) +
      Returns a sketch instance of this class from the given srcMem, which must be a Memory + representation of this sketch class.
      +
      static ReservoirLongsSketchnewInstance​(int k) +
      Construct a mergeable reservoir sampling sketch with up to k samples using the default resize + factor (8).
      +
      static ReservoirLongsSketchnewInstance​(int k, + ResizeFactor rf) +
      Construct a mergeable reservoir sampling sketch with up to k samples using the default resize + factor (8).
      +
      voidreset() +
      Resets this sketch to the empty state, but retains the original value of k.
      +
      byte[]toByteArray() +
      Returns a byte array representation of this sketch
      +
      StringtoString() +
      Returns a human-readable summary of the sketch, without items.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of a ReservoirLongsSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of a ReservoirLongsSketch.
      +
      voidupdate​(long item) +
      Randomly decide whether or not to include an item in the sample set.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newInstance

        +
        public static ReservoirLongsSketch newInstance​(int k)
        +
        Construct a mergeable reservoir sampling sketch with up to k samples using the default resize + factor (8).
        +
        +
        Parameters:
        +
        k - Maximum size of sampling. Allocated size may be smaller until sampling fills. Unlike + many sketches in this package, this value does not need to be a power of 2.
        +
        Returns:
        +
        A ReservoirLongsSketch initialized with maximum size k and the default resize factor.
        +
        +
      • +
      + + + +
        +
      • +

        newInstance

        +
        public static ReservoirLongsSketch newInstance​(int k,
        +                                               ResizeFactor rf)
        +
        Construct a mergeable reservoir sampling sketch with up to k samples using the default resize + factor (8).
        +
        +
        Parameters:
        +
        k - Maximum size of sampling. Allocated size may be smaller until sampling fills. Unlike + many sketches in this package, this value does not need to be a power of 2.
        +
        rf - See Resize Factor
        +
        Returns:
        +
        A ReservoirLongsSketch initialized with maximum size k and ResizeFactor rf.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static ReservoirLongsSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Returns a sketch instance of this class from the given srcMem, which must be a Memory + representation of this sketch class.
        +
        +
        Parameters:
        +
        srcMem - a Memory representation of a sketch of this class. See Memory
        +
        Returns:
        +
        a sketch instance of this class
        +
        +
      • +
      + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Returns the sketch's value of k, the maximum number of samples stored in the reservoir. + The current number of items in the sketch may be lower.
        +
        +
        Returns:
        +
        k, the maximum number of samples in the reservoir
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Returns the number of items processed from the input stream
        +
        +
        Returns:
        +
        n, the number of stream items the sketch has seen
        +
        +
      • +
      + + + +
        +
      • +

        getNumSamples

        +
        public int getNumSamples()
        +
        Returns the current number of items in the reservoir, which may be smaller than the reservoir + capacity.
        +
        +
        Returns:
        +
        the number of items currently in the reservoir
        +
        +
      • +
      + + + +
        +
      • +

        getSamples

        +
        public long[] getSamples()
        +
        Returns a copy of the items in the reservoir. The returned array length may be smaller than the + reservoir capacity.
        +
        +
        Returns:
        +
        A copy of the reservoir array
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long item)
        +
        Randomly decide whether or not to include an item in the sample set.
        +
        +
        Parameters:
        +
        item - a unit-weight (equivalently, unweighted) item of the set being sampled from
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch to the empty state, but retains the original value of k.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human-readable summary of the sketch, without items.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        A string version of the sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of a ReservoirLongsSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a ReservoirLongsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of a ReservoirLongsSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a ReservoirLongsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Returns a byte array representation of this sketch
        +
        +
        Returns:
        +
        a byte array representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        estimateSubsetSum

        +
        public SampleSubsetSummary estimateSubsetSum​(Predicate<Long> predicate)
        +
        Computes an estimated subset sum from the entire stream for objects matching a given + predicate. Provides a lower bound, estimate, and upper bound using a target of 2 standard + deviations. + +

        This is technically a heuristic method, and tries to err on the conservative side.

        +
        +
        Parameters:
        +
        predicate - A predicate to use when identifying items.
        +
        Returns:
        +
        A summary object containing the estimate, upper and lower bounds, and the total + sketch weight.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsUnion.html b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsUnion.html new file mode 100644 index 000000000..bf2409a34 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/ReservoirLongsUnion.html @@ -0,0 +1,478 @@ + + + + + +ReservoirLongsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReservoirLongsUnion

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.ReservoirLongsUnion
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class ReservoirLongsUnion
    +extends Object
    +
    Class to union reservoir samples of longs. + +

    + For efficiency reasons, the unioning process picks one of the two sketches to use as the base. As + a result, we provide only a stateful union. Using the same approach for a merge would result in + unpredictable side effects on the underlying sketches. +

    + +

    + A union object is created with a maximum value of k, represented using the ReservoirSize + class. The unioning process may cause the actual number of samples to fall below that maximum + value, but never to exceed it. The result of a union will be a reservoir where each item from the + global input has a uniform probability of selection, but there are no claims about higher order + statistics. For instance, in general all possible permutations of the global input are not + equally likely. +

    +
    +
    Author:
    +
    Jon Malkin, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newInstance

        +
        public static ReservoirLongsUnion newInstance​(int maxK)
        +
        Creates an empty Union with a maximum reservoir capacity of size k.
        +
        +
        Parameters:
        +
        maxK - The maximum allowed reservoir capacity for any sketches in the union
        +
        Returns:
        +
        A new ReservoirLongsUnion
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static ReservoirLongsUnion heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Instantiates a Union from Memory
        +
        +
        Parameters:
        +
        srcMem - Memory object containing a serialized union
        +
        Returns:
        +
        A ReservoirLongsUnion created from the provided Memory
        +
        +
      • +
      + + + +
        +
      • +

        getMaxK

        +
        public int getMaxK()
        +
        Returns the maximum allowed reservoir capacity in this union. The current reservoir capacity + may be lower.
        +
        +
        Returns:
        +
        The maximum allowed reservoir capacity in this union.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(ReservoirLongsSketch sketchIn)
        +
        Union the given sketch. +

        + This method can be repeatedly called. If the given sketch is null it is interpreted as an empty + sketch. +

        +
        +
        Parameters:
        +
        sketchIn - The incoming sketch.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(org.apache.datasketches.memory.Memory mem)
        +
        Union the given Memory image of the sketch. + +

        + This method can be repeatedly called. If the given sketch is null it is interpreted as an empty + sketch. +

        +
        +
        Parameters:
        +
        mem - Memory image of sketch to be merged
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long datum)
        +
        Present this union with a long.
        +
        +
        Parameters:
        +
        datum - The given long datum.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public ReservoirLongsSketch getResult()
        +
        Returns a sketch representing the current state of the union.
        +
        +
        Returns:
        +
        The result of any unions already processed.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human-readable summary of the sketch, without items.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        A string version of the sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Returns a byte array representation of this union
        +
        +
        Returns:
        +
        a byte array representation of this union
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/SampleSubsetSummary.html b/docs/5.0.X/org/apache/datasketches/sampling/SampleSubsetSummary.html new file mode 100644 index 000000000..7d4841dc9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/SampleSubsetSummary.html @@ -0,0 +1,330 @@ + + + + + +SampleSubsetSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SampleSubsetSummary

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.SampleSubsetSummary
    • +
    +
  • +
+
+
    +
  • +
    +
    public class SampleSubsetSummary
    +extends Object
    +
    A simple object o capture the results of a subset sum query on a sampling sketch.
    +
    +
    Author:
    +
    Jon Malkin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound()
        +
        +
        Returns:
        +
        the Lower Bound
        +
        +
      • +
      + + + +
        +
      • +

        getTotalSketchWeight

        +
        public double getTotalSketchWeight()
        +
        +
        Returns:
        +
        the total sketch weight
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound()
        +
        +
        Returns:
        +
        the Upper Bound
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        +
        Returns:
        +
        the unique count estimate
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.VarOptItemsIterator.html b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.VarOptItemsIterator.html new file mode 100644 index 000000000..85e04dc47 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.VarOptItemsIterator.html @@ -0,0 +1,306 @@ + + + + + +VarOptItemsSamples.VarOptItemsIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class VarOptItemsSamples.VarOptItemsIterator

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.VarOptItemsSamples.VarOptItemsIterator
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.WeightedSample.html b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.WeightedSample.html new file mode 100644 index 000000000..43dcea0db --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.WeightedSample.html @@ -0,0 +1,300 @@ + + + + + +VarOptItemsSamples.WeightedSample (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class VarOptItemsSamples.WeightedSample

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.VarOptItemsSamples.WeightedSample
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    VarOptItemsSamples<T>
    +
    +
    +
    public final class VarOptItemsSamples.WeightedSample
    +extends Object
    +
    A convenience class to allow easy iterator access to a VarOpt sample.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getItem

        +
        public T getItem()
        +
        Accesses the iterator's current object
        +
        +
        Returns:
        +
        An item from the sketch's data sample
        +
        +
      • +
      + + + +
        +
      • +

        getWeight

        +
        public double getWeight()
        +
        Accesses the iterator's current weight value
        +
        +
        Returns:
        +
        A weight from the sketch's data sample
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.html b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.html new file mode 100644 index 000000000..443d587ef --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSamples.html @@ -0,0 +1,482 @@ + + + + + +VarOptItemsSamples (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class VarOptItemsSamples<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.VarOptItemsSamples<T>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - an item of type T
    +
    +
    +
    All Implemented Interfaces:
    +
    Iterable<VarOptItemsSamples.WeightedSample>
    +
    +
    +
    public class VarOptItemsSamples<T>
    +extends Object
    +implements Iterable<VarOptItemsSamples.WeightedSample>
    +
    This class provides access to the samples contained in a VarOptItemsSketch. It provides two + mechanisms for access: +
      +
    • An Iterator over WeightedSample objects which can can be used to + access both the items and weights in the sample, and which avoids copying data from the + sketch.
    • +
    • Getter methods to obtain items or weights as arrays, or individual items. These + methods create a (shallow) copy of data from the sketch on the first call to any get + method.
    • +
    + +

    If using getters with a sketch storing heterogeneous items from a polymorphic base class, you + must call setClass() prior to calling one of the getter methods. This is not + necessary if using the iterator.

    + +

    The class also implements Iterable to allow the use of forEach loops for + convenience.

    +
    +
    Author:
    +
    Jon Malkin
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        setClass

        +
        public void setClass​(Class<?> clazz)
        +
        Specifies the class to use when copying the item array from the sketch. This method is + required if the sketch stores heterogeneous item types of some base class, for instance a + sketch over Numbers.
        +
        +
        Parameters:
        +
        clazz - The class to use when creating the item array result
        +
        +
      • +
      + + + +
        +
      • +

        getNumSamples

        +
        public int getNumSamples()
        +
        Returns the length Copies items and weights from the sketch, if necessary, and returns the + length of + any + resulting array. The result will be 0 for an empty sketch.
        +
        +
        Returns:
        +
        The number of items and weights in the sketch
        +
        +
      • +
      + + + +
        +
      • +

        items

        +
        public T[] items()
        +
        Returns a shallow copy of the array of sample items contained in the sketch. If this is the + first getter call, copies data arrays from the sketch.
        +
        +
        Returns:
        +
        The number of samples contained in the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        items

        +
        public T items​(int i)
        +
        Returns a single item from the samples contained in the sketch. Does not perform bounds + checking on the input. If this is the first getter call, copies data arrays from the sketch.
        +
        +
        Parameters:
        +
        i - An index into the list of samples
        +
        Returns:
        +
        The sample at array position i
        +
        +
      • +
      + + + +
        +
      • +

        weights

        +
        public double[] weights()
        +
        Returns a copy of the array of weights contained in the sketch. If this is the first + getter call, copies data arrays from the sketch.
        +
        +
        Returns:
        +
        The number of samples contained in the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        weights

        +
        public double weights​(int i)
        +
        Returns a single weight from the samples contained in the sketch. Does not perform bounds + checking on the input. If this is the first getter call, copies data arrays from the sketch.
        +
        +
        Parameters:
        +
        i - An index into the list of weights
        +
        Returns:
        +
        The weight at array position i
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSketch.html b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSketch.html new file mode 100644 index 000000000..7fb6b38c8 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsSketch.html @@ -0,0 +1,634 @@ + + + + + +VarOptItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class VarOptItemsSketch<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.VarOptItemsSketch<T>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - The type of object held in the sketch.
    +
    +
    +
    public final class VarOptItemsSketch<T>
    +extends Object
    +
    This sketch provides a variance optimal sample over an input stream of weighted items. The + sketch can be used to compute subset sums over predicates, producing estimates with optimal + variance for a given sketch size. + +

    Using this sketch with uniformly constant item weights (e.g. 1.0) will produce a standard + reservoir sample over the steam.

    +
    +
    Author:
    +
    Jon Malkin, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      SampleSubsetSummaryestimateSubsetSum​(Predicate<T> predicate) +
      Computes an estimated subset sum from the entire stream for objects matching a given + predicate.
      +
      intgetK() +
      Returns the sketch's value of k, the maximum number of samples stored in the + sketch.
      +
      longgetN() +
      Returns the number of items processed from the input stream
      +
      intgetNumSamples() +
      Returns the current number of items in the sketch, which may be smaller than the + sketch capacity.
      +
      VarOptItemsSamples<T>getSketchSamples() +
      Gets a result iterator object.
      +
      static <T> VarOptItemsSketch<T>heapify​(org.apache.datasketches.memory.Memory srcMem, + ArrayOfItemsSerDe<T> serDe) +
      Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
      +
      static <T> VarOptItemsSketch<T>newInstance​(int k) +
      Construct a varopt sampling sketch with up to k samples using the default resize factor (8).
      +
      static <T> VarOptItemsSketch<T>newInstance​(int k, + ResizeFactor rf) +
      Construct a varopt sampling sketch with up to k samples using the specified resize factor.
      +
      voidreset() +
      Resets this sketch to the empty state, but retains the original value of k.
      +
      byte[]toByteArray​(ArrayOfItemsSerDe<? super T> serDe) +
      Returns a byte array representation of this sketch.
      +
      byte[]toByteArray​(ArrayOfItemsSerDe<? super T> serDe, + Class<?> clazz) +
      Returns a byte array representation of this sketch.
      +
      StringtoString() +
      Returns a human-readable summary of the sketch.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of a VarOptItemsSketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of a VarOptItemsSketch.
      +
      voidupdate​(T item, + double weight) +
      Randomly decide whether or not to include an item in the sample set.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newInstance

        +
        public static <T> VarOptItemsSketch<T> newInstance​(int k)
        +
        Construct a varopt sampling sketch with up to k samples using the default resize factor (8).
        +
        +
        Type Parameters:
        +
        T - The type of object held in the sketch.
        +
        Parameters:
        +
        k - Maximum size of sampling. Allocated size may be smaller until sketch fills. + Unlike many sketches in this package, this value does not need to be a + power of 2.
        +
        Returns:
        +
        A VarOptItemsSketch initialized with maximum size k and resize factor rf.
        +
        +
      • +
      + + + +
        +
      • +

        newInstance

        +
        public static <T> VarOptItemsSketch<T> newInstance​(int k,
        +                                                   ResizeFactor rf)
        +
        Construct a varopt sampling sketch with up to k samples using the specified resize factor.
        +
        +
        Type Parameters:
        +
        T - The type of object held in the sketch.
        +
        Parameters:
        +
        k - Maximum size of sampling. Allocated size may be smaller until sketch fills. + Unlike many sketches in this package, this value does not need to be a + power of 2. The maximum size is Integer.MAX_VALUE-1.
        +
        rf - See Resize Factor
        +
        Returns:
        +
        A VarOptItemsSketch initialized with maximum size k and resize factor rf.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static <T> VarOptItemsSketch<T> heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                               ArrayOfItemsSerDe<T> serDe)
        +
        Returns a sketch instance of this class from the given srcMem, + which must be a Memory representation of this sketch class.
        +
        +
        Type Parameters:
        +
        T - The type of item this sketch contains
        +
        Parameters:
        +
        srcMem - a Memory representation of a sketch of this class. + See Memory
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a sketch instance of this class
        +
        +
      • +
      + + + +
        +
      • +

        getK

        +
        public int getK()
        +
        Returns the sketch's value of k, the maximum number of samples stored in the + sketch. The current number of items in the sketch may be lower.
        +
        +
        Returns:
        +
        k, the maximum number of samples in the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getN

        +
        public long getN()
        +
        Returns the number of items processed from the input stream
        +
        +
        Returns:
        +
        n, the number of stream items the sketch has seen
        +
        +
      • +
      + + + +
        +
      • +

        getNumSamples

        +
        public int getNumSamples()
        +
        Returns the current number of items in the sketch, which may be smaller than the + sketch capacity.
        +
        +
        Returns:
        +
        the number of items currently in the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getSketchSamples

        +
        public VarOptItemsSamples<T> getSketchSamples()
        +
        Gets a result iterator object.
        +
        +
        Returns:
        +
        An object with an iterator over the results
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(T item,
        +                   double weight)
        +
        Randomly decide whether or not to include an item in the sample set.
        +
        +
        Parameters:
        +
        item - an item of the set being sampled from
        +
        weight - a strictly positive weight associated with the item
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch to the empty state, but retains the original value of k.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human-readable summary of the sketch.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        A string version of the sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of a VarOptItemsSketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a VarOptItemsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of a VarOptItemsSketch.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a VarOptItemsSketch.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<? super T> serDe)
        +
        Returns a byte array representation of this sketch. May fail for polymorphic item types.
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a byte array representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<? super T> serDe,
        +                          Class<?> clazz)
        +
        Returns a byte array representation of this sketch. Copies contents into an array of the + specified class for serialization to allow for polymorphic types.
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        clazz - The class represented by <T>
        +
        Returns:
        +
        a byte array representation of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        estimateSubsetSum

        +
        public SampleSubsetSummary estimateSubsetSum​(Predicate<T> predicate)
        +
        Computes an estimated subset sum from the entire stream for objects matching a given + predicate. Provides a lower bound, estimate, and upper bound using a target of 2 standard + deviations. + +

        This is technically a heuristic method, and tries to err on the conservative side.

        +
        +
        Parameters:
        +
        predicate - A predicate to use when identifying items.
        +
        Returns:
        +
        A summary object containing the estimate, upper and lower bounds, and the total + sketch weight.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsUnion.html b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsUnion.html new file mode 100644 index 000000000..a32537720 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/VarOptItemsUnion.html @@ -0,0 +1,498 @@ + + + + + +VarOptItemsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class VarOptItemsUnion<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.sampling.VarOptItemsUnion<T>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - Type of items
    +
    +
    +
    public final class VarOptItemsUnion<T>
    +extends Object
    +
    Provides a unioning operation over varopt sketches. This union allows the sample size k to float, + possibly increasing or decreasing as warranted by the available data.
    +
    +
    Author:
    +
    Jon Malkin, Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newInstance

        +
        public static <T> VarOptItemsUnion<T> newInstance​(int maxK)
        +
        Creates an empty Union with a maximum capacity of size k.
        +
        +
        Type Parameters:
        +
        T - The type of item this union contains
        +
        Parameters:
        +
        maxK - The maximum allowed capacity of the unioned result
        +
        Returns:
        +
        A new VarOptItemsUnion
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static <T> VarOptItemsUnion<T> heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                              ArrayOfItemsSerDe<T> serDe)
        +
        Instantiates a Union from Memory
        +
        +
        Type Parameters:
        +
        T - The type of item this sketch contains
        +
        Parameters:
        +
        srcMem - Memory object containing a serialized union
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        A VarOptItemsUnion created from the provided Memory
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(VarOptItemsSketch<T> sketchIn)
        +
        Union the given sketch. + +

        This method can be repeatedly called.

        +
        +
        Parameters:
        +
        sketchIn - The sketch to be merged
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(org.apache.datasketches.memory.Memory mem,
        +                   ArrayOfItemsSerDe<T> serDe)
        +
        Union the given Memory image of the sketch. + +

        This method can be repeatedly called.

        +
        +
        Parameters:
        +
        mem - Memory image of sketch to be merged
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(ReservoirItemsSketch<T> reservoirIn)
        +
        Union a reservoir sketch. The reservoir sample is treated as if all items were added with a + weight of 1.0.
        +
        +
        Parameters:
        +
        reservoirIn - The reservoir sketch to be merged
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public VarOptItemsSketch<T> getResult()
        +
        Gets the varopt sketch resulting from the union of any input sketches.
        +
        +
        Returns:
        +
        A varopt sketch
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch to the empty state, but retains the original value of max k.
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human-readable summary of the sketch, without items.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        A string version of the sketch summary
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<T> serDe)
        +
        Returns a byte array representation of this union
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        Returns:
        +
        a byte array representation of this union
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray​(ArrayOfItemsSerDe<T> serDe,
        +                          Class<?> clazz)
        +
        Returns a byte array representation of this union. This method should be used when the array + elements are subclasses of a common base class.
        +
        +
        Parameters:
        +
        serDe - An instance of ArrayOfItemsSerDe
        +
        clazz - A class to which the items are cast before serialization
        +
        Returns:
        +
        a byte array representation of this union
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsSketch.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsSketch.html new file mode 100644 index 000000000..b63a426b9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsSketch.html @@ -0,0 +1,247 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.ReservoirItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.ReservoirItemsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsUnion.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsUnion.html new file mode 100644 index 000000000..a8d1e3b58 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirItemsUnion.html @@ -0,0 +1,206 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.ReservoirItemsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.ReservoirItemsUnion

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsSketch.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsSketch.html new file mode 100644 index 000000000..7c06be6fe --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsSketch.html @@ -0,0 +1,240 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.ReservoirLongsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.ReservoirLongsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsUnion.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsUnion.html new file mode 100644 index 000000000..8b4230292 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/ReservoirLongsUnion.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.ReservoirLongsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.ReservoirLongsUnion

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/SampleSubsetSummary.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/SampleSubsetSummary.html new file mode 100644 index 000000000..22e44eb4d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/SampleSubsetSummary.html @@ -0,0 +1,215 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.SampleSubsetSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.SampleSubsetSummary

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.VarOptItemsIterator.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.VarOptItemsIterator.html new file mode 100644 index 000000000..1b475049c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.VarOptItemsIterator.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.VarOptItemsSamples.VarOptItemsIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.VarOptItemsSamples.VarOptItemsIterator

+
+
No usage of org.apache.datasketches.sampling.VarOptItemsSamples.VarOptItemsIterator
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.WeightedSample.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.WeightedSample.html new file mode 100644 index 000000000..7c563fb7c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.WeightedSample.html @@ -0,0 +1,211 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.VarOptItemsSamples.WeightedSample (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.VarOptItemsSamples.WeightedSample

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.html new file mode 100644 index 000000000..4235b1830 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSamples.html @@ -0,0 +1,198 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.VarOptItemsSamples (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.VarOptItemsSamples

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSketch.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSketch.html new file mode 100644 index 000000000..66dbb3ba3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsSketch.html @@ -0,0 +1,239 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.VarOptItemsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.VarOptItemsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsUnion.html b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsUnion.html new file mode 100644 index 000000000..070cc7dca --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/class-use/VarOptItemsUnion.html @@ -0,0 +1,206 @@ + + + + + +Uses of Class org.apache.datasketches.sampling.VarOptItemsUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.sampling.VarOptItemsUnion

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/package-summary.html b/docs/5.0.X/org/apache/datasketches/sampling/package-summary.html new file mode 100644 index 000000000..060df4475 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/package-summary.html @@ -0,0 +1,226 @@ + + + + + +org.apache.datasketches.sampling (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.sampling

+
+
+
+ + +

This package is dedicated to streaming algorithms that enable fixed size, uniform sampling of + weighted and unweighted items from a stream.

+ +

These sketches are mergeable and can be serialized and deserialized to/from a compact + form.

+
+
See Also:
+
ReservoirItemsSketch, +ReservoirLongsSketch, +VarOptItemsSketch
+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ReservoirItemsSketch<T> +
    This sketch provides a reservoir sample over an input stream of items.
    +
    ReservoirItemsUnion<T> +
    Class to union reservoir samples of generic items.
    +
    ReservoirLongsSketch +
    This sketch provides a reservoir sample over an input stream of longs.
    +
    ReservoirLongsUnion +
    Class to union reservoir samples of longs.
    +
    SampleSubsetSummary +
    A simple object o capture the results of a subset sum query on a sampling sketch.
    +
    VarOptItemsSamples<T> +
    This class provides access to the samples contained in a VarOptItemsSketch.
    +
    VarOptItemsSketch<T> +
    This sketch provides a variance optimal sample over an input stream of weighted items.
    +
    VarOptItemsUnion<T> +
    Provides a unioning operation over varopt sketches.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/package-tree.html b/docs/5.0.X/org/apache/datasketches/sampling/package-tree.html new file mode 100644 index 000000000..f8a08491b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/package-tree.html @@ -0,0 +1,173 @@ + + + + + +org.apache.datasketches.sampling Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.sampling

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/sampling/package-use.html b/docs/5.0.X/org/apache/datasketches/sampling/package-use.html new file mode 100644 index 000000000..61f1c1c35 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/sampling/package-use.html @@ -0,0 +1,237 @@ + + + + + +Uses of Package org.apache.datasketches.sampling (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.sampling

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/AnotB.html b/docs/5.0.X/org/apache/datasketches/theta/AnotB.html new file mode 100644 index 000000000..1345cfb6c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/AnotB.html @@ -0,0 +1,595 @@ + + + + + +AnotB (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AnotB

+
+
+ +
+
    +
  • +
    +
    public abstract class AnotB
    +extends SetOperation
    +
    Computes a set difference, A-AND-NOT-B, of two theta sketches. + This class includes both stateful and stateless operations. + +

    The stateful operation is as follows:

    +
    
    + AnotB anotb = SetOperationBuilder.buildAnotB();
    +
    + anotb.setA(Sketch skA); //The first argument.
    + anotb.notB(Sketch skB); //The second (subtraction) argument.
    + anotb.notB(Sketch skC); // ...any number of additional subtractions...
    + anotb.getResult(false); //Get an interim result.
    + anotb.notB(Sketch skD); //Additional subtractions.
    + anotb.getResult(true);  //Final result and resets the AnotB operator.
    + 
    + +

    The stateless operation is as follows:

    +
    
    + AnotB anotb = SetOperationBuilder.buildAnotB();
    +
    + CompactSketch csk = anotb.aNotB(Sketch skA, Sketch skB);
    + 
    + +

    Calling the setA operation a second time essentially clears the internal state and loads + the new sketch.

    + +

    The stateless and stateful operations are independent of each other with the exception of + sharing the same update hash seed loaded as the default seed or specified by the user as an + argument to the builder.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AnotB

        +
        public AnotB()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getFamily

        +
        public Family getFamily()
        +
        Description copied from class: SetOperation
        +
        Gets the Family of this SetOperation
        +
        +
        Specified by:
        +
        getFamily in class SetOperation
        +
        Returns:
        +
        the Family of this SetOperation
        +
        +
      • +
      + + + +
        +
      • +

        setA

        +
        public abstract void setA​(Sketch skA)
        +
        This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + first argument A of A-AND-NOT-B. This overwrites the internal state of this + AnotB operator with the contents of the given sketch. + This sets the stage for multiple following notB steps. + +

        An input argument of null will throw an exception.

        + +

        Rationale: In mathematics a "null set" is a set with no members, which we call an empty set. + That is distinctly different from the java null, which represents a nonexistent object. + In most cases it is a programming error due to some object that was not properly initialized. + With a null as the first argument, we cannot know what the user's intent is. + Since it is very likely that a null is a programming error, we throw a an exception.

        + +

        An empty input argument will set the internal state to empty.

        + +

        Rationale: An empty set is a mathematically legal concept. Although it makes any subsequent, + valid argument for B irrelevant, we must allow this and assume the user knows what they are + doing.

        + +

        Performing getResult(boolean) just after this step will return a compact form of + the given argument.

        +
        +
        Parameters:
        +
        skA - The incoming sketch for the first argument, A.
        +
        +
      • +
      + + + +
        +
      • +

        notB

        +
        public abstract void notB​(Sketch skB)
        +
        This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + second (or n+1th) argument B of A-AND-NOT-B. + Performs an AND NOT operation with the existing internal state of this AnotB operator. + +

        An input argument of null or empty is ignored.

        + +

        Rationale: A null for the second or following arguments is more tolerable because + A NOT null is still A even if we don't know exactly what the null represents. It + clearly does not have any content that overlaps with A. Also, because this can be part of + a multistep operation with multiple notB steps. Other following steps can still produce + a valid result.

        + +

        Use getResult(boolean) to obtain the result.

        +
        +
        Parameters:
        +
        skB - The incoming Theta sketch for the second (or following) argument B.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract CompactSketch getResult​(boolean reset)
        +
        Gets the result of the multistep, stateful operation AnotB that have been executed with calls + to setA(Sketch) and (notB(Sketch) or + notB(org.apache.datasketches.theta.Sketch)).
        +
        +
        Parameters:
        +
        reset - If true, clears this operator to the empty state after this result is + returned. Set this to false if you wish to obtain an intermediate result.
        +
        Returns:
        +
        the result of this operation as an ordered, on-heap CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract CompactSketch getResult​(boolean dstOrdered,
        +                                        org.apache.datasketches.memory.WritableMemory dstMem,
        +                                        boolean reset)
        +
        Gets the result of the multistep, stateful operation AnotB that have been executed with calls + to setA(Sketch) and (notB(Sketch) or + notB(org.apache.datasketches.theta.Sketch)).
        +
        +
        Parameters:
        +
        dstOrdered - If true, the result will be an ordered CompactSketch. + See Destination Ordered.
        +
        dstMem - if not null the given Memory will be the target location of the result. + See Destination Memory.
        +
        reset - If true, clears this operator to the empty state after this result is + returned. Set this to false if you wish to obtain an intermediate result.
        +
        Returns:
        +
        the result of this operation as a CompactSketch in the given dstMem.
        +
        +
      • +
      + + + +
        +
      • +

        aNotB

        +
        public CompactSketch aNotB​(Sketch skA,
        +                           Sketch skB)
        +
        Perform A-and-not-B set operation on the two given sketches and return the result as an + ordered CompactSketch on the heap. + +

        This a stateless operation and has no impact on the internal state of this operator. + Thus, this is not an accumulating update and does not interact with the setA(Sketch), + notB(Sketch), getResult(boolean), or + getResult(boolean, WritableMemory, boolean) methods.

        + +

        If either argument is null an exception is thrown.

        + +

        Rationale: In mathematics a "null set" is a set with no members, which we call an empty set. + That is distinctly different from the java null, which represents a nonexistent object. + In most cases null is a programming error due to a non-initialized object.

        + +

        With a null as the first argument we cannot know what the user's intent is and throw an + exception. With a null as the second argument for this method we must return a result and + there is no following possible viable arguments for the second argument so we thrown an + exception.

        +
        +
        Parameters:
        +
        skA - The incoming sketch for the first argument. It must not be null.
        +
        skB - The incoming sketch for the second argument. It must not be null.
        +
        Returns:
        +
        an ordered CompactSketch on the heap
        +
        +
      • +
      + + + +
        +
      • +

        aNotB

        +
        public abstract CompactSketch aNotB​(Sketch skA,
        +                                    Sketch skB,
        +                                    boolean dstOrdered,
        +                                    org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Perform A-and-not-B set operation on the two given sketches and return the result as a + CompactSketch. + +

        This a stateless operation and has no impact on the internal state of this operator. + Thus, this is not an accumulating update and does not interact with the setA(Sketch), + notB(Sketch), getResult(boolean), or + getResult(boolean, WritableMemory, boolean) methods.

        + +

        If either argument is null an exception is thrown.

        + +

        Rationale: In mathematics a "null set" is a set with no members, which we call an empty set. + That is distinctly different from the java null, which represents a nonexistent object. + In most cases null is a programming error due to a non-initialized object.

        + +

        With a null as the first argument we cannot know what the user's intent is and throw an + exception. With a null as the second argument for this method we must return a result and + there is no following possible viable arguments for the second argument so we thrown an + exception.

        +
        +
        Parameters:
        +
        skA - The incoming sketch for the first argument. It must not be null.
        +
        skB - The incoming sketch for the second argument. It must not be null.
        +
        dstOrdered - See Destination Ordered.
        +
        dstMem - See Destination Memory.
        +
        Returns:
        +
        the result as a CompactSketch.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/BitPacking.html b/docs/5.0.X/org/apache/datasketches/theta/BitPacking.html new file mode 100644 index 000000000..43e86be52 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/BitPacking.html @@ -0,0 +1,339 @@ + + + + + +BitPacking (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BitPacking

+
+
+ +
+
    +
  • +
    +
    public class BitPacking
    +extends Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BitPacking

        +
        public BitPacking()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        packBits

        +
        public static void packBits​(long value,
        +                            int bits,
        +                            byte[] buffer,
        +                            int bufOffset,
        +                            int bitOffset)
        +
      • +
      + + + +
        +
      • +

        unpackBits

        +
        public static void unpackBits​(long[] value,
        +                              int index,
        +                              int bits,
        +                              byte[] buffer,
        +                              int bufOffset,
        +                              int bitOffset)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/CompactSketch.html b/docs/5.0.X/org/apache/datasketches/theta/CompactSketch.html new file mode 100644 index 000000000..a4df34ea9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/CompactSketch.html @@ -0,0 +1,606 @@ + + + + + +CompactSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CompactSketch

+
+
+ +
+
    +
  • +
    +
    public abstract class CompactSketch
    +extends Sketch
    +
    The parent class of all the CompactSketches. CompactSketches are never created directly. + They are created as a result of the compact() method of an UpdateSketch, a result of a + getResult() of a SetOperation, or from a heapify method. + +

    A CompactSketch is the simplest form of a Theta Sketch. It consists of a compact list + (i.e., no intervening spaces) of hash values, which may be ordered or not, a value for theta + and a seed hash. A CompactSketch is immutable (read-only), + and the space required when stored is only the space required for the hash values and 8 to 24 + bytes of preamble. An empty CompactSketch consumes only 8 bytes.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CompactSketch

        +
        public CompactSketch()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static CompactSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Heapify takes a CompactSketch image in Memory and instantiates an on-heap CompactSketch. + +

        The resulting sketch will not retain any link to the source Memory and all of its data will be + copied to the heap CompactSketch.

        + +

        This method assumes that the sketch image was created with the correct hash seed, so it is not checked. + The resulting on-heap CompactSketch will be given the seedHash derived from the given sketch image. + However, Serial Version 1 sketch images do not have a seedHash field, + so the resulting heapified CompactSketch will be given the hash of the DEFAULT_UPDATE_SEED.

        +
        +
        Parameters:
        +
        srcMem - an image of a CompactSketch. + See Memory.
        +
        Returns:
        +
        a CompactSketch on the heap.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static CompactSketch heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                    long expectedSeed)
        +
        Heapify takes a CompactSketch image in Memory and instantiates an on-heap CompactSketch. + +

        The resulting sketch will not retain any link to the source Memory and all of its data will be + copied to the heap CompactSketch.

        + +

        This method checks if the given expectedSeed was used to create the source Memory image. + However, SerialVersion 1 sketch images cannot be checked as they don't have a seedHash field, + so the resulting heapified CompactSketch will be given the hash of the expectedSeed.

        +
        +
        Parameters:
        +
        srcMem - an image of a CompactSketch that was created using the given expectedSeed. + See Memory.
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed.
        +
        Returns:
        +
        a CompactSketch on the heap.
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static CompactSketch wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap takes the CompactSketch image in given Memory and refers to it directly. + There is no data copying onto the java heap. + The wrap operation enables fast read-only merging and access to all the public read-only API. + +

        Only "Direct" Serialization Version 3 (i.e, OpenSource) sketches that have + been explicitly stored as direct sketches can be wrapped. + Wrapping earlier serial version sketches will result in a heapify operation. + These early versions were never designed to "wrap".

        + +

        Wrapping any subclass of this class that is empty or contains only a single item will + result in heapified forms of empty and single item sketch respectively. + This is actually faster and consumes less overall memory.

        + +

        This method assumes that the sketch image was created with the correct hash seed, so it is not checked. + However, Serial Version 1 sketch images do not have a seedHash field, + so the resulting on-heap CompactSketch will be given the hash of the DEFAULT_UPDATE_SEED.

        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch. + See Memory.
        +
        Returns:
        +
        a CompactSketch backed by the given Memory except as above.
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static CompactSketch wrap​(org.apache.datasketches.memory.Memory srcMem,
        +                                 long expectedSeed)
        +
        Wrap takes the sketch image in the given Memory and refers to it directly. + There is no data copying onto the java heap. + The wrap operation enables fast read-only merging and access to all the public read-only API. + +

        Only "Direct" Serialization Version 3 (i.e, OpenSource) sketches that have + been explicitly stored as direct sketches can be wrapped. + Wrapping earlier serial version sketches will result in a heapify operation. + These early versions were never designed to "wrap".

        + +

        Wrapping any subclass of this class that is empty or contains only a single item will + result in heapified forms of empty and single item sketch respectively. + This is actually faster and consumes less overall memory.

        + +

        This method checks if the given expectedSeed was used to create the source Memory image. + However, SerialVersion 1 sketches cannot be checked as they don't have a seedHash field, + so the resulting heapified CompactSketch will be given the hash of the expectedSeed.

        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch that was created using the given expectedSeed. + See Memory
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed.
        +
        Returns:
        +
        a CompactSketch backed by the given Memory except as above.
        +
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public abstract CompactSketch compact​(boolean dstOrdered,
        +                                      org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Description copied from class: Sketch
        +
        Convert this sketch to a CompactSketch. + +

        If this sketch is a type of UpdateSketch, the compacting process converts the hash table + of the UpdateSketch to a simple list of the valid hash values. + Any hash values of zero or equal-to or greater than theta will be discarded. + The number of valid values remaining in the CompactSketch depends on a number of factors, + but may be larger or smaller than Nominal Entries (or k). + It will never exceed 2k. + If it is critical to always limit the size to no more than k, + then rebuild() should be called on the UpdateSketch prior to calling this method.

        + +

        A CompactSketch is always immutable.

        + +

        A new CompactSketch object is created:

        +
        • if dstMem != null
        • +
        • if dstMem == null and this.hasMemory() == true
        • +
        • if dstMem == null and this has more than 1 item and this.isOrdered() == false + and dstOrdered == true.
        • +
        + +

        Otherwise, this operation returns this.

        +
        +
        Specified by:
        +
        compact in class Sketch
        +
        Parameters:
        +
        dstOrdered - assumed true if this sketch is empty or has only one value + See Destination Ordered
        +
        dstMem - See Destination Memory.
        +
        Returns:
        +
        this sketch as a CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getCompactBytes

        +
        public int getCompactBytes()
        +
        Description copied from class: Sketch
        +
        Returns the number of storage bytes required for this Sketch if its current state were + compacted. It this sketch is already in the compact form this is equivalent to + calling Sketch.getCurrentBytes().
        +
        +
        Specified by:
        +
        getCompactBytes in class Sketch
        +
        Returns:
        +
        number of compact bytes
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public Family getFamily()
        +
        Description copied from class: Sketch
        +
        Returns the Family that this sketch belongs to
        +
        +
        Specified by:
        +
        getFamily in class Sketch
        +
        Returns:
        +
        the Family that this sketch belongs to
        +
        +
      • +
      + + + +
        +
      • +

        isCompact

        +
        public boolean isCompact()
        +
        Description copied from class: Sketch
        +
        Returns true if this sketch is in compact form.
        +
        +
        Specified by:
        +
        isCompact in class Sketch
        +
        Returns:
        +
        true if this sketch is in compact form.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArrayCompressed

        +
        public byte[] toByteArrayCompressed()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/HashIterator.html b/docs/5.0.X/org/apache/datasketches/theta/HashIterator.html new file mode 100644 index 000000000..c8f23a37c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/HashIterator.html @@ -0,0 +1,285 @@ + + + + + +HashIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface HashIterator

+
+
+
+
    +
  • +
    +
    public interface HashIterator
    +
    This is used to iterate over the retained hash values of the Theta sketch.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      longget() +
      Gets the hash value
      +
      booleannext() +
      Returns true at the next hash value in sequence.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        get

        +
        long get()
        +
        Gets the hash value
        +
        +
        Returns:
        +
        the hash value
        +
        +
      • +
      + + + +
        +
      • +

        next

        +
        boolean next()
        +
        Returns true at the next hash value in sequence. + If false, the iteration is done.
        +
        +
        Returns:
        +
        true at the next hash value in sequence.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/Intersection.html b/docs/5.0.X/org/apache/datasketches/theta/Intersection.html new file mode 100644 index 000000000..b90387858 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/Intersection.html @@ -0,0 +1,595 @@ + + + + + +Intersection (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Intersection

+
+
+ +
+
    +
  • +
    +
    public abstract class Intersection
    +extends SetOperation
    +
    The API for intersection operations
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Intersection

        +
        public Intersection()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getFamily

        +
        public Family getFamily()
        +
        Description copied from class: SetOperation
        +
        Gets the Family of this SetOperation
        +
        +
        Specified by:
        +
        getFamily in class SetOperation
        +
        Returns:
        +
        the Family of this SetOperation
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public CompactSketch getResult()
        +
        Gets the result of this operation as an ordered CompactSketch on the Java heap. + This does not disturb the underlying data structure of this intersection. + The intersect(Sketch) method must have been called at least once, otherwise an + exception will be thrown. This is because a virgin Intersection object represents the + Universal Set, which has an infinite number of values.
        +
        +
        Returns:
        +
        the result of this operation as an ordered CompactSketch on the Java heap
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract CompactSketch getResult​(boolean dstOrdered,
        +                                        org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Gets the result of this operation as a CompactSketch in the given dstMem. + This does not disturb the underlying data structure of this intersection. + The intersect(Sketch) method must have been called at least once, otherwise an + exception will be thrown. This is because a virgin Intersection object represents the + Universal Set, which has an infinite number of values. + +

        Note that presenting an intersection with an empty sketch sets the internal + state of the intersection to empty = true, and current count = 0. This is consistent with + the mathematical definition of the intersection of any set with the empty set is + always empty.

        + +

        Presenting an intersection with a null argument will throw an exception.

        +
        +
        Parameters:
        +
        dstOrdered - See Destination Ordered
        +
        dstMem - See Destination Memory.
        +
        Returns:
        +
        the result of this operation as a CompactSketch stored in the given dstMem, + which can be either on or off-heap..
        +
        +
      • +
      + + + +
        +
      • +

        hasResult

        +
        public abstract boolean hasResult()
        +
        Returns true if there is a valid intersection result available
        +
        +
        Returns:
        +
        true if there is a valid intersection result available
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public abstract void reset()
        +
        Resets this Intersection for stateful operations only. + The seed remains intact, otherwise reverts to + the Universal Set: theta = 1.0, no retained data and empty = false.
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public abstract byte[] toByteArray()
        +
        Serialize this intersection to a byte array form.
        +
        +
        Returns:
        +
        byte array of this intersection
        +
        +
      • +
      + + + +
        +
      • +

        intersect

        +
        public abstract void intersect​(Sketch sketchIn)
        +
        Intersect the given sketch with the internal state. + This method can be repeatedly called. + If the given sketch is null the internal state becomes the empty sketch. + Theta will become the minimum of thetas seen so far.
        +
        +
        Parameters:
        +
        sketchIn - the given sketch
        +
        +
      • +
      + + + +
        +
      • +

        intersect

        +
        public CompactSketch intersect​(Sketch a,
        +                               Sketch b)
        +
        Perform intersect set operation on the two given sketch arguments and return the result as an + ordered CompactSketch on the heap.
        +
        +
        Parameters:
        +
        a - The first sketch argument
        +
        b - The second sketch argument
        +
        Returns:
        +
        an ordered CompactSketch on the heap
        +
        +
      • +
      + + + +
        +
      • +

        intersect

        +
        public abstract CompactSketch intersect​(Sketch a,
        +                                        Sketch b,
        +                                        boolean dstOrdered,
        +                                        org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Perform intersect set operation on the two given sketches and return the result as a + CompactSketch.
        +
        +
        Parameters:
        +
        a - The first sketch argument
        +
        b - The second sketch argument
        +
        dstOrdered - See Destination Ordered.
        +
        dstMem - See Destination Memory.
        +
        Returns:
        +
        the result as a CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxLgArrLongs

        +
        protected static int getMaxLgArrLongs​(org.apache.datasketches.memory.Memory dstMem)
        +
        Returns the maximum lgArrLongs given the capacity of the Memory.
        +
        +
        Parameters:
        +
        dstMem - the given Memory
        +
        Returns:
        +
        the maximum lgArrLongs given the capacity of the Memory
        +
        +
      • +
      + + + +
        +
      • +

        checkMinSizeMemory

        +
        protected static void checkMinSizeMemory​(org.apache.datasketches.memory.Memory mem)
        +
      • +
      + + + +
        +
      • +

        memChecks

        +
        protected static void memChecks​(org.apache.datasketches.memory.Memory srcMem)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/JaccardSimilarity.html b/docs/5.0.X/org/apache/datasketches/theta/JaccardSimilarity.html new file mode 100644 index 000000000..470ad56ac --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/JaccardSimilarity.html @@ -0,0 +1,429 @@ + + + + + +JaccardSimilarity (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class JaccardSimilarity

+
+
+ +
+
    +
  • +
    +
    public final class JaccardSimilarity
    +extends Object
    +
    Jaccard similarity of two Theta Sketches.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JaccardSimilarity

        +
        public JaccardSimilarity()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        jaccard

        +
        public static double[] jaccard​(Sketch sketchA,
        +                               Sketch sketchB)
        +
        Computes the Jaccard similarity index with upper and lower bounds. The Jaccard similarity index + J(A,B) = (A ^ B)/(A U B) is used to measure how similar the two sketches are to each + other. If J = 1.0, the sketches are considered equal. If J = 0, the two sketches are + distinct from each other. A Jaccard of .95 means the overlap between the two + populations is 95% of the union of the two populations. + +

        Note: For very large pairs of sketches, where the configured nominal entries of the sketches + are 2^25 or 2^26, this method may produce unpredictable results.

        +
        +
        Parameters:
        +
        sketchA - given sketch A
        +
        sketchB - given sketch B
        +
        Returns:
        +
        a double array {LowerBound, Estimate, UpperBound} of the Jaccard index. + The Upper and Lower bounds are for a confidence interval of 95.4% or +/- 2 standard deviations.
        +
        +
      • +
      + + + +
        +
      • +

        exactlyEqual

        +
        public static boolean exactlyEqual​(Sketch sketchA,
        +                                   Sketch sketchB)
        +
        Returns true if the two given sketches have exactly the same hash values and the same + theta values. Thus, they are equivalent.
        +
        +
        Parameters:
        +
        sketchA - the given sketch A
        +
        sketchB - the given sketch B
        +
        Returns:
        +
        true if the two given sketches have exactly the same hash values and the same + theta values.
        +
        +
      • +
      + + + +
        +
      • +

        similarityTest

        +
        public static boolean similarityTest​(Sketch measured,
        +                                     Sketch expected,
        +                                     double threshold)
        +
        Tests similarity of a measured Sketch against an expected Sketch. + Computes the lower bound of the Jaccard index JLB of the measured and + expected sketches. + if JLB ≥ threshold, then the sketches are considered to be + similar with a confidence of 97.7%.
        +
        +
        Parameters:
        +
        measured - the sketch to be tested
        +
        expected - the reference sketch that is considered to be correct.
        +
        threshold - a real value between zero and one.
        +
        Returns:
        +
        if true, the similarity of the two sketches is greater than the given threshold + with at least 97.7% confidence.
        +
        +
      • +
      + + + +
        +
      • +

        dissimilarityTest

        +
        public static boolean dissimilarityTest​(Sketch measured,
        +                                        Sketch expected,
        +                                        double threshold)
        +
        Tests dissimilarity of a measured Sketch against an expected Sketch. + Computes the upper bound of the Jaccard index JUB of the measured and + expected sketches. + if JUB ≤ threshold, then the sketches are considered to be + dissimilar with a confidence of 97.7%.
        +
        +
        Parameters:
        +
        measured - the sketch to be tested
        +
        expected - the reference sketch that is considered to be correct.
        +
        threshold - a real value between zero and one.
        +
        Returns:
        +
        if true, the dissimilarity of the two sketches is greater than the given threshold + with at least 97.7% confidence.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/SetOperation.html b/docs/5.0.X/org/apache/datasketches/theta/SetOperation.html new file mode 100644 index 000000000..dbd47ec7e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/SetOperation.html @@ -0,0 +1,599 @@ + + + + + +SetOperation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SetOperation

+
+
+ +
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    AnotB, Intersection, Union
    +
    +
    +
    public abstract class SetOperation
    +extends Object
    +
    The parent API for all Set Operations
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static SetOperationBuilderbuilder() +
      Makes a new builder
      +
      abstract FamilygetFamily() +
      Gets the Family of this SetOperation
      +
      static intgetMaxAnotBResultBytes​(int nomEntries) +
      Returns the maximum number of bytes for the returned CompactSketch, given the + value of nomEntries of the first sketch A of AnotB.
      +
      static intgetMaxIntersectionBytes​(int nomEntries) +
      Returns the maximum required storage bytes given a nomEntries parameter for Intersection + operations
      +
      static intgetMaxUnionBytes​(int nomEntries) +
      Returns the maximum required storage bytes given a nomEntries parameter for Union operations
      +
      static SetOperationheapify​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify takes the SetOperations image in Memory and instantiates an on-heap + SetOperation using the + Default Update Seed.
      +
      static SetOperationheapify​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) +
      Heapify takes the SetOperation image in Memory and instantiates an on-heap + SetOperation using the given expectedSeed.
      +
      abstract booleanisSameResource​(org.apache.datasketches.memory.Memory that) +
      Returns true if the backing resource of this is identical with the backing resource + of that.
      +
      static SetOperationwrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap takes the SetOperation image in Memory and refers to it directly.
      +
      static SetOperationwrap​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) +
      Wrap takes the SetOperation image in Memory and refers to it directly.
      +
      static SetOperationwrap​(org.apache.datasketches.memory.WritableMemory srcMem) +
      Wrap takes the SetOperation image in Memory and refers to it directly.
      +
      static SetOperationwrap​(org.apache.datasketches.memory.WritableMemory srcMem, + long expectedSeed) +
      Wrap takes the SetOperation image in Memory and refers to it directly.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        builder

        +
        public static final SetOperationBuilder builder()
        +
        Makes a new builder
        +
        +
        Returns:
        +
        a new builder
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static SetOperation heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Heapify takes the SetOperations image in Memory and instantiates an on-heap + SetOperation using the + Default Update Seed. + The resulting SetOperation will not retain any link to the source Memory. + +

        Note: Only certain set operators during stateful operations can be serialized and thus + heapified.

        +
        +
        Parameters:
        +
        srcMem - an image of a SetOperation where the image seed hash matches the default seed hash. + See Memory
        +
        Returns:
        +
        a Heap-based SetOperation from the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static SetOperation heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                   long expectedSeed)
        +
        Heapify takes the SetOperation image in Memory and instantiates an on-heap + SetOperation using the given expectedSeed. + The resulting SetOperation will not retain any link to the source Memory. + +

        Note: Only certain set operators during stateful operations can be serialized and thus + heapified.

        +
        +
        Parameters:
        +
        srcMem - an image of a SetOperation where the hash of the given expectedSeed matches the image seed hash. + See Memory
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed.
        +
        Returns:
        +
        a Heap-based SetOperation from the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static SetOperation wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap takes the SetOperation image in Memory and refers to it directly. + There is no data copying onto the java heap. + This method assumes the + Default Update Seed. + +

        Note: Only certain set operators during stateful operations can be serialized and thus + wrapped.

        +
        +
        Parameters:
        +
        srcMem - an image of a SetOperation where the image seed hash matches the default seed hash. + See Memory
        +
        Returns:
        +
        a SetOperation backed by the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static SetOperation wrap​(org.apache.datasketches.memory.Memory srcMem,
        +                                long expectedSeed)
        +
        Wrap takes the SetOperation image in Memory and refers to it directly. + There is no data copying onto the java heap. + +

        Note: Only certain set operators during stateful operations can be serialized and thus + wrapped.

        +
        +
        Parameters:
        +
        srcMem - an image of a SetOperation where the hash of the given expectedSeed matches the image seed hash. + See Memory
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed.
        +
        Returns:
        +
        a SetOperation backed by the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static SetOperation wrap​(org.apache.datasketches.memory.WritableMemory srcMem)
        +
        Wrap takes the SetOperation image in Memory and refers to it directly. + There is no data copying onto the java heap. + This method assumes the + Default Update Seed. + +

        Note: Only certain set operators during stateful operations can be serialized and thus + wrapped.

        +
        +
        Parameters:
        +
        srcMem - an image of a SetOperation where the image seed hash matches the default seed hash. + See Memory
        +
        Returns:
        +
        a SetOperation backed by the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static SetOperation wrap​(org.apache.datasketches.memory.WritableMemory srcMem,
        +                                long expectedSeed)
        +
        Wrap takes the SetOperation image in Memory and refers to it directly. + There is no data copying onto the java heap. + +

        Note: Only certain set operators during stateful operations can be serialized and thus + wrapped.

        +
        +
        Parameters:
        +
        srcMem - an image of a SetOperation where the hash of the given expectedSeed matches the image seed hash. + See Memory
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed.
        +
        Returns:
        +
        a SetOperation backed by the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        getMaxUnionBytes

        +
        public static int getMaxUnionBytes​(int nomEntries)
        +
        Returns the maximum required storage bytes given a nomEntries parameter for Union operations
        +
        +
        Parameters:
        +
        nomEntries - Nominal Entries + This will become the ceiling power of 2 if it is not.
        +
        Returns:
        +
        the maximum required storage bytes given a nomEntries parameter
        +
        +
      • +
      + + + +
        +
      • +

        getMaxIntersectionBytes

        +
        public static int getMaxIntersectionBytes​(int nomEntries)
        +
        Returns the maximum required storage bytes given a nomEntries parameter for Intersection + operations
        +
        +
        Parameters:
        +
        nomEntries - Nominal Entries + This will become the ceiling power of 2 if it is not.
        +
        Returns:
        +
        the maximum required storage bytes given a nomEntries parameter
        +
        +
      • +
      + + + +
        +
      • +

        getMaxAnotBResultBytes

        +
        public static int getMaxAnotBResultBytes​(int nomEntries)
        +
        Returns the maximum number of bytes for the returned CompactSketch, given the + value of nomEntries of the first sketch A of AnotB.
        +
        +
        Parameters:
        +
        nomEntries - this value must be a power of 2.
        +
        Returns:
        +
        the maximum number of bytes.
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public abstract Family getFamily()
        +
        Gets the Family of this SetOperation
        +
        +
        Returns:
        +
        the Family of this SetOperation
        +
        +
      • +
      + + + +
        +
      • +

        isSameResource

        +
        public abstract boolean isSameResource​(org.apache.datasketches.memory.Memory that)
        +
        Returns true if the backing resource of this is identical with the backing resource + of that. The capacities must be the same. If this is a region, + the region offset must also be the same. + +

        Note: Only certain set operators during stateful operations can be serialized. + Only when they are stored into Memory will this be relevant.

        +
        +
        Parameters:
        +
        that - A different non-null object
        +
        Returns:
        +
        true if the backing resource of this is the same as the backing resource + of that.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/SetOperationBuilder.html b/docs/5.0.X/org/apache/datasketches/theta/SetOperationBuilder.html new file mode 100644 index 000000000..8a956a0b0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/SetOperationBuilder.html @@ -0,0 +1,752 @@ + + + + + +SetOperationBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SetOperationBuilder

+
+
+ +
+
    +
  • +
    +
    public class SetOperationBuilder
    +extends Object
    +
    For building a new SetOperation.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SetOperationBuilder

        +
        public SetOperationBuilder()
        +
        Constructor for building a new SetOperation. The default configuration is +
          +
        • Max Nominal Entries (max K): + 4096
        • +
        • Seed: 9001L
        • +
        • ResizeFactor.X8
        • +
        • Input Sampling Probability: 1.0
        • +
        • Memory: null
        • +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setNominalEntries

        +
        public SetOperationBuilder setNominalEntries​(int nomEntries)
        +
        Sets the Maximum Nominal Entries (max K) for this set operation. The effective value of K of the result of a + Set Operation can be less than max K, but never greater. + The minimum value is 16 and the maximum value is 67,108,864, which is 2^26.
        +
        +
        Parameters:
        +
        nomEntries - Nominal Entres + This will become the ceiling power of 2 if it is not a power of 2.
        +
        Returns:
        +
        this SetOperationBuilder
        +
        +
      • +
      + + + +
        +
      • +

        setLogNominalEntries

        +
        public SetOperationBuilder setLogNominalEntries​(int lgNomEntries)
        +
        Alternative method of setting the Nominal Entries for this set operation from the log_base2 value. + The minimum value is 4 and the maximum value is 26. + Be aware that set operations as large as this maximum value may not have been + thoroughly characterized for performance.
        +
        +
        Parameters:
        +
        lgNomEntries - the log_base2 Nominal Entries.
        +
        Returns:
        +
        this SetOperationBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getLgNominalEntries

        +
        public int getLgNominalEntries()
        +
        Returns Log-base 2 Nominal Entries
        +
        +
        Returns:
        +
        Log-base 2 Nominal Entries
        +
        +
      • +
      + + + +
        +
      • +

        setSeed

        +
        public SetOperationBuilder setSeed​(long seed)
        +
        Sets the long seed value that is require by the hashing function.
        +
        +
        Parameters:
        +
        seed - See seed
        +
        Returns:
        +
        this SetOperationBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getSeed

        +
        public long getSeed()
        +
        Returns the seed
        +
        +
        Returns:
        +
        the seed
        +
        +
      • +
      + + + +
        +
      • +

        setP

        +
        public SetOperationBuilder setP​(float p)
        +
        Sets the upfront uniform sampling probability, p. Although this functionality is + implemented for Unions only, it rarely makes sense to use it. The proper use of upfront + sampling is when building the sketches.
        +
        +
        Parameters:
        +
        p - See Sampling Probability, p
        +
        Returns:
        +
        this SetOperationBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getP

        +
        public float getP()
        +
        Returns the pre-sampling probability p
        +
        +
        Returns:
        +
        the pre-sampling probability p
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getResizeFactor

        +
        public ResizeFactor getResizeFactor()
        +
        Returns the Resize Factor
        +
        +
        Returns:
        +
        the Resize Factor
        +
        +
      • +
      + + + +
        +
      • +

        setMemoryRequestServer

        +
        public SetOperationBuilder setMemoryRequestServer​(org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Set the MemoryRequestServer
        +
        +
        Parameters:
        +
        memReqSvr - the given MemoryRequestServer
        +
        Returns:
        +
        this SetOperationBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getMemoryRequestServer

        +
        public org.apache.datasketches.memory.MemoryRequestServer getMemoryRequestServer()
        +
        Returns the MemoryRequestServer
        +
        +
        Returns:
        +
        the MemoryRequestServer
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public SetOperation build​(Family family)
        +
        Returns a SetOperation with the current configuration of this Builder and the given Family.
        +
        +
        Parameters:
        +
        family - the chosen SetOperation family
        +
        Returns:
        +
        a SetOperation
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public SetOperation build​(Family family,
        +                          org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns a SetOperation with the current configuration of this Builder, the given Family + and the given destination memory. Note that the destination memory cannot be used with AnotB.
        +
        +
        Parameters:
        +
        family - the chosen SetOperation family
        +
        dstMem - The destination Memory.
        +
        Returns:
        +
        a SetOperation
        +
        +
      • +
      + + + +
        +
      • +

        buildUnion

        +
        public Union buildUnion()
        +
        Convenience method, returns a configured SetOperation Union with + Default Nominal Entries
        +
        +
        Returns:
        +
        a Union object
        +
        +
      • +
      + + + +
        +
      • +

        buildUnion

        +
        public Union buildUnion​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Convenience method, returns a configured SetOperation Union with + Default Nominal Entries + and the given destination memory.
        +
        +
        Parameters:
        +
        dstMem - The destination Memory.
        +
        Returns:
        +
        a Union object
        +
        +
      • +
      + + + +
        +
      • +

        buildIntersection

        +
        public Intersection buildIntersection()
        +
        Convenience method, returns a configured SetOperation Intersection with + Default Nominal Entries
        +
        +
        Returns:
        +
        an Intersection object
        +
        +
      • +
      + + + +
        +
      • +

        buildIntersection

        +
        public Intersection buildIntersection​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Convenience method, returns a configured SetOperation Intersection with + Default Nominal Entries + and the given destination memory.
        +
        +
        Parameters:
        +
        dstMem - The destination Memory.
        +
        Returns:
        +
        an Intersection object
        +
        +
      • +
      + + + +
        +
      • +

        buildANotB

        +
        public AnotB buildANotB()
        +
        Convenience method, returns a configured SetOperation ANotB with + Default Update Seed
        +
        +
        Returns:
        +
        an ANotB object
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/Sketch.html b/docs/5.0.X/org/apache/datasketches/theta/Sketch.html new file mode 100644 index 000000000..4df6f2859 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/Sketch.html @@ -0,0 +1,1121 @@ + + + + + +Sketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Sketch

+
+
+ +
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    CompactSketch, UpdateSketch
    +
    +
    +
    public abstract class Sketch
    +extends Object
    +
    The top-level class for all theta sketches. This class is never constructed directly. + Use the UpdateSketch.builder() methods to create UpdateSketches.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethodDescription
      CompactSketchcompact() +
      Converts this sketch to a ordered CompactSketch.
      +
      abstract CompactSketchcompact​(boolean dstOrdered, + org.apache.datasketches.memory.WritableMemory dstMem) +
      Convert this sketch to a CompactSketch.
      +
      abstract intgetCompactBytes() +
      Returns the number of storage bytes required for this Sketch if its current state were + compacted.
      +
      intgetCountLessThanThetaLong​(long thetaLong) +
      Gets the number of hash values less than the given theta expressed as a long.
      +
      abstract intgetCurrentBytes() +
      Returns the number of storage bytes required for this sketch in its current state.
      +
      abstract doublegetEstimate() +
      Gets the unique count estimate.
      +
      abstract FamilygetFamily() +
      Returns the Family that this sketch belongs to
      +
      doublegetLowerBound​(int numStdDev) +
      Gets the approximate lower error bound given the specified number of Standard Deviations.
      +
      static intgetMaxCompactSketchBytes​(int numberOfEntries) +
      Returns the maximum number of storage bytes required for a CompactSketch with the given + number of actual entries.
      +
      static intgetMaxUpdateSketchBytes​(int nomEntries) +
      Returns the maximum number of storage bytes required for an UpdateSketch with the given + number of nominal entries (power of 2).
      +
      intgetRetainedEntries() +
      Returns the number of valid entries that have been retained by the sketch.
      +
      abstract intgetRetainedEntries​(boolean valid) +
      Returns the number of entries that have been retained by the sketch.
      +
      static intgetSerializationVersion​(org.apache.datasketches.memory.Memory mem) +
      Returns the serialization version from the given Memory
      +
      doublegetTheta() +
      Gets the value of theta as a double with a value between zero and one
      +
      abstract longgetThetaLong() +
      Gets the value of theta as a long
      +
      doublegetUpperBound​(int numStdDev) +
      Gets the approximate upper error bound given the specified number of Standard Deviations.
      +
      abstract booleanhasMemory() +
      Returns true if this sketch's data structure is backed by Memory or WritableMemory.
      +
      static Sketchheapify​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
      +
      static Sketchheapify​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) +
      Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
      +
      abstract booleanisCompact() +
      Returns true if this sketch is in compact form.
      +
      abstract booleanisDirect() +
      Returns true if the this sketch's internal data structure is backed by direct (off-heap) + Memory.
      +
      abstract booleanisEmpty() + +
      booleanisEstimationMode() +
      Returns true if the sketch is Estimation Mode (as opposed to Exact Mode).
      +
      abstract booleanisOrdered() +
      Returns true if internal cache is ordered
      +
      booleanisSameResource​(org.apache.datasketches.memory.Memory that) +
      Returns true if the backing resource of this is identical with the backing resource + of that.
      +
      abstract HashIteratoriterator() +
      Returns a HashIterator that can be used to iterate over the retained hash values of the + Theta sketch.
      +
      abstract byte[]toByteArray() +
      Serialize this sketch to a byte array form.
      +
      StringtoString() +
      Returns a human readable summary of the sketch.
      +
      StringtoString​(boolean sketchSummary, + boolean dataDetail, + int width, + boolean hexMode) +
      Gets a human readable listing of contents and summary of the given sketch.
      +
      static StringtoString​(byte[] byteArr) +
      Returns a human readable string of the preamble of a byte array image of a Theta Sketch.
      +
      static StringtoString​(org.apache.datasketches.memory.Memory mem) +
      Returns a human readable string of the preamble of a Memory image of a Theta Sketch.
      +
      static Sketchwrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap takes the sketch image in the given Memory and refers to it directly.
      +
      static Sketchwrap​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) +
      Wrap takes the sketch image in the given Memory and refers to it directly.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static Sketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        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.

        + +

        For Update Sketches this method checks if the + Default Update Seed

        + was used to create the source Memory image. + +

        For Compact Sketches this method assumes that the sketch image was created with the + correct hash seed, so it is not checked.

        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch. + See Memory.
        +
        Returns:
        +
        a Sketch on the heap.
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static Sketch heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                             long expectedSeed)
        +
        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.

        + +

        For Update and Compact Sketches this method checks if the given expectedSeed was used to + create the source Memory image. However, SerialVersion 1 sketches cannot be checked.

        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch that was created using the given expectedSeed. + See Memory.
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed. + Compact sketches store a 16-bit hash of the seed, but not the seed itself.
        +
        Returns:
        +
        a Sketch on the heap.
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static Sketch wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap takes the sketch image in the given Memory and refers to it directly. + There is no data copying onto the java heap. + The wrap operation enables fast read-only merging and access to all the public read-only API. + +

        Only "Direct" Serialization Version 3 (i.e, OpenSource) sketches that have + been explicitly stored as direct sketches can be wrapped. + Wrapping earlier serial version sketches will result in a on-heap CompactSketch + where all data will be copied to the heap. These early versions were never designed to + "wrap".

        + +

        Wrapping any subclass of this class that is empty or contains only a single item will + result in on-heap equivalent forms of empty and single item sketch respectively. + This is actually faster and consumes less overall memory.

        + +

        For Update Sketches this method checks if the + Default Update Seed

        + was used to create the source Memory image. + +

        For Compact Sketches this method assumes that the sketch image was created with the + correct hash seed, so it is not checked.

        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch. + See Memory.
        +
        Returns:
        +
        a Sketch backed by the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static Sketch wrap​(org.apache.datasketches.memory.Memory srcMem,
        +                          long expectedSeed)
        +
        Wrap takes the sketch image in the given Memory and refers to it directly. + There is no data copying onto the java heap. + The wrap operation enables fast read-only merging and access to all the public read-only API. + +

        Only "Direct" Serialization Version 3 (i.e, OpenSource) sketches that have + been explicitly stored as direct sketches can be wrapped. + Wrapping earlier serial version sketches will result in a on-heap CompactSketch + where all data will be copied to the heap. These early versions were never designed to + "wrap".

        + +

        Wrapping any subclass of this class that is empty or contains only a single item will + result in on-heap equivalent forms of empty and single item sketch respectively. + This is actually faster and consumes less overall memory.

        + +

        For Update and Compact Sketches this method checks if the given expectedSeed was used to + create the source Memory image. However, SerialVersion 1 sketches cannot be checked.

        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch. + See Memory
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed.
        +
        Returns:
        +
        a UpdateSketch backed by the given Memory except as above.
        +
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactSketch compact()
        +
        Converts this sketch to a ordered CompactSketch. + +

        If this.isCompact() == true this method returns this, + otherwise, this method is equivalent to + compact(true, null). + +

        A CompactSketch is always immutable.

        +
        +
        Returns:
        +
        this sketch as an ordered CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public abstract CompactSketch compact​(boolean dstOrdered,
        +                                      org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Convert this sketch to a CompactSketch. + +

        If this sketch is a type of UpdateSketch, the compacting process converts the hash table + of the UpdateSketch to a simple list of the valid hash values. + Any hash values of zero or equal-to or greater than theta will be discarded. + The number of valid values remaining in the CompactSketch depends on a number of factors, + but may be larger or smaller than Nominal Entries (or k). + It will never exceed 2k. + If it is critical to always limit the size to no more than k, + then rebuild() should be called on the UpdateSketch prior to calling this method.

        + +

        A CompactSketch is always immutable.

        + +

        A new CompactSketch object is created:

        +
        • if dstMem != null
        • +
        • if dstMem == null and this.hasMemory() == true
        • +
        • if dstMem == null and this has more than 1 item and this.isOrdered() == false + and dstOrdered == true.
        • +
        + +

        Otherwise, this operation returns this.

        +
        +
        Parameters:
        +
        dstOrdered - assumed true if this sketch is empty or has only one value + See Destination Ordered
        +
        dstMem - See Destination Memory.
        +
        Returns:
        +
        this sketch as a CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getCompactBytes

        +
        public abstract int getCompactBytes()
        +
        Returns the number of storage bytes required for this Sketch if its current state were + compacted. It this sketch is already in the compact form this is equivalent to + calling getCurrentBytes().
        +
        +
        Returns:
        +
        number of compact bytes
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public int getCountLessThanThetaLong​(long thetaLong)
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentBytes

        +
        public abstract int getCurrentBytes()
        +
        Returns the number of storage bytes required for this sketch in its current state.
        +
        +
        Returns:
        +
        the number of storage bytes required for this sketch
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public abstract double getEstimate()
        +
        Gets the unique count estimate.
        +
        +
        Returns:
        +
        the sketch's best estimate of the cardinality of the input stream.
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public abstract Family getFamily()
        +
        Returns the Family that this sketch belongs to
        +
        +
        Returns:
        +
        the Family that this sketch belongs to
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int numStdDev)
        +
        Gets the approximate lower error bound given the specified number of Standard Deviations. + This will return getEstimate() if isEmpty() is true.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        Returns:
        +
        the lower bound.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxCompactSketchBytes

        +
        public static int getMaxCompactSketchBytes​(int numberOfEntries)
        +
        Returns the maximum number of storage bytes required for a CompactSketch with the given + number of actual entries. Note that this assumes the worse case of the sketch in + estimation mode, which requires storing theta and count.
        +
        +
        Parameters:
        +
        numberOfEntries - the actual number of entries stored with the CompactSketch.
        +
        Returns:
        +
        the maximum number of storage bytes required for a CompactSketch with the given number + of entries.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxUpdateSketchBytes

        +
        public static int getMaxUpdateSketchBytes​(int nomEntries)
        +
        Returns the maximum number of storage bytes required for an UpdateSketch with the given + number of nominal entries (power of 2).
        +
        +
        Parameters:
        +
        nomEntries - Nominal Entries + This will become the ceiling power of 2 if it is not.
        +
        Returns:
        +
        the maximum number of storage bytes required for a UpdateSketch with the given + nomEntries
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public int getRetainedEntries()
        +
        Returns the number of valid entries that have been retained by the sketch.
        +
        +
        Returns:
        +
        the number of valid retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public abstract int getRetainedEntries​(boolean valid)
        +
        Returns the number of entries that have been retained by the sketch.
        +
        +
        Parameters:
        +
        valid - if true, returns the number of valid entries, which are less than theta and used + for estimation. + Otherwise, return the number of all entries, valid or not, that are currently in the internal + sketch cache.
        +
        Returns:
        +
        the number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getSerializationVersion

        +
        public static int getSerializationVersion​(org.apache.datasketches.memory.Memory mem)
        +
        Returns the serialization version from the given Memory
        +
        +
        Parameters:
        +
        mem - the sketch Memory
        +
        Returns:
        +
        the serialization version from the Memory
        +
        +
      • +
      + + + +
        +
      • +

        getTheta

        +
        public double getTheta()
        +
        Gets the value of theta as a double with a value between zero and one
        +
        +
        Returns:
        +
        the value of theta as a double
        +
        +
      • +
      + + + +
        +
      • +

        getThetaLong

        +
        public abstract long getThetaLong()
        +
        Gets the value of theta as a long
        +
        +
        Returns:
        +
        the value of theta as a long
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int numStdDev)
        +
        Gets the approximate upper error bound given the specified number of Standard Deviations. + This will return getEstimate() if isEmpty() is true.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        Returns:
        +
        the upper bound.
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        public abstract boolean hasMemory()
        +
        Returns true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
        Returns:
        +
        true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isCompact

        +
        public abstract boolean isCompact()
        +
        Returns true if this sketch is in compact form.
        +
        +
        Returns:
        +
        true if this sketch is in compact form.
        +
        +
      • +
      + + + +
        +
      • +

        isDirect

        +
        public abstract boolean isDirect()
        +
        Returns true if the this sketch's internal data structure is backed by direct (off-heap) + Memory.
        +
        +
        Returns:
        +
        true if the this sketch's internal data structure is backed by direct (off-heap) + Memory.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public abstract boolean isEmpty()
        + +
        +
        Returns:
        +
        true if empty.
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        Returns true if the sketch is Estimation Mode (as opposed to Exact Mode). + This is true if theta < 1.0 AND isEmpty() is false.
        +
        +
        Returns:
        +
        true if the sketch is in estimation mode.
        +
        +
      • +
      + + + +
        +
      • +

        isOrdered

        +
        public abstract boolean isOrdered()
        +
        Returns true if internal cache is ordered
        +
        +
        Returns:
        +
        true if internal cache is ordered
        +
        +
      • +
      + + + +
        +
      • +

        isSameResource

        +
        public boolean isSameResource​(org.apache.datasketches.memory.Memory that)
        +
        Returns true if the backing resource of this is identical with the backing resource + of that. The capacities must be the same. If this is a region, + the region offset must also be the same.
        +
        +
        Parameters:
        +
        that - A different non-null object
        +
        Returns:
        +
        true if the backing resource of this is the same as the backing resource + of that.
        +
        +
      • +
      + + + +
        +
      • +

        iterator

        +
        public abstract HashIterator iterator()
        +
        Returns a HashIterator that can be used to iterate over the retained hash values of the + Theta sketch.
        +
        +
        Returns:
        +
        a HashIterator that can be used to iterate over the retained hash values of the + Theta sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public abstract byte[] toByteArray()
        +
        Serialize this sketch to a byte array form.
        +
        +
        Returns:
        +
        byte array of this sketch
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns a human readable summary of the sketch. This method is equivalent to the parameterized + call:
        + Sketch.toString(sketch, true, false, 8, true);
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        summary
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString​(boolean sketchSummary,
        +                       boolean dataDetail,
        +                       int width,
        +                       boolean hexMode)
        +
        Gets a human readable listing of contents and summary of the given sketch. + This can be a very long string. If this sketch is in a "dirty" state there + may be values in the dataDetail view that are ≥ theta.
        +
        +
        Parameters:
        +
        sketchSummary - If true the sketch summary will be output at the end.
        +
        dataDetail - If true, includes all valid hash values in the sketch.
        +
        width - The number of columns of hash values. Default is 8.
        +
        hexMode - If true, hashes will be output in hex.
        +
        Returns:
        +
        The result string, which can be very long.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(byte[] byteArr)
        +
        Returns a human readable string of the preamble of a byte array image of a Theta Sketch.
        +
        +
        Parameters:
        +
        byteArr - the given byte array
        +
        Returns:
        +
        a human readable string of the preamble of a byte array image of a Theta Sketch.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public static String toString​(org.apache.datasketches.memory.Memory mem)
        +
        Returns a human readable string of the preamble of a Memory image of a Theta Sketch.
        +
        +
        Parameters:
        +
        mem - the given Memory object
        +
        Returns:
        +
        a human readable string of the preamble of a Memory image of a Theta Sketch.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/Sketches.html b/docs/5.0.X/org/apache/datasketches/theta/Sketches.html new file mode 100644 index 000000000..971c708f2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/Sketches.html @@ -0,0 +1,1073 @@ + + + + + +Sketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Sketches

+
+
+ +
+
    +
  • +
    +
    public final class Sketches
    +extends Object
    +
    This class brings together the common sketch and set operation creation methods and + the public static methods into one place.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/Union.html b/docs/5.0.X/org/apache/datasketches/theta/Union.html new file mode 100644 index 000000000..0a452a5fa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/Union.html @@ -0,0 +1,762 @@ + + + + + +Union (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Union

+
+
+ +
+
    +
  • +
    +
    public abstract class Union
    +extends SetOperation
    +
    Compute the union of two or more theta sketches. + A new instance represents an empty set.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Union() 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethodDescription
      abstract intgetCurrentBytes() +
      Returns the number of storage bytes required for this union in its current state.
      +
      FamilygetFamily() +
      Gets the Family of this SetOperation
      +
      abstract intgetMaxUnionBytes() +
      Returns the maximum required storage bytes for this union.
      +
      abstract CompactSketchgetResult() +
      Gets the result of this operation as an ordered CompactSketch on the Java heap.
      +
      abstract CompactSketchgetResult​(boolean dstOrdered, + org.apache.datasketches.memory.WritableMemory dstMem) +
      Gets the result of this operation as a CompactSketch of the chosen form.
      +
      abstract voidreset() +
      Resets this Union.
      +
      abstract byte[]toByteArray() +
      Returns a byte array image of this Union object
      +
      abstract voidunion​(org.apache.datasketches.memory.Memory mem) +
      Perform a Union operation with this union and the given Memory image of any sketch of the + Theta Family.
      +
      abstract voidunion​(Sketch sketchIn) +
      Perform a Union operation with this union and the given on-heap sketch of the Theta Family.
      +
      CompactSketchunion​(Sketch sketchA, + Sketch sketchB) +
      This implements a stateless, pair-wise union operation.
      +
      abstract CompactSketchunion​(Sketch sketchA, + Sketch sketchB, + boolean dstOrdered, + org.apache.datasketches.memory.WritableMemory dstMem) +
      This implements a stateless, pair-wise union operation.
      +
      abstract voidupdate​(byte[] data) +
      Update this union with the given byte array item.
      +
      abstract voidupdate​(char[] data) +
      Update this union with the given char array item.
      +
      abstract voidupdate​(double datum) +
      Update this union with the given double (or float) data item.
      +
      abstract voidupdate​(int[] data) +
      Update this union with the given integer array item.
      +
      abstract voidupdate​(long datum) +
      Update this union with the given long data item.
      +
      abstract voidupdate​(long[] data) +
      Update this union with the given long array item.
      +
      abstract voidupdate​(String datum) +
      Update this union with the with the given String data item.
      +
      + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Union

        +
        public Union()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCurrentBytes

        +
        public abstract int getCurrentBytes()
        +
        Returns the number of storage bytes required for this union in its current state.
        +
        +
        Returns:
        +
        the number of storage bytes required for this union in its current state.
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public Family getFamily()
        +
        Description copied from class: SetOperation
        +
        Gets the Family of this SetOperation
        +
        +
        Specified by:
        +
        getFamily in class SetOperation
        +
        Returns:
        +
        the Family of this SetOperation
        +
        +
      • +
      + + + +
        +
      • +

        getMaxUnionBytes

        +
        public abstract int getMaxUnionBytes()
        +
        Returns the maximum required storage bytes for this union.
        +
        +
        Returns:
        +
        the maximum required storage bytes for this union.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract CompactSketch getResult()
        +
        Gets the result of this operation as an ordered CompactSketch on the Java heap. + This does not disturb the underlying data structure of the union. + Therefore, it is OK to continue updating the union after this operation.
        +
        +
        Returns:
        +
        the result of this operation as an ordered CompactSketch on the Java heap
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract CompactSketch getResult​(boolean dstOrdered,
        +                                        org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Gets the result of this operation as a CompactSketch of the chosen form. + This does not disturb the underlying data structure of the union. + Therefore, it is OK to continue updating the union after this operation.
        +
        +
        Parameters:
        +
        dstOrdered - See Destination Ordered
        +
        dstMem - See Destination Memory.
        +
        Returns:
        +
        the result of this operation as a CompactSketch of the chosen form
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public abstract void reset()
        +
        Resets this Union. The seed remains intact, everything else reverts back to its virgin state.
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public abstract byte[] toByteArray()
        +
        Returns a byte array image of this Union object
        +
        +
        Returns:
        +
        a byte array image of this Union object
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public CompactSketch union​(Sketch sketchA,
        +                           Sketch sketchB)
        +
        This implements a stateless, pair-wise union operation. The returned sketch will be cut back to + the smaller of the two k values if required. + +

        Nulls and empty sketches are ignored.

        +
        +
        Parameters:
        +
        sketchA - The first argument
        +
        sketchB - The second argument
        +
        Returns:
        +
        the result ordered CompactSketch on the heap.
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public abstract CompactSketch union​(Sketch sketchA,
        +                                    Sketch sketchB,
        +                                    boolean dstOrdered,
        +                                    org.apache.datasketches.memory.WritableMemory dstMem)
        +
        This implements a stateless, pair-wise union operation. The returned sketch will be cut back to + k if required, similar to the regular Union operation. + +

        Nulls and empty sketches are ignored.

        +
        +
        Parameters:
        +
        sketchA - The first argument
        +
        sketchB - The second argument
        +
        dstOrdered - If true, the returned CompactSketch will be ordered.
        +
        dstMem - If not null, the returned CompactSketch will be placed in this WritableMemory.
        +
        Returns:
        +
        the result CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public abstract void union​(Sketch sketchIn)
        +
        Perform a Union operation with this union and the given on-heap sketch of the Theta Family. + This method is not valid for the older SetSketch, which was prior to Open Source (August, 2015). + +

        This method can be repeatedly called. + +

        Nulls and empty sketches are ignored.

        +
        +
        Parameters:
        +
        sketchIn - The incoming sketch.
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public abstract void union​(org.apache.datasketches.memory.Memory mem)
        +
        Perform a Union operation with this union and the given Memory image of any sketch of the + Theta Family. The input image may be from earlier versions of the Theta Compact Sketch, + called the SetSketch (circa 2014), which was prior to Open Source and are compact and ordered. + +

        This method can be repeatedly called. + +

        Nulls and empty sketches are ignored.

        +
        +
        Parameters:
        +
        mem - Memory image of sketch to be merged
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(long datum)
        +
        Update this union with the given long data item.
        +
        +
        Parameters:
        +
        datum - The given long datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(double datum)
        +
        Update this union with the given double (or float) data item. + The double will be converted to a long using Double.doubleToLongBits(datum), + which normalizes all NaN values to a single NaN representation. + Plus and minus zero will be normalized to plus zero. + Each of the special floating-point values NaN and +/- Infinity are treated as distinct.
        +
        +
        Parameters:
        +
        datum - The given double datum.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(String datum)
        +
        Update this union with the with the given String data item. + The string is converted to a byte array using UTF8 encoding. + If the string is null or empty no update attempt is made and the method returns. + +

        Note: this will not produce the same output hash values as the update(char[]) + method and will generally be a little slower depending on the complexity of the UTF8 encoding. +

        + +

        Note: this is not a Sketch Union operation. This treats the given string as a data item.

        +
        +
        Parameters:
        +
        datum - The given String.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(byte[] data)
        +
        Update this union with the given byte array item. + If the byte array is null or empty no update attempt is made and the method returns. + +

        Note: this is not a Sketch Union operation. This treats the given byte array as a data + item.

        +
        +
        Parameters:
        +
        data - The given byte array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(int[] data)
        +
        Update this union with the given integer array item. + If the integer array is null or empty no update attempt is made and the method returns. + +

        Note: this is not a Sketch Union operation. This treats the given integer array as a data + item.

        +
        +
        Parameters:
        +
        data - The given int array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(char[] data)
        +
        Update this union with the given char array item. + If the char array is null or empty no update attempt is made and the method returns. + +

        Note: this will not produce the same output hash values as the update(String) + method but will be a little faster as it avoids the complexity of the UTF8 encoding.

        + +

        Note: this is not a Sketch Union operation. This treats the given char array as a data + item.

        +
        +
        Parameters:
        +
        data - The given char array.
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public abstract void update​(long[] data)
        +
        Update this union with the given long array item. + If the long array is null or empty no update attempt is made and the method returns. + +

        Note: this is not a Sketch Union operation. This treats the given char array as a data + item.

        +
        +
        Parameters:
        +
        data - The given long array.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/UpdateReturnState.html b/docs/5.0.X/org/apache/datasketches/theta/UpdateReturnState.html new file mode 100644 index 000000000..a81655fcf --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/UpdateReturnState.html @@ -0,0 +1,509 @@ + + + + + +UpdateReturnState (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum UpdateReturnState

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        InsertedCountIncremented

        +
        public static final UpdateReturnState InsertedCountIncremented
        +
        The hash was accepted into the sketch and the retained count was incremented.
        +
      • +
      + + + +
        +
      • +

        InsertedCountIncrementedResized

        +
        public static final UpdateReturnState InsertedCountIncrementedResized
        +
        The hash was accepted into the sketch, the retained count was incremented. + The current cache was out of room and resized larger based on the Resize Factor.
        +
      • +
      + + + +
        +
      • +

        InsertedCountIncrementedRebuilt

        +
        public static final UpdateReturnState InsertedCountIncrementedRebuilt
        +
        The hash was accepted into the sketch, the retained count was incremented. + The current cache was out of room and at maximum size, so the cache was rebuilt.
        +
      • +
      + + + +
        +
      • +

        InsertedCountNotIncremented

        +
        public static final UpdateReturnState InsertedCountNotIncremented
        +
        The hash was accepted into the sketch and the retained count was not incremented.
        +
      • +
      + + + +
        +
      • +

        ConcurrentBufferInserted

        +
        public static final UpdateReturnState ConcurrentBufferInserted
        +
        The hash was inserted into the local concurrent buffer, + but has not yet been propagated to the concurrent shared sketch.
        +
      • +
      + + + +
        +
      • +

        ConcurrentPropagated

        +
        public static final UpdateReturnState ConcurrentPropagated
        +
        The hash has been propagated to the concurrent shared sketch. + This does not reflect the action taken by the shared sketch.
        +
      • +
      + + + +
        +
      • +

        RejectedDuplicate

        +
        public static final UpdateReturnState RejectedDuplicate
        +
        The hash was rejected as a duplicate.
        +
      • +
      + + + +
        +
      • +

        RejectedNullOrEmpty

        +
        public static final UpdateReturnState RejectedNullOrEmpty
        +
        The hash was rejected because it was null or empty.
        +
      • +
      + + + +
        +
      • +

        RejectedOverTheta

        +
        public static final UpdateReturnState RejectedOverTheta
        +
        The hash was rejected because the value was negative, zero or + greater than theta.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static UpdateReturnState[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (UpdateReturnState c : UpdateReturnState.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static UpdateReturnState valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/UpdateSketch.html b/docs/5.0.X/org/apache/datasketches/theta/UpdateSketch.html new file mode 100644 index 000000000..11acce0ec --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/UpdateSketch.html @@ -0,0 +1,794 @@ + + + + + +UpdateSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UpdateSketch

+
+
+ +
+
    +
  • +
    +
    public abstract class UpdateSketch
    +extends Sketch
    +
    The parent class for the Update Sketch families, such as QuickSelect and Alpha. + The primary task of an Update Sketch is to consider datums presented via the update() methods + for inclusion in its internal cache. This is the sketch building process.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        wrap

        +
        public static UpdateSketch wrap​(org.apache.datasketches.memory.WritableMemory srcMem)
        +
        Wrap takes the sketch image in Memory and refers to it directly. There is no data copying onto + the java heap. Only "Direct" Serialization Version 3 (i.e, OpenSource) sketches that have + been explicitly stored as direct objects can be wrapped. This method assumes the + ThetaUtil.DEFAULT_UPDATE_SEED. + Default Update Seed.
        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch where the image seed hash matches the default seed hash. + It must have a size of at least 24 bytes. + See Memory
        +
        Returns:
        +
        a Sketch backed by the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static UpdateSketch wrap​(org.apache.datasketches.memory.WritableMemory srcMem,
        +                                long expectedSeed)
        +
        Wrap takes the sketch image in Memory and refers to it directly. There is no data copying onto + the java heap. Only "Direct" Serialization Version 3 (i.e, OpenSource) sketches that have + been explicitly stored as direct objects can be wrapped. + An attempt to "wrap" earlier version sketches will result in a "heapified", normal + Java Heap version of the sketch where all data will be copied to the heap.
        +
        +
        Parameters:
        +
        srcMem - an image of a Sketch where the image seed hash matches the given seed hash. + It must have a size of at least 24 bytes. + See Memory
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed. + Compact sketches store a 16-bit hash of the seed, but not the seed itself.
        +
        Returns:
        +
        a UpdateSketch backed by the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static UpdateSketch heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Instantiates an on-heap UpdateSketch from Memory. This method assumes the + ThetaUtil.DEFAULT_UPDATE_SEED.
        +
        +
        Parameters:
        +
        srcMem - See Memory + It must have a size of at least 24 bytes.
        +
        Returns:
        +
        an UpdateSketch
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static UpdateSketch heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                   long expectedSeed)
        +
        Instantiates an on-heap UpdateSketch from Memory.
        +
        +
        Parameters:
        +
        srcMem - See Memory + It must have a size of at least 24 bytes.
        +
        expectedSeed - the seed used to validate the given Memory image. + See Update Hash Seed.
        +
        Returns:
        +
        an UpdateSketch
        +
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactSketch compact​(boolean dstOrdered,
        +                             org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Description copied from class: Sketch
        +
        Convert this sketch to a CompactSketch. + +

        If this sketch is a type of UpdateSketch, the compacting process converts the hash table + of the UpdateSketch to a simple list of the valid hash values. + Any hash values of zero or equal-to or greater than theta will be discarded. + The number of valid values remaining in the CompactSketch depends on a number of factors, + but may be larger or smaller than Nominal Entries (or k). + It will never exceed 2k. + If it is critical to always limit the size to no more than k, + then rebuild() should be called on the UpdateSketch prior to calling this method.

        + +

        A CompactSketch is always immutable.

        + +

        A new CompactSketch object is created:

        +
        • if dstMem != null
        • +
        • if dstMem == null and this.hasMemory() == true
        • +
        • if dstMem == null and this has more than 1 item and this.isOrdered() == false + and dstOrdered == true.
        • +
        + +

        Otherwise, this operation returns this.

        +
        +
        Specified by:
        +
        compact in class Sketch
        +
        Parameters:
        +
        dstOrdered - assumed true if this sketch is empty or has only one value + See Destination Ordered
        +
        dstMem - See Destination Memory.
        +
        Returns:
        +
        this sketch as a CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        getCompactBytes

        +
        public int getCompactBytes()
        +
        Description copied from class: Sketch
        +
        Returns the number of storage bytes required for this Sketch if its current state were + compacted. It this sketch is already in the compact form this is equivalent to + calling Sketch.getCurrentBytes().
        +
        +
        Specified by:
        +
        getCompactBytes in class Sketch
        +
        Returns:
        +
        number of compact bytes
        +
        +
      • +
      + + + +
        +
      • +

        isCompact

        +
        public boolean isCompact()
        +
        Description copied from class: Sketch
        +
        Returns true if this sketch is in compact form.
        +
        +
        Specified by:
        +
        isCompact in class Sketch
        +
        Returns:
        +
        true if this sketch is in compact form.
        +
        +
      • +
      + + + +
        +
      • +

        isOrdered

        +
        public boolean isOrdered()
        +
        Description copied from class: Sketch
        +
        Returns true if internal cache is ordered
        +
        +
        Specified by:
        +
        isOrdered in class Sketch
        +
        Returns:
        +
        true if internal cache is ordered
        +
        +
      • +
      + + + +
        +
      • +

        builder

        +
        public static final UpdateSketchBuilder builder()
        +
        Returns a new builder
        +
        +
        Returns:
        +
        a new builder
        +
        +
      • +
      + + + +
        +
      • +

        getResizeFactor

        +
        public abstract ResizeFactor getResizeFactor()
        +
        Returns the configured ResizeFactor
        +
        +
        Returns:
        +
        the configured ResizeFactor
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public abstract void reset()
        +
        Resets this sketch back to a virgin empty state.
        +
      • +
      + + + +
        +
      • +

        rebuild

        +
        public abstract UpdateSketch rebuild()
        +
        Rebuilds the hash table to remove dirty values or to reduce the size + to nominal entries.
        +
        +
        Returns:
        +
        this sketch
        +
        +
      • +
      + + + + + + + +
        +
      • +

        update

        +
        public UpdateReturnState update​(double datum)
        +
        Present this sketch with the given double (or float) datum. + The double will be converted to a long using Double.doubleToLongBits(datum), + which normalizes all NaN values to a single NaN representation. + Plus and minus zero will be normalized to plus zero. + The special floating-point values NaN and +/- Infinity are treated as distinct.
        +
        +
        Parameters:
        +
        datum - The given double datum.
        +
        Returns:
        +
        See Update Return State
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public UpdateReturnState update​(String datum)
        +
        Present this sketch with the given String. + The string is converted to a byte array using UTF8 encoding. + If the string is null or empty no update attempt is made and the method returns. + +

        Note: this will not produce the same output hash values as the update(char[]) + method and will generally be a little slower depending on the complexity of the UTF8 encoding. +

        +
        +
        Parameters:
        +
        datum - The given String.
        +
        Returns:
        +
        See Update Return State
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public UpdateReturnState update​(byte[] data)
        +
        Present this sketch with the given byte array. + If the byte array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given byte array.
        +
        Returns:
        +
        See Update Return State
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public UpdateReturnState update​(char[] data)
        +
        Present this sketch with the given char array. + If the char array is null or empty no update attempt is made and the method returns. + +

        Note: this will not produce the same output hash values as the update(String) + method but will be a little faster as it avoids the complexity of the UTF8 encoding.

        +
        +
        Parameters:
        +
        data - The given char array.
        +
        Returns:
        +
        See Update Return State
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public UpdateReturnState update​(int[] data)
        +
        Present this sketch with the given integer array. + If the integer array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given int array.
        +
        Returns:
        +
        See Update Return State
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public UpdateReturnState update​(long[] data)
        +
        Present this sketch with the given long array. + If the long array is null or empty no update attempt is made and the method returns.
        +
        +
        Parameters:
        +
        data - The given long array.
        +
        Returns:
        +
        See Update Return State
        +
        +
      • +
      + + + +
        +
      • +

        getLgNomLongs

        +
        public abstract int getLgNomLongs()
        +
        Gets the Log base 2 of the configured nominal entries
        +
        +
        Returns:
        +
        the Log base 2 of the configured nominal entries
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/UpdateSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/theta/UpdateSketchBuilder.html new file mode 100644 index 000000000..61e66a0ce --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/UpdateSketchBuilder.html @@ -0,0 +1,1078 @@ + + + + + +UpdateSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UpdateSketchBuilder

+
+
+ +
+
    +
  • +
    +
    public class UpdateSketchBuilder
    +extends Object
    +
    For building a new UpdateSketch.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UpdateSketchBuilder

        +
        public UpdateSketchBuilder()
        +
        Constructor for building a new UpdateSketch. The default configuration is +
          +
        • Nominal Entries: 4096
        • +
        • Seed: 9001L
        • +
        • Input Sampling Probability: 1.0
        • +
        • Family: Family.QUICKSELECT
        • +
        • Resize Factor: The default for sketches on the Java heap is ResizeFactor.X8. + For direct sketches, which are targeted for native memory off the Java heap, this value will + be fixed at either ResizeFactor.X1 or ResizeFactor.X2.
        • +
        • MemoryRequestServer (Direct only): + DefaultMemoryRequestServer.
        • +
        + Parameters unique to the concurrent sketches only: +
          +
        • Number of local Nominal Entries: 4
        • +
        • Concurrent NumPoolThreads: 3
        • +
        • Concurrent PropagateOrderedCompact: true
        • +
        • Concurrent MaxConcurrencyError: 0
        • +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setNominalEntries

        +
        public UpdateSketchBuilder setNominalEntries​(int nomEntries)
        +
        Sets the Nominal Entries for this sketch. + This value is also used for building a shared concurrent sketch. + The minimum value is 16 (2^4) and the maximum value is 67,108,864 (2^26). + Be aware that sketches as large as this maximum value may not have been + thoroughly tested or characterized for performance.
        +
        +
        Parameters:
        +
        nomEntries - Nominal Entries + This will become the ceiling power of 2 if the given value is not.
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        setLogNominalEntries

        +
        public UpdateSketchBuilder setLogNominalEntries​(int lgNomEntries)
        +
        Alternative method of setting the Nominal Entries for this sketch from the log_base2 value. + This value is also used for building a shared concurrent sketch. + The minimum value is 4 and the maximum value is 26. + Be aware that sketches as large as this maximum value may not have been + thoroughly characterized for performance.
        +
        +
        Parameters:
        +
        lgNomEntries - the Log Nominal Entries. Also for the concurrent shared sketch
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getLgNominalEntries

        +
        public int getLgNominalEntries()
        +
        Returns Log-base 2 Nominal Entries
        +
        +
        Returns:
        +
        Log-base 2 Nominal Entries
        +
        +
      • +
      + + + +
        +
      • +

        setLocalNominalEntries

        +
        public UpdateSketchBuilder setLocalNominalEntries​(int nomEntries)
        +
        Sets the Nominal Entries for the concurrent local sketch. The minimum value is 16 and the + maximum value is 67,108,864, which is 2^26. + Be aware that sketches as large as this maximum + value have not been thoroughly tested or characterized for performance.
        +
        +
        Parameters:
        +
        nomEntries - Nominal Entries + This will become the ceiling power of 2 if it is not.
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        setLocalLogNominalEntries

        +
        public UpdateSketchBuilder setLocalLogNominalEntries​(int lgNomEntries)
        +
        Alternative method of setting the Nominal Entries for a local concurrent sketch from the + log_base2 value. + The minimum value is 4 and the maximum value is 26. + Be aware that sketches as large as this maximum + value have not been thoroughly tested or characterized for performance.
        +
        +
        Parameters:
        +
        lgNomEntries - the Log Nominal Entries for a concurrent local sketch
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getLocalLgNominalEntries

        +
        public int getLocalLgNominalEntries()
        +
        Returns Log-base 2 Nominal Entries for the concurrent local sketch
        +
        +
        Returns:
        +
        Log-base 2 Nominal Entries for the concurrent local sketch
        +
        +
      • +
      + + + +
        +
      • +

        setSeed

        +
        public UpdateSketchBuilder setSeed​(long seed)
        +
        Sets the long seed value that is required by the hashing function.
        +
        +
        Parameters:
        +
        seed - See seed
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getSeed

        +
        public long getSeed()
        +
        Returns the seed
        +
        +
        Returns:
        +
        the seed
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getP

        +
        public float getP()
        +
        Returns the pre-sampling probability p
        +
        +
        Returns:
        +
        the pre-sampling probability p
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getResizeFactor

        +
        public ResizeFactor getResizeFactor()
        +
        Returns the Resize Factor
        +
        +
        Returns:
        +
        the Resize Factor
        +
        +
      • +
      + + + +
        +
      • +

        setFamily

        +
        public UpdateSketchBuilder setFamily​(Family family)
        +
        Set the Family.
        +
        +
        Parameters:
        +
        family - the family for this builder
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getFamily

        +
        public Family getFamily()
        +
        Returns the Family
        +
        +
        Returns:
        +
        the Family
        +
        +
      • +
      + + + +
        +
      • +

        setMemoryRequestServer

        +
        public UpdateSketchBuilder setMemoryRequestServer​(org.apache.datasketches.memory.MemoryRequestServer memReqSvr)
        +
        Set the MemoryRequestServer
        +
        +
        Parameters:
        +
        memReqSvr - the given MemoryRequestServer
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getMemoryRequestServer

        +
        public org.apache.datasketches.memory.MemoryRequestServer getMemoryRequestServer()
        +
        Returns the MemoryRequestServer
        +
        +
        Returns:
        +
        the MemoryRequestServer
        +
        +
      • +
      + + + +
        +
      • +

        setNumPoolThreads

        +
        public void setNumPoolThreads​(int numPoolThreads)
        +
        Sets the number of pool threads used for background propagation in the concurrent sketches.
        +
        +
        Parameters:
        +
        numPoolThreads - the given number of pool threads
        +
        +
      • +
      + + + +
        +
      • +

        getNumPoolThreads

        +
        public int getNumPoolThreads()
        +
        Gets the number of background pool threads used for propagation in the concurrent sketches.
        +
        +
        Returns:
        +
        the number of background pool threads
        +
        +
      • +
      + + + +
        +
      • +

        setPropagateOrderedCompact

        +
        public UpdateSketchBuilder setPropagateOrderedCompact​(boolean prop)
        +
        Sets the Propagate Ordered Compact flag to the given value. Used with concurrent sketches.
        +
        +
        Parameters:
        +
        prop - the given value
        +
        Returns:
        +
        this UpdateSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        getPropagateOrderedCompact

        +
        public boolean getPropagateOrderedCompact()
        +
        Gets the Propagate Ordered Compact flag used with concurrent sketches.
        +
        +
        Returns:
        +
        the Propagate Ordered Compact flag
        +
        +
      • +
      + + + +
        +
      • +

        setMaxConcurrencyError

        +
        public void setMaxConcurrencyError​(double maxConcurrencyError)
        +
        Sets the Maximum Concurrency Error.
        +
        +
        Parameters:
        +
        maxConcurrencyError - the given Maximum Concurrency Error.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxConcurrencyError

        +
        public double getMaxConcurrencyError()
        +
        Gets the Maximum Concurrency Error
        +
        +
        Returns:
        +
        the Maximum Concurrency Error
        +
        +
      • +
      + + + +
        +
      • +

        setMaxNumLocalThreads

        +
        public void setMaxNumLocalThreads​(int maxNumLocalThreads)
        +
        Sets the Maximum Number of Local Threads. + This is used to set the size of the local concurrent buffers.
        +
        +
        Parameters:
        +
        maxNumLocalThreads - the given Maximum Number of Local Threads
        +
        +
      • +
      + + + +
        +
      • +

        getMaxNumLocalThreads

        +
        public int getMaxNumLocalThreads()
        +
        Gets the Maximum Number of Local Threads.
        +
        +
        Returns:
        +
        the Maximum Number of Local Threads.
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public UpdateSketch build()
        +
        Returns an UpdateSketch with the current configuration of this Builder.
        +
        +
        Returns:
        +
        an UpdateSketch
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public UpdateSketch build​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns an UpdateSketch with the current configuration of this Builder + with the specified backing destination Memory store. + Note: this cannot be used with the Alpha Family of sketches.
        +
        +
        Parameters:
        +
        dstMem - The destination Memory.
        +
        Returns:
        +
        an UpdateSketch
        +
        +
      • +
      + + + +
        +
      • +

        buildShared

        +
        public UpdateSketch buildShared()
        +
        Returns an on-heap concurrent shared UpdateSketch with the current configuration of the + Builder. + +

        The parameters unique to the shared concurrent sketch are: +

          +
        • Number of Pool Threads (default is 3)
        • +
        • Maximum Concurrency Error
        • +
        + +

        Key parameters that are in common with other Theta sketches: +

          +
        • Nominal Entries or Log Nominal Entries (for the shared concurrent sketch)
        • +
        +
        +
        Returns:
        +
        an on-heap concurrent UpdateSketch with the current configuration of the Builder.
        +
        +
      • +
      + + + +
        +
      • +

        buildShared

        +
        public UpdateSketch buildShared​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns a direct (potentially off-heap) concurrent shared UpdateSketch with the current + configuration of the Builder and the given destination WritableMemory. If the destination + WritableMemory is null, this defaults to an on-heap concurrent shared UpdateSketch. + +

        The parameters unique to the shared concurrent sketch are: +

          +
        • Number of Pool Threads (default is 3)
        • +
        • Maximum Concurrency Error
        • +
        + +

        Key parameters that are in common with other Theta sketches: +

          +
        • Nominal Entries or Log Nominal Entries (for the shared concurrent sketch)
        • +
        • Destination Writable Memory (if not null, returned sketch is Direct. Default is null.)
        • +
        +
        +
        Parameters:
        +
        dstMem - the given WritableMemory for Direct, otherwise null.
        +
        Returns:
        +
        a concurrent UpdateSketch with the current configuration of the Builder + and the given destination WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        buildSharedFromSketch

        +
        public UpdateSketch buildSharedFromSketch​(UpdateSketch sketch,
        +                                          org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns a direct (potentially off-heap) concurrent shared UpdateSketch with the current + configuration of the Builder, the data from the given sketch, and the given destination + WritableMemory. If the destination WritableMemory is null, this defaults to an on-heap + concurrent shared UpdateSketch. + +

        The parameters unique to the shared concurrent sketch are: +

          +
        • Number of Pool Threads (default is 3)
        • +
        • Maximum Concurrency Error
        • +
        + +

        Key parameters that are in common with other Theta sketches: +

          +
        • Nominal Entries or Log Nominal Entries (for the shared concurrent sketch)
        • +
        • Destination Writable Memory (if not null, returned sketch is Direct. Default is null.)
        • +
        +
        +
        Parameters:
        +
        sketch - a given UpdateSketch from which the data is used to initialize the returned + shared sketch.
        +
        dstMem - the given WritableMemory for Direct, otherwise null.
        +
        Returns:
        +
        a concurrent UpdateSketch with the current configuration of the Builder + and the given destination WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        buildLocal

        +
        public UpdateSketch buildLocal​(UpdateSketch shared)
        +
        Returns a local, on-heap, concurrent UpdateSketch to be used as a per-thread local buffer + along with the given concurrent shared UpdateSketch and the current configuration of this + Builder. + +

        The parameters unique to the local concurrent sketch are: +

          +
        • Local Nominal Entries or Local Log Nominal Entries
        • +
        • Propagate Ordered Compact flag
        • +
        +
        +
        Parameters:
        +
        shared - the concurrent shared sketch to be accessed via the concurrent local sketch.
        +
        Returns:
        +
        an UpdateSketch to be used as a per-thread local buffer.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/AnotB.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/AnotB.html new file mode 100644 index 000000000..c132eeda3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/AnotB.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class org.apache.datasketches.theta.AnotB (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.AnotB

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/BitPacking.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/BitPacking.html new file mode 100644 index 000000000..7b04e3761 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/BitPacking.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.theta.BitPacking (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.BitPacking

+
+
No usage of org.apache.datasketches.theta.BitPacking
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/CompactSketch.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/CompactSketch.html new file mode 100644 index 000000000..f91178624 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/CompactSketch.html @@ -0,0 +1,386 @@ + + + + + +Uses of Class org.apache.datasketches.theta.CompactSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.CompactSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/HashIterator.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/HashIterator.html new file mode 100644 index 000000000..2e6a7c7e1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/HashIterator.html @@ -0,0 +1,199 @@ + + + + + +Uses of Interface org.apache.datasketches.theta.HashIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.theta.HashIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/Intersection.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/Intersection.html new file mode 100644 index 000000000..16f6b9ffa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/Intersection.html @@ -0,0 +1,222 @@ + + + + + +Uses of Class org.apache.datasketches.theta.Intersection (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.Intersection

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/JaccardSimilarity.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/JaccardSimilarity.html new file mode 100644 index 000000000..6459627ad --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/JaccardSimilarity.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.theta.JaccardSimilarity (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.JaccardSimilarity

+
+
No usage of org.apache.datasketches.theta.JaccardSimilarity
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperation.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperation.html new file mode 100644 index 000000000..941642a09 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperation.html @@ -0,0 +1,331 @@ + + + + + +Uses of Class org.apache.datasketches.theta.SetOperation (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.SetOperation

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperationBuilder.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperationBuilder.html new file mode 100644 index 000000000..bf957f501 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/SetOperationBuilder.html @@ -0,0 +1,247 @@ + + + + + +Uses of Class org.apache.datasketches.theta.SetOperationBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.SetOperationBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/Sketch.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/Sketch.html new file mode 100644 index 000000000..4ddb54b0a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/Sketch.html @@ -0,0 +1,602 @@ + + + + + +Uses of Class org.apache.datasketches.theta.Sketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.Sketch

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Packages that use Sketch 
    PackageDescription
    org.apache.datasketches.theta +
    The theta package contains the basic sketch classes that are members of the + Theta Sketch Framework.
    +
    org.apache.datasketches.thetacommon +
    This package contains common tools and methods for the theta, + tuple, tuple/* and fdt packages.
    +
    org.apache.datasketches.tuple +
    The tuple package contains a number of sketches based on the same + fundamental algorithms of the Theta Sketch Framework and extend these + concepts for whole new families of sketches.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of Sketch in org.apache.datasketches.theta

      + + + + + + + + + + + + + + + + + + + +
      Subclasses of Sketch in org.apache.datasketches.theta 
      Modifier and TypeClassDescription
      class CompactSketch +
      The parent class of all the CompactSketches.
      +
      class UpdateSketch +
      The parent class for the Update Sketch families, such as QuickSelect and Alpha.
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.theta that return Sketch 
      Modifier and TypeMethodDescription
      static SketchSketch.heapify​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
      +
      static SketchSketch.heapify​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) +
      Heapify takes the sketch image in Memory and instantiates an on-heap Sketch.
      +
      static SketchSketches.heapifySketch​(org.apache.datasketches.memory.Memory srcMem) + +
      static SketchSketches.heapifySketch​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) + +
      static SketchSketch.wrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap takes the sketch image in the given Memory and refers to it directly.
      +
      static SketchSketch.wrap​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) +
      Wrap takes the sketch image in the given Memory and refers to it directly.
      +
      static SketchSketches.wrapSketch​(org.apache.datasketches.memory.Memory srcMem) + +
      static SketchSketches.wrapSketch​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.theta with parameters of type Sketch 
      Modifier and TypeMethodDescription
      CompactSketchAnotB.aNotB​(Sketch skA, + Sketch skB) +
      Perform A-and-not-B set operation on the two given sketches and return the result as an + ordered CompactSketch on the heap.
      +
      abstract CompactSketchAnotB.aNotB​(Sketch skA, + Sketch skB, + boolean dstOrdered, + org.apache.datasketches.memory.WritableMemory dstMem) +
      Perform A-and-not-B set operation on the two given sketches and return the result as a + CompactSketch.
      +
      static booleanJaccardSimilarity.dissimilarityTest​(Sketch measured, + Sketch expected, + double threshold) +
      Tests dissimilarity of a measured Sketch against an expected Sketch.
      +
      static booleanJaccardSimilarity.exactlyEqual​(Sketch sketchA, + Sketch sketchB) +
      Returns true if the two given sketches have exactly the same hash values and the same + theta values.
      +
      abstract voidIntersection.intersect​(Sketch sketchIn) +
      Intersect the given sketch with the internal state.
      +
      CompactSketchIntersection.intersect​(Sketch a, + Sketch b) +
      Perform intersect set operation on the two given sketch arguments and return the result as an + ordered CompactSketch on the heap.
      +
      abstract CompactSketchIntersection.intersect​(Sketch a, + Sketch b, + boolean dstOrdered, + org.apache.datasketches.memory.WritableMemory dstMem) +
      Perform intersect set operation on the two given sketches and return the result as a + CompactSketch.
      +
      static double[]JaccardSimilarity.jaccard​(Sketch sketchA, + Sketch sketchB) +
      Computes the Jaccard similarity index with upper and lower bounds.
      +
      abstract voidAnotB.notB​(Sketch skB) +
      This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + second (or n+1th) argument B of A-AND-NOT-B.
      +
      abstract voidAnotB.setA​(Sketch skA) +
      This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + first argument A of A-AND-NOT-B.
      +
      static booleanJaccardSimilarity.similarityTest​(Sketch measured, + Sketch expected, + double threshold) +
      Tests similarity of a measured Sketch against an expected Sketch.
      +
      abstract voidUnion.union​(Sketch sketchIn) +
      Perform a Union operation with this union and the given on-heap sketch of the Theta Family.
      +
      CompactSketchUnion.union​(Sketch sketchA, + Sketch sketchB) +
      This implements a stateless, pair-wise union operation.
      +
      abstract CompactSketchUnion.union​(Sketch sketchA, + Sketch sketchB, + boolean dstOrdered, + org.apache.datasketches.memory.WritableMemory dstMem) +
      This implements a stateless, pair-wise union operation.
      +
      +
      +
    • +
    • +
      + + +

      Uses of Sketch in org.apache.datasketches.thetacommon

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.thetacommon with parameters of type Sketch 
      Modifier and TypeMethodDescription
      static doubleBoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA​(Sketch sketchA, + Sketch sketchB) +
      Gets the estimate for B over A
      +
      static <S extends Summary>
      double
      BoundsOnRatiosInTupleSketchedSets.getEstimateOfBoverA​(Sketch<S> sketchA, + Sketch sketchB) +
      Gets the estimate for B over A
      +
      static doubleBoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA​(Sketch sketchA, + Sketch sketchB) +
      Gets the approximate lower bound for B over A based on a 95% confidence interval
      +
      static <S extends Summary>
      double
      BoundsOnRatiosInTupleSketchedSets.getLowerBoundForBoverA​(Sketch<S> sketchA, + Sketch sketchB) +
      Gets the approximate lower bound for B over A based on a 95% confidence interval
      +
      static doubleBoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA​(Sketch sketchA, + Sketch sketchB) +
      Gets the approximate upper bound for B over A based on a 95% confidence interval
      +
      static <S extends Summary>
      double
      BoundsOnRatiosInTupleSketchedSets.getUpperBoundForBoverA​(Sketch<S> sketchA, + Sketch sketchB) +
      Gets the approximate upper bound for B over A based on a 95% confidence interval
      +
      +
      +
    • +
    • +
      + + +

      Uses of Sketch in org.apache.datasketches.tuple

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.tuple with parameters of type Sketch 
      Modifier and TypeMethodDescription
      static <S extends Summary>
      CompactSketch<S>
      AnotB.aNotB​(Sketch<S> skA, + Sketch skB) +
      Returns the A-and-not-B set operation on a Tuple sketch and a Theta sketch.
      +
      static <S extends Summary>
      boolean
      JaccardSimilarity.dissimilarityTest​(Sketch<S> measured, + Sketch expected, + S summary, + SummarySetOperations<S> summarySetOps, + double threshold) +
      Tests dissimilarity of a measured Sketch against an expected Sketch.
      +
      static <S extends Summary>
      boolean
      JaccardSimilarity.exactlyEqual​(Sketch<S> sketchA, + Sketch sketchB, + S summary, + SummarySetOperations<S> summarySetOps) +
      Returns true if the two given sketches have exactly the same hash values and the same + theta values.
      +
      voidIntersection.intersect​(Sketch thetaSketch, + S summary) +
      Performs a stateful intersection of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary and rules + from the summarySetOps defined by the Intersection constructor.
      +
      CompactSketch<S>Intersection.intersect​(Sketch<S> tupleSketch, + Sketch thetaSketch, + S summary) +
      Perform a stateless intersect set operation on a tuple sketch and a theta sketch and returns the + result as an unordered CompactSketch on the heap.
      +
      static <S extends Summary>
      double[]
      JaccardSimilarity.jaccard​(Sketch<S> sketchA, + Sketch sketchB, + S summary, + SummarySetOperations<S> summarySetOps) +
      Computes the Jaccard similarity index with upper and lower bounds.
      +
      voidAnotB.notB​(Sketch skB) +
      This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + second (or n+1th) argument B of A-AND-NOT-B.
      +
      static <S extends Summary>
      boolean
      JaccardSimilarity.similarityTest​(Sketch<S> measured, + Sketch expected, + S summary, + SummarySetOperations<S> summarySetOps, + double threshold) +
      Tests similarity of a measured Sketch against an expected Sketch.
      +
      voidUnion.union​(Sketch thetaSketch, + S summary) +
      Performs a stateful union of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary.
      +
      CompactSketch<S>Union.union​(Sketch<S> tupleSketch, + Sketch thetaSketch, + S summary) +
      Perform a stateless, pair-wise union operation between a tupleSketch and a thetaSketch.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/Sketches.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/Sketches.html new file mode 100644 index 000000000..788b8489f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/Sketches.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.theta.Sketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.Sketches

+
+
No usage of org.apache.datasketches.theta.Sketches
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/Union.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/Union.html new file mode 100644 index 000000000..d915e962a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/Union.html @@ -0,0 +1,222 @@ + + + + + +Uses of Class org.apache.datasketches.theta.Union (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.Union

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateReturnState.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateReturnState.html new file mode 100644 index 000000000..c30963b96 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateReturnState.html @@ -0,0 +1,255 @@ + + + + + +Uses of Class org.apache.datasketches.theta.UpdateReturnState (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.UpdateReturnState

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketch.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketch.html new file mode 100644 index 000000000..82799e39f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketch.html @@ -0,0 +1,338 @@ + + + + + +Uses of Class org.apache.datasketches.theta.UpdateSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.UpdateSketch

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use UpdateSketch 
    PackageDescription
    org.apache.datasketches.theta +
    The theta package contains the basic sketch classes that are members of the + Theta Sketch Framework.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of UpdateSketch in org.apache.datasketches.theta

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.theta that return UpdateSketch 
      Modifier and TypeMethodDescription
      UpdateSketchUpdateSketchBuilder.build() +
      Returns an UpdateSketch with the current configuration of this Builder.
      +
      UpdateSketchUpdateSketchBuilder.build​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Returns an UpdateSketch with the current configuration of this Builder + with the specified backing destination Memory store.
      +
      UpdateSketchUpdateSketchBuilder.buildLocal​(UpdateSketch shared) +
      Returns a local, on-heap, concurrent UpdateSketch to be used as a per-thread local buffer + along with the given concurrent shared UpdateSketch and the current configuration of this + Builder.
      +
      UpdateSketchUpdateSketchBuilder.buildShared() +
      Returns an on-heap concurrent shared UpdateSketch with the current configuration of the + Builder.
      +
      UpdateSketchUpdateSketchBuilder.buildShared​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Returns a direct (potentially off-heap) concurrent shared UpdateSketch with the current + configuration of the Builder and the given destination WritableMemory.
      +
      UpdateSketchUpdateSketchBuilder.buildSharedFromSketch​(UpdateSketch sketch, + org.apache.datasketches.memory.WritableMemory dstMem) +
      Returns a direct (potentially off-heap) concurrent shared UpdateSketch with the current + configuration of the Builder, the data from the given sketch, and the given destination + WritableMemory.
      +
      static UpdateSketchUpdateSketch.heapify​(org.apache.datasketches.memory.Memory srcMem) +
      Instantiates an on-heap UpdateSketch from Memory.
      +
      static UpdateSketchUpdateSketch.heapify​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) +
      Instantiates an on-heap UpdateSketch from Memory.
      +
      static UpdateSketchSketches.heapifyUpdateSketch​(org.apache.datasketches.memory.Memory srcMem) + +
      static UpdateSketchSketches.heapifyUpdateSketch​(org.apache.datasketches.memory.Memory srcMem, + long expectedSeed) + +
      abstract UpdateSketchUpdateSketch.rebuild() +
      Rebuilds the hash table to remove dirty values or to reduce the size + to nominal entries.
      +
      static UpdateSketchUpdateSketch.wrap​(org.apache.datasketches.memory.WritableMemory srcMem) +
      Wrap takes the sketch image in Memory and refers to it directly.
      +
      static UpdateSketchUpdateSketch.wrap​(org.apache.datasketches.memory.WritableMemory srcMem, + long expectedSeed) +
      Wrap takes the sketch image in Memory and refers to it directly.
      +
      static UpdateSketchSketches.wrapUpdateSketch​(org.apache.datasketches.memory.WritableMemory srcMem) + +
      static UpdateSketchSketches.wrapUpdateSketch​(org.apache.datasketches.memory.WritableMemory srcMem, + long expectedSeed) + +
      + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.theta with parameters of type UpdateSketch 
      Modifier and TypeMethodDescription
      UpdateSketchUpdateSketchBuilder.buildLocal​(UpdateSketch shared) +
      Returns a local, on-heap, concurrent UpdateSketch to be used as a per-thread local buffer + along with the given concurrent shared UpdateSketch and the current configuration of this + Builder.
      +
      UpdateSketchUpdateSketchBuilder.buildSharedFromSketch​(UpdateSketch sketch, + org.apache.datasketches.memory.WritableMemory dstMem) +
      Returns a direct (potentially off-heap) concurrent shared UpdateSketch with the current + configuration of the Builder, the data from the given sketch, and the given destination + WritableMemory.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketchBuilder.html new file mode 100644 index 000000000..70e6bf301 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/class-use/UpdateSketchBuilder.html @@ -0,0 +1,276 @@ + + + + + +Uses of Class org.apache.datasketches.theta.UpdateSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.theta.UpdateSketchBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/package-summary.html b/docs/5.0.X/org/apache/datasketches/theta/package-summary.html new file mode 100644 index 000000000..e48cd8507 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/package-summary.html @@ -0,0 +1,277 @@ + + + + + +org.apache.datasketches.theta (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.theta

+
+
+
+ + +
The theta package contains the basic sketch classes that are members of the + Theta Sketch Framework. + +

There is a separate Tuple package for many of the sketches that are derived from the + same algorithms defined in the Theta Sketch Framework paper.

+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    HashIterator +
    This is used to iterate over the retained hash values of the Theta sketch.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AnotB +
    Computes a set difference, A-AND-NOT-B, of two theta sketches.
    +
    BitPacking 
    CompactSketch +
    The parent class of all the CompactSketches.
    +
    Intersection +
    The API for intersection operations
    +
    JaccardSimilarity +
    Jaccard similarity of two Theta Sketches.
    +
    SetOperation +
    The parent API for all Set Operations
    +
    SetOperationBuilder +
    For building a new SetOperation.
    +
    Sketch +
    The top-level class for all theta sketches.
    +
    Sketches +
    This class brings together the common sketch and set operation creation methods and + the public static methods into one place.
    +
    Union +
    Compute the union of two or more theta sketches.
    +
    UpdateSketch +
    The parent class for the Update Sketch families, such as QuickSelect and Alpha.
    +
    UpdateSketchBuilder +
    For building a new UpdateSketch.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    UpdateReturnState + +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/package-tree.html b/docs/5.0.X/org/apache/datasketches/theta/package-tree.html new file mode 100644 index 000000000..4ffb66f6b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/package-tree.html @@ -0,0 +1,201 @@ + + + + + +org.apache.datasketches.theta Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.theta

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/theta/package-use.html b/docs/5.0.X/org/apache/datasketches/theta/package-use.html new file mode 100644 index 000000000..5db472830 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/theta/package-use.html @@ -0,0 +1,302 @@ + + + + + +Uses of Package org.apache.datasketches.theta (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.theta

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/BinomialBoundsN.html b/docs/5.0.X/org/apache/datasketches/thetacommon/BinomialBoundsN.html new file mode 100644 index 000000000..cf63433db --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/BinomialBoundsN.html @@ -0,0 +1,333 @@ + + + + + +BinomialBoundsN (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BinomialBoundsN

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.thetacommon.BinomialBoundsN
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class BinomialBoundsN
    +extends Object
    +
    This class enables the estimation of error bounds given a sample set size, the sampling + probability theta, the number of standard deviations and a simple noDataSeen flag. This can + be used to estimate error bounds for fixed threshold sampling as well as the error bounds + calculations for sketches.
    +
    +
    Author:
    +
    Kevin Lang
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getLowerBound

        +
        public static double getLowerBound​(long numSamples,
        +                                   double theta,
        +                                   int numSDev,
        +                                   boolean noDataSeen)
        +
        Returns the approximate lower bound value
        +
        +
        Parameters:
        +
        numSamples - the number of samples in the sample set
        +
        theta - the sampling probability
        +
        numSDev - the number of "standard deviations" from the mean for the tail bounds. + This must be an integer value of 1, 2 or 3.
        +
        noDataSeen - this is normally false. However, in the case where you have zero samples + and a theta < 1.0, this flag enables the distinction between a virgin case when no actual + data has been seen and the case where the estimate may be zero but an upper error bound may + still exist.
        +
        Returns:
        +
        the approximate lower bound value
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public static double getUpperBound​(long numSamples,
        +                                   double theta,
        +                                   int numSDev,
        +                                   boolean noDataSeen)
        +
        Returns the approximate upper bound value
        +
        +
        Parameters:
        +
        numSamples - the number of samples in the sample set
        +
        theta - the sampling probability
        +
        numSDev - the number of "standard deviations" from the mean for the tail bounds. + This must be an integer value of 1, 2 or 3.
        +
        noDataSeen - this is normally false. However, in the case where you have zero samples + and a theta < 1.0, this flag enables the distinction between a virgin case when no actual + data has been seen and the case where the estimate may be zero but an upper error bound may + still exist.
        +
        Returns:
        +
        the approximate upper bound value
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInThetaSketchedSets.html b/docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInThetaSketchedSets.html new file mode 100644 index 000000000..3e89c63d9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInThetaSketchedSets.html @@ -0,0 +1,351 @@ + + + + + +BoundsOnRatiosInThetaSketchedSets (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BoundsOnRatiosInThetaSketchedSets

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.thetacommon.BoundsOnRatiosInThetaSketchedSets
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class BoundsOnRatiosInThetaSketchedSets
    +extends Object
    +
    This class is used to compute the bounds on the estimate of the ratio B / A, where: +
      +
    • A is a Theta Sketch of population PopA.
    • +
    • B is a Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Theta Sketch C, + which acts like a predicate or selection clause.
    • +
    • The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B).
    • +
    • The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B).
    • +
    • The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B).
    • +
    + Note: The theta of A cannot be greater than the theta of B. + If B is formed as an intersection of A and some other set C, + then the theta of B is guaranteed to be less than or equal to the theta of B.
    +
    +
    Author:
    +
    Kevin Lang, Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getLowerBoundForBoverA

        +
        public static double getLowerBoundForBoverA​(Sketch sketchA,
        +                                            Sketch sketchB)
        +
        Gets the approximate lower bound for B over A based on a 95% confidence interval
        +
        +
        Parameters:
        +
        sketchA - the sketch A
        +
        sketchB - the sketch B
        +
        Returns:
        +
        the approximate lower bound for B over A
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBoundForBoverA

        +
        public static double getUpperBoundForBoverA​(Sketch sketchA,
        +                                            Sketch sketchB)
        +
        Gets the approximate upper bound for B over A based on a 95% confidence interval
        +
        +
        Parameters:
        +
        sketchA - the sketch A
        +
        sketchB - the sketch B
        +
        Returns:
        +
        the approximate upper bound for B over A
        +
        +
      • +
      + + + +
        +
      • +

        getEstimateOfBoverA

        +
        public static double getEstimateOfBoverA​(Sketch sketchA,
        +                                         Sketch sketchB)
        +
        Gets the estimate for B over A
        +
        +
        Parameters:
        +
        sketchA - the sketch A
        +
        sketchB - the sketch B
        +
        Returns:
        +
        the estimate for B over A
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInTupleSketchedSets.html b/docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInTupleSketchedSets.html new file mode 100644 index 000000000..3670f2e25 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/BoundsOnRatiosInTupleSketchedSets.html @@ -0,0 +1,441 @@ + + + + + +BoundsOnRatiosInTupleSketchedSets (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BoundsOnRatiosInTupleSketchedSets

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class BoundsOnRatiosInTupleSketchedSets
    +extends Object
    +
    This class is used to compute the bounds on the estimate of the ratio B / A, where: +
      +
    • A is a Tuple Sketch of population PopA.
    • +
    • B is a Tuple or Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Tuple or Theta Sketch C, + which acts like a predicate or selection clause.
    • +
    • The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B).
    • +
    • The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B).
    • +
    • The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B).
    • +
    + Note: The theta of A cannot be greater than the theta of B. + If B is formed as an intersection of A and some other set C, + then the theta of B is guaranteed to be less than or equal to the theta of B.
    +
    +
    Author:
    +
    Kevin Lang, Lee Rhodes, David Cromberge
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getLowerBoundForBoverA

        +
        public static <S extends Summary> double getLowerBoundForBoverA​(Sketch<S> sketchA,
        +                                                                Sketch<S> sketchB)
        +
        Gets the approximate lower bound for B over A based on a 95% confidence interval
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - the Tuple sketch A with summary type S
        +
        sketchB - the Tuple sketch B with summary type S
        +
        Returns:
        +
        the approximate lower bound for B over A
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBoundForBoverA

        +
        public static <S extends Summary> double getLowerBoundForBoverA​(Sketch<S> sketchA,
        +                                                                Sketch sketchB)
        +
        Gets the approximate lower bound for B over A based on a 95% confidence interval
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - the Tuple sketch A with summary type S
        +
        sketchB - the Theta sketch B
        +
        Returns:
        +
        the approximate lower bound for B over A
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBoundForBoverA

        +
        public static <S extends Summary> double getUpperBoundForBoverA​(Sketch<S> sketchA,
        +                                                                Sketch<S> sketchB)
        +
        Gets the approximate upper bound for B over A based on a 95% confidence interval
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - the Tuple sketch A with summary type S
        +
        sketchB - the Tuple sketch B with summary type S
        +
        Returns:
        +
        the approximate upper bound for B over A
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBoundForBoverA

        +
        public static <S extends Summary> double getUpperBoundForBoverA​(Sketch<S> sketchA,
        +                                                                Sketch sketchB)
        +
        Gets the approximate upper bound for B over A based on a 95% confidence interval
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - the Tuple sketch A with summary type S
        +
        sketchB - the Theta sketch B
        +
        Returns:
        +
        the approximate upper bound for B over A
        +
        +
      • +
      + + + +
        +
      • +

        getEstimateOfBoverA

        +
        public static <S extends Summary> double getEstimateOfBoverA​(Sketch<S> sketchA,
        +                                                             Sketch<S> sketchB)
        +
        Gets the estimate for B over A
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - the Tuple sketch A with summary type S
        +
        sketchB - the Tuple sketch B with summary type S
        +
        Returns:
        +
        the estimate for B over A
        +
        +
      • +
      + + + +
        +
      • +

        getEstimateOfBoverA

        +
        public static <S extends Summary> double getEstimateOfBoverA​(Sketch<S> sketchA,
        +                                                             Sketch sketchB)
        +
        Gets the estimate for B over A
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - the Tuple sketch A with summary type S
        +
        sketchB - the Theta sketch B
        +
        Returns:
        +
        the estimate for B over A
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/HashOperations.html b/docs/5.0.X/org/apache/datasketches/thetacommon/HashOperations.html new file mode 100644 index 000000000..08896ee7e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/HashOperations.html @@ -0,0 +1,739 @@ + + + + + +HashOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class HashOperations

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.thetacommon.HashOperations
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class HashOperations
    +extends Object
    +
    Helper class for the common hash table methods.
    +
    +
    Author:
    +
    Lee Rhodes, Kevin Lang
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static intSTRIDE_MASK +
      The stride mask for the Open Address, Double Hashing (OADH) hash table algorithm.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static voidcheckHashCorruption​(long hash) 
      static voidcheckThetaCorruption​(long thetaLong) 
      static booleancontinueCondition​(long thetaLong, + long hash) +
      Return true (continue) if hash is greater than or equal to thetaLong, or if hash == 0, + or if hash == Long.MAX_VALUE.
      +
      static long[]convertToHashTable​(long[] hashArr, + int count, + long thetaLong, + double rebuildThreshold) +
      Converts the given array to a hash table.
      +
      static intcount​(long[] srcArr, + long thetaLong) +
      Counts the cardinality of the given source array.
      +
      static intcountPart​(long[] srcArr, + int lgArrLongs, + long thetaLong) +
      Counts the cardinality of the first Log2 values of the given source array.
      +
      static inthashArrayInsert​(long[] srcArr, + long[] hashTable, + int lgArrLongs, + long thetaLong) +
      Inserts the given long array into the given OADH hashTable of the target size, + ignores duplicates and counts the values inserted.
      +
      static inthashInsertOnly​(long[] hashTable, + int lgArrLongs, + long hash) +
      This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for on-heap.
      +
      static inthashInsertOnlyMemory​(org.apache.datasketches.memory.WritableMemory wmem, + int lgArrLongs, + long hash, + int memOffsetBytes) +
      This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for Memory.
      +
      static inthashSearch​(long[] hashTable, + int lgArrLongs, + long hash) +
      This is a classical Knuth-style Open Addressing, Double Hash (OADH) search scheme for on-heap.
      +
      static inthashSearchMemory​(org.apache.datasketches.memory.Memory mem, + int lgArrLongs, + long hash, + int memOffsetBytes) +
      This is a classical Knuth-style Open Addressing, Double Hash (OADH) search scheme for Memory.
      +
      static inthashSearchOrInsert​(long[] hashTable, + int lgArrLongs, + long hash) +
      This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for on-heap.
      +
      static inthashSearchOrInsertMemory​(org.apache.datasketches.memory.WritableMemory wmem, + int lgArrLongs, + long hash, + int memOffsetBytes) +
      This is a classical Knuth-style Open Addressing, Double Hash insert scheme, but inserts + values directly into a Memory.
      +
      static intminLgHashTableSize​(int count, + double rebuild_threshold) +
      Returns the smallest log hash table size given the count of items and the rebuild threshold.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        STRIDE_MASK

        +
        public static final int STRIDE_MASK
        +
        The stride mask for the Open Address, Double Hashing (OADH) hash table algorithm.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        hashSearch

        +
        public static int hashSearch​(long[] hashTable,
        +                             int lgArrLongs,
        +                             long hash)
        +
        This is a classical Knuth-style Open Addressing, Double Hash (OADH) search scheme for on-heap. + Returns the index if found, -1 if not found.
        +
        +
        Parameters:
        +
        hashTable - The hash table to search. Its size must be a power of 2.
        +
        lgArrLongs - The log_base2(hashTable.length). + See lgArrLongs.
        +
        hash - The hash value to search for. It must not be zero.
        +
        Returns:
        +
        Current probe index if found, -1 if not found.
        +
        +
      • +
      + + + +
        +
      • +

        hashInsertOnly

        +
        public static int hashInsertOnly​(long[] hashTable,
        +                                 int lgArrLongs,
        +                                 long hash)
        +
        This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for on-heap. + This method assumes that the input hash is not a duplicate. + Useful for rebuilding tables to avoid unnecessary comparisons. + Returns the index of insertion, which is always positive or zero. + Throws an exception if the table has no empty slot.
        +
        +
        Parameters:
        +
        hashTable - the hash table to insert into. Its size must be a power of 2.
        +
        lgArrLongs - The log_base2(hashTable.length). + See lgArrLongs.
        +
        hash - The hash value to be potentially inserted into an empty slot. It must not be zero.
        +
        Returns:
        +
        index of insertion. Always positive or zero.
        +
        +
      • +
      + + + +
        +
      • +

        hashSearchOrInsert

        +
        public static int hashSearchOrInsert​(long[] hashTable,
        +                                     int lgArrLongs,
        +                                     long hash)
        +
        This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for on-heap. + Returns index ≥ 0 if found (duplicate); < 0 if inserted, inserted at -(index + 1). + Throws an exception if the value is not found and table has no empty slot.
        +
        +
        Parameters:
        +
        hashTable - The hash table to insert into. Its size must be a power of 2.
        +
        lgArrLongs - The log_base2(hashTable.length). + See lgArrLongs.
        +
        hash - The hash value to be potentially inserted into an empty slot only if it is not + a duplicate of any other hash value in the table. It must not be zero.
        +
        Returns:
        +
        index ≥ 0 if found (duplicate); < 0 if inserted, inserted at -(index + 1).
        +
        +
      • +
      + + + +
        +
      • +

        hashArrayInsert

        +
        public static int hashArrayInsert​(long[] srcArr,
        +                                  long[] hashTable,
        +                                  int lgArrLongs,
        +                                  long thetaLong)
        +
        Inserts the given long array into the given OADH hashTable of the target size, + ignores duplicates and counts the values inserted. + The hash values must not be negative, zero values and values ≥ thetaLong are ignored. + The given hash table may have values, but they must have been inserted by this method or one + of the other OADH insert methods in this class. + This method performs additional checks against potentially invalid hash values or theta values. + Returns the count of values actually inserted.
        +
        +
        Parameters:
        +
        srcArr - the source hash array to be potentially inserted
        +
        hashTable - The hash table to insert into. Its size must be a power of 2.
        +
        lgArrLongs - The log_base2(hashTable.length). + See lgArrLongs.
        +
        thetaLong - The theta value that all input hash values are compared against. + It must greater than zero. + See Theta Long
        +
        Returns:
        +
        the count of values actually inserted
        +
        +
      • +
      + + + +
        +
      • +

        hashSearchMemory

        +
        public static int hashSearchMemory​(org.apache.datasketches.memory.Memory mem,
        +                                   int lgArrLongs,
        +                                   long hash,
        +                                   int memOffsetBytes)
        +
        This is a classical Knuth-style Open Addressing, Double Hash (OADH) search scheme for Memory. + Returns the index if found, -1 if not found.
        +
        +
        Parameters:
        +
        mem - The Memory containing the hash table to search. + The hash table portion must be a power of 2 in size.
        +
        lgArrLongs - The log_base2(hashTable.length). + See lgArrLongs.
        +
        hash - The hash value to search for. Must not be zero.
        +
        memOffsetBytes - offset in the memory where the hashTable starts
        +
        Returns:
        +
        Current probe index if found, -1 if not found.
        +
        +
      • +
      + + + +
        +
      • +

        hashInsertOnlyMemory

        +
        public static int hashInsertOnlyMemory​(org.apache.datasketches.memory.WritableMemory wmem,
        +                                       int lgArrLongs,
        +                                       long hash,
        +                                       int memOffsetBytes)
        +
        This is a classical Knuth-style Open Addressing, Double Hash (OADH) insert scheme for Memory. + This method assumes that the input hash is not a duplicate. + Useful for rebuilding tables to avoid unnecessary comparisons. + Returns the index of insertion, which is always positive or zero. + Throws an exception if table has no empty slot.
        +
        +
        Parameters:
        +
        wmem - The WritableMemory that contains the hashTable to insert into. + The size of the hashTable portion must be a power of 2.
        +
        lgArrLongs - The log_base2(hashTable.length. + See lgArrLongs.
        +
        hash - value that must not be zero and will be inserted into the array into an empty slot.
        +
        memOffsetBytes - offset in the WritableMemory where the hashTable starts
        +
        Returns:
        +
        index of insertion. Always positive or zero.
        +
        +
      • +
      + + + +
        +
      • +

        hashSearchOrInsertMemory

        +
        public static int hashSearchOrInsertMemory​(org.apache.datasketches.memory.WritableMemory wmem,
        +                                           int lgArrLongs,
        +                                           long hash,
        +                                           int memOffsetBytes)
        +
        This is a classical Knuth-style Open Addressing, Double Hash insert scheme, but inserts + values directly into a Memory. + Returns index ≥ 0 if found (duplicate); < 0 if inserted, inserted at -(index + 1). + Throws an exception if the value is not found and table has no empty slot.
        +
        +
        Parameters:
        +
        wmem - The WritableMemory that contains the hashTable to insert into.
        +
        lgArrLongs - The log_base2(hashTable.length). + See lgArrLongs.
        +
        hash - The hash value to be potentially inserted into an empty slot only if it is not + a duplicate of any other hash value in the table. It must not be zero.
        +
        memOffsetBytes - offset in the WritableMemory where the hash array starts
        +
        Returns:
        +
        index ≥ 0 if found (duplicate); < 0 if inserted, inserted at -(index + 1).
        +
        +
      • +
      + + + +
        +
      • +

        checkThetaCorruption

        +
        public static void checkThetaCorruption​(long thetaLong)
        +
        +
        Parameters:
        +
        thetaLong - must be greater than zero otherwise throws an exception. + See Theta Long
        +
        +
      • +
      + + + +
        +
      • +

        checkHashCorruption

        +
        public static void checkHashCorruption​(long hash)
        +
        +
        Parameters:
        +
        hash - must be greater than -1 otherwise throws an exception. + Note a hash of zero is normally ignored, but a negative hash is never allowed.
        +
        +
      • +
      + + + +
        +
      • +

        continueCondition

        +
        public static boolean continueCondition​(long thetaLong,
        +                                        long hash)
        +
        Return true (continue) if hash is greater than or equal to thetaLong, or if hash == 0, + or if hash == Long.MAX_VALUE.
        +
        +
        Parameters:
        +
        thetaLong - must be greater than the hash value + See Theta Long
        +
        hash - must be less than thetaLong and not less than or equal to zero.
        +
        Returns:
        +
        true (continue) if hash is greater than or equal to thetaLong, or if hash == 0, + or if hash == Long.MAX_VALUE.
        +
        +
      • +
      + + + +
        +
      • +

        convertToHashTable

        +
        public static long[] convertToHashTable​(long[] hashArr,
        +                                        int count,
        +                                        long thetaLong,
        +                                        double rebuildThreshold)
        +
        Converts the given array to a hash table.
        +
        +
        Parameters:
        +
        hashArr - The given array of hashes. Gaps are OK.
        +
        count - The number of valid hashes in the array
        +
        thetaLong - Any hashes equal to or greater than thetaLong will be ignored
        +
        rebuildThreshold - The fill fraction for the hash table forcing a rebuild or resize.
        +
        Returns:
        +
        a HashTable
        +
        +
      • +
      + + + +
        +
      • +

        minLgHashTableSize

        +
        public static int minLgHashTableSize​(int count,
        +                                     double rebuild_threshold)
        +
        Returns the smallest log hash table size given the count of items and the rebuild threshold.
        +
        +
        Parameters:
        +
        count - the given count of items
        +
        rebuild_threshold - the rebuild threshold as a fraction between zero and one.
        +
        Returns:
        +
        the smallest log hash table size
        +
        +
      • +
      + + + +
        +
      • +

        countPart

        +
        public static int countPart​(long[] srcArr,
        +                            int lgArrLongs,
        +                            long thetaLong)
        +
        Counts the cardinality of the first Log2 values of the given source array.
        +
        +
        Parameters:
        +
        srcArr - the given source array
        +
        lgArrLongs - See lgArrLongs
        +
        thetaLong - See Theta Long
        +
        Returns:
        +
        the cardinality
        +
        +
      • +
      + + + +
        +
      • +

        count

        +
        public static int count​(long[] srcArr,
        +                        long thetaLong)
        +
        Counts the cardinality of the given source array.
        +
        +
        Parameters:
        +
        srcArr - the given source array
        +
        thetaLong - See Theta Long
        +
        Returns:
        +
        the cardinality
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/QuickSelect.html b/docs/5.0.X/org/apache/datasketches/thetacommon/QuickSelect.html new file mode 100644 index 000000000..d820866e2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/QuickSelect.html @@ -0,0 +1,459 @@ + + + + + +QuickSelect (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class QuickSelect

+
+
+ +
+
    +
  • +
    +
    public final class QuickSelect
    +extends Object
    +
    QuickSelect algorithm improved from Sedgewick. Gets the kth order value + (1-based or 0-based) from the array. + Warning! This changes the ordering of elements in the given array!
    + Also see:
    + blog.teamleadnet.com/2012/07/quick-select-algorithm-find-kth-element.html
    + See QuickSelectTest for examples and testNG tests.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static doubleselect​(double[] arr, + int lo, + int hi, + int pivot) +
      Gets the 0-based kth order statistic from the array.
      +
      static longselect​(long[] arr, + int lo, + int hi, + int pivot) +
      Gets the 0-based kth order statistic from the array.
      +
      static doubleselectExcludingZeros​(double[] arr, + int nonZeros, + int pivot) +
      Gets the 1-based kth order statistic from the array excluding any zero values in the + array.
      +
      static longselectExcludingZeros​(long[] arr, + int nonZeros, + int pivot) +
      Gets the 1-based kth order statistic from the array excluding any zero values in the + array.
      +
      static doubleselectIncludingZeros​(double[] arr, + int pivot) +
      Gets the 1-based kth order statistic from the array including any zero values in the + array.
      +
      static longselectIncludingZeros​(long[] arr, + int pivot) +
      Gets the 1-based kth order statistic from the array including any zero values in the + array.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        select

        +
        public static long select​(long[] arr,
        +                          int lo,
        +                          int hi,
        +                          int pivot)
        +
        Gets the 0-based kth order statistic from the array. Warning! This changes the ordering + of elements in the given array!
        +
        +
        Parameters:
        +
        arr - The array to be re-arranged.
        +
        lo - The lowest 0-based index to be considered.
        +
        hi - The highest 0-based index to be considered.
        +
        pivot - The 0-based index of the value to pivot on.
        +
        Returns:
        +
        The value of the smallest (n)th element where n is 0-based.
        +
        +
      • +
      + + + +
        +
      • +

        selectIncludingZeros

        +
        public static long selectIncludingZeros​(long[] arr,
        +                                        int pivot)
        +
        Gets the 1-based kth order statistic from the array including any zero values in the + array. Warning! This changes the ordering of elements in the given array!
        +
        +
        Parameters:
        +
        arr - The hash array.
        +
        pivot - The 1-based index of the value that is chosen as the pivot for the array. + After the operation all values below this 1-based index will be less than this value + and all values above this index will be greater. The 0-based index of the pivot will be + pivot-1.
        +
        Returns:
        +
        The value of the smallest (N)th element including zeros, where N is 1-based.
        +
        +
      • +
      + + + +
        +
      • +

        selectExcludingZeros

        +
        public static long selectExcludingZeros​(long[] arr,
        +                                        int nonZeros,
        +                                        int pivot)
        +
        Gets the 1-based kth order statistic from the array excluding any zero values in the + array. Warning! This changes the ordering of elements in the given array!
        +
        +
        Parameters:
        +
        arr - The hash array.
        +
        nonZeros - The number of non-zero values in the array.
        +
        pivot - The 1-based index of the value that is chosen as the pivot for the array. + After the operation all values below this 1-based index will be less than this value + and all values above this index will be greater. The 0-based index of the pivot will be + pivot+arr.length-nonZeros-1.
        +
        Returns:
        +
        The value of the smallest (N)th element excluding zeros, where N is 1-based.
        +
        +
      • +
      + + + +
        +
      • +

        select

        +
        public static double select​(double[] arr,
        +                            int lo,
        +                            int hi,
        +                            int pivot)
        +
        Gets the 0-based kth order statistic from the array. Warning! This changes the ordering + of elements in the given array!
        +
        +
        Parameters:
        +
        arr - The array to be re-arranged.
        +
        lo - The lowest 0-based index to be considered.
        +
        hi - The highest 0-based index to be considered.
        +
        pivot - The 0-based smallest value to pivot on.
        +
        Returns:
        +
        The value of the smallest (n)th element where n is 0-based.
        +
        +
      • +
      + + + +
        +
      • +

        selectIncludingZeros

        +
        public static double selectIncludingZeros​(double[] arr,
        +                                          int pivot)
        +
        Gets the 1-based kth order statistic from the array including any zero values in the + array. Warning! This changes the ordering of elements in the given array!
        +
        +
        Parameters:
        +
        arr - The hash array.
        +
        pivot - The 1-based index of the value that is chosen as the pivot for the array. + After the operation all values below this 1-based index will be less than this value + and all values above this index will be greater. The 0-based index of the pivot will be + pivot-1.
        +
        Returns:
        +
        The value of the smallest (N)th element including zeros, where N is 1-based.
        +
        +
      • +
      + + + +
        +
      • +

        selectExcludingZeros

        +
        public static double selectExcludingZeros​(double[] arr,
        +                                          int nonZeros,
        +                                          int pivot)
        +
        Gets the 1-based kth order statistic from the array excluding any zero values in the + array. Warning! This changes the ordering of elements in the given array!
        +
        +
        Parameters:
        +
        arr - The hash array.
        +
        nonZeros - The number of non-zero values in the array.
        +
        pivot - The 1-based index of the value that is chosen as the pivot for the array. + After the operation all values below this 1-based index will be less than this value + and all values above this index will be greater. The 0-based index of the pivot will be + pivot+arr.length-nonZeros-1.
        +
        Returns:
        +
        The value of the smallest (N)th element excluding zeros, where N is 1-based.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.AnotbAction.html b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.AnotbAction.html new file mode 100644 index 000000000..faaee16ff --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.AnotbAction.html @@ -0,0 +1,463 @@ + + + + + +SetOperationCornerCases.AnotbAction (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum SetOperationCornerCases.AnotbAction

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.CornerCase.html b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.CornerCase.html new file mode 100644 index 000000000..b063f53d9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.CornerCase.html @@ -0,0 +1,649 @@ + + + + + +SetOperationCornerCases.CornerCase (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum SetOperationCornerCases.CornerCase

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.IntersectAction.html b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.IntersectAction.html new file mode 100644 index 000000000..15571a099 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.IntersectAction.html @@ -0,0 +1,424 @@ + + + + + +SetOperationCornerCases.IntersectAction (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum SetOperationCornerCases.IntersectAction

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static SetOperationCornerCases.IntersectAction[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (SetOperationCornerCases.IntersectAction c : SetOperationCornerCases.IntersectAction.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static SetOperationCornerCases.IntersectAction valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getActionId

        +
        public String getActionId()
        +
      • +
      + + + +
        +
      • +

        getActionDescription

        +
        public String getActionDescription()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.UnionAction.html b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.UnionAction.html new file mode 100644 index 000000000..7f84acf38 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.UnionAction.html @@ -0,0 +1,502 @@ + + + + + +SetOperationCornerCases.UnionAction (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum SetOperationCornerCases.UnionAction

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.html b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.html new file mode 100644 index 000000000..fcc822809 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/SetOperationCornerCases.html @@ -0,0 +1,378 @@ + + + + + +SetOperationCornerCases (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SetOperationCornerCases

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.thetacommon.SetOperationCornerCases
    • +
    +
  • +
+
+
    +
  • +
    +
    public class SetOperationCornerCases
    +extends Object
    +
    Simplifies and speeds up set operations by resolving specific corner cases.
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SetOperationCornerCases

        +
        public SetOperationCornerCases()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        createCornerCaseId

        +
        public static int createCornerCaseId​(long thetaLongA,
        +                                     int countA,
        +                                     boolean emptyA,
        +                                     long thetaLongB,
        +                                     int countB,
        +                                     boolean emptyB)
        +
      • +
      + + + +
        +
      • +

        sketchStateId

        +
        public static int sketchStateId​(boolean isEmpty,
        +                                int numRetained,
        +                                long thetaLong)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/ThetaUtil.html b/docs/5.0.X/org/apache/datasketches/thetacommon/ThetaUtil.html new file mode 100644 index 000000000..85f526a98 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/ThetaUtil.html @@ -0,0 +1,565 @@ + + + + + +ThetaUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ThetaUtil

+
+
+ +
+
    +
  • +
    +
    public final class ThetaUtil
    +extends Object
    +
    Utility methods for the Theta Family of sketches
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static intDEFAULT_NOMINAL_ENTRIES +
      The default nominal entries is provided as a convenience for those cases where the + nominal sketch size in number of entries is not provided.
      +
      static longDEFAULT_UPDATE_SEED +
      The seed 9001 used in the sketch update methods is a prime number that + was chosen very early on in experimental testing.
      +
      static intMAX_LG_NOM_LONGS +
      The largest Log2 nom entries allowed: 26.
      +
      static intMIN_LG_ARR_LONGS +
      The smallest Log2 cache size allowed: 5.
      +
      static intMIN_LG_NOM_LONGS +
      The smallest Log2 nom entries allowed: 4.
      +
      static doubleREBUILD_THRESHOLD +
      The hash table rebuild threshold = 15.0/16.0.
      +
      static doubleRESIZE_THRESHOLD +
      The resize threshold = 0.5; tuned for speed.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static intcheckNomLongs​(int nomLongs) +
      Checks that the given nomLongs is within bounds and returns the Log2 of the ceiling power of 2 + of the given nomLongs.
      +
      static shortcheckSeedHashes​(short seedHashA, + short seedHashB) +
      Check if the two seed hashes are equal.
      +
      static shortcomputeSeedHash​(long seed) +
      Computes and checks the 16-bit seed hash from the given long seed.
      +
      static intstartingSubMultiple​(int lgTarget, + int lgRF, + int lgMin) +
      Gets the smallest allowed exponent of 2 that it is a sub-multiple of the target by zero, + one or more resize factors.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        MIN_LG_NOM_LONGS

        +
        public static final int MIN_LG_NOM_LONGS
        +
        The smallest Log2 nom entries allowed: 4.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        MAX_LG_NOM_LONGS

        +
        public static final int MAX_LG_NOM_LONGS
        +
        The largest Log2 nom entries allowed: 26.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        REBUILD_THRESHOLD

        +
        public static final double REBUILD_THRESHOLD
        +
        The hash table rebuild threshold = 15.0/16.0.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        RESIZE_THRESHOLD

        +
        public static final double RESIZE_THRESHOLD
        +
        The resize threshold = 0.5; tuned for speed.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_NOMINAL_ENTRIES

        +
        public static final int DEFAULT_NOMINAL_ENTRIES
        +
        The default nominal entries is provided as a convenience for those cases where the + nominal sketch size in number of entries is not provided. + A sketch of 4096 entries has a Relative Standard Error (RSE) of +/- 1.56% at a confidence of + 68%; or equivalently, a Relative Error of +/- 3.1% at a confidence of 95.4%. + See Default Nominal Entries
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_UPDATE_SEED

        +
        public static final long DEFAULT_UPDATE_SEED
        +
        The seed 9001 used in the sketch update methods is a prime number that + was chosen very early on in experimental testing. Choosing a seed is somewhat arbitrary, and + the author cannot prove that this particular seed is somehow superior to other seeds. There + was some early Internet discussion that a seed of 0 did not produce as clean avalanche diagrams + as non-zero seeds, but this may have been more related to the MurmurHash2 release, which did + have some issues. As far as the author can determine, MurmurHash3 does not have these problems. + +

        In order to perform set operations on two sketches it is critical that the same hash + function and seed are identical for both sketches, otherwise the assumed 1:1 relationship + between the original source key value and the hashed bit string would be violated. Once + you have developed a history of stored sketches you are stuck with it. + +

        WARNING: This seed is used internally by library sketches in different + packages and thus must be declared public. However, this seed value must not be used by library + users with the MurmurHash3 function. It should be viewed as existing for exclusive, private + use by the library. + +

        See Default Update Seed

        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        MIN_LG_ARR_LONGS

        +
        public static final int MIN_LG_ARR_LONGS
        +
        The smallest Log2 cache size allowed: 5.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        checkSeedHashes

        +
        public static short checkSeedHashes​(short seedHashA,
        +                                    short seedHashB)
        +
        Check if the two seed hashes are equal. If not, throw an SketchesArgumentException.
        +
        +
        Parameters:
        +
        seedHashA - the seedHash A
        +
        seedHashB - the seedHash B
        +
        Returns:
        +
        seedHashA if they are equal
        +
        +
      • +
      + + + +
        +
      • +

        computeSeedHash

        +
        public static short computeSeedHash​(long seed)
        +
        Computes and checks the 16-bit seed hash from the given long seed. + The seed hash may not be zero in order to maintain compatibility with older serialized + versions that did not have this concept.
        +
        +
        Parameters:
        +
        seed - See Update Hash Seed
        +
        Returns:
        +
        the seed hash.
        +
        +
      • +
      + + + +
        +
      • +

        startingSubMultiple

        +
        public static int startingSubMultiple​(int lgTarget,
        +                                      int lgRF,
        +                                      int lgMin)
        +
        Gets the smallest allowed exponent of 2 that it is a sub-multiple of the target by zero, + one or more resize factors.
        +
        +
        Parameters:
        +
        lgTarget - Log2 of the target size
        +
        lgRF - Log_base2 of Resize Factor. + See Resize Factor
        +
        lgMin - Log2 of the minimum allowed starting size
        +
        Returns:
        +
        The Log2 of the starting size
        +
        +
      • +
      + + + +
        +
      • +

        checkNomLongs

        +
        public static int checkNomLongs​(int nomLongs)
        +
        Checks that the given nomLongs is within bounds and returns the Log2 of the ceiling power of 2 + of the given nomLongs.
        +
        +
        Parameters:
        +
        nomLongs - the given number of nominal longs. This can be any value from 16 to + 67108864, inclusive.
        +
        Returns:
        +
        The Log2 of the ceiling power of 2 of the given nomLongs.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BinomialBoundsN.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BinomialBoundsN.html new file mode 100644 index 000000000..47faf099c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BinomialBoundsN.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.BinomialBoundsN (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.BinomialBoundsN

+
+
No usage of org.apache.datasketches.thetacommon.BinomialBoundsN
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInThetaSketchedSets.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInThetaSketchedSets.html new file mode 100644 index 000000000..e31d52213 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInThetaSketchedSets.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.BoundsOnRatiosInThetaSketchedSets (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.BoundsOnRatiosInThetaSketchedSets

+
+
No usage of org.apache.datasketches.thetacommon.BoundsOnRatiosInThetaSketchedSets
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInTupleSketchedSets.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInTupleSketchedSets.html new file mode 100644 index 000000000..0453a0af0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/BoundsOnRatiosInTupleSketchedSets.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets

+
+
No usage of org.apache.datasketches.thetacommon.BoundsOnRatiosInTupleSketchedSets
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/HashOperations.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/HashOperations.html new file mode 100644 index 000000000..a9510bb90 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/HashOperations.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.HashOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.HashOperations

+
+
No usage of org.apache.datasketches.thetacommon.HashOperations
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/QuickSelect.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/QuickSelect.html new file mode 100644 index 000000000..0384686a6 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/QuickSelect.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.QuickSelect (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.QuickSelect

+
+
No usage of org.apache.datasketches.thetacommon.QuickSelect
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.AnotbAction.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.AnotbAction.html new file mode 100644 index 000000000..5a88154d1 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.AnotbAction.html @@ -0,0 +1,211 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.SetOperationCornerCases.AnotbAction

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.CornerCase.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.CornerCase.html new file mode 100644 index 000000000..2fcd7408b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.CornerCase.html @@ -0,0 +1,211 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.SetOperationCornerCases.CornerCase

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.IntersectAction.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.IntersectAction.html new file mode 100644 index 000000000..5505c97bb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.IntersectAction.html @@ -0,0 +1,211 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.SetOperationCornerCases.IntersectAction

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.UnionAction.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.UnionAction.html new file mode 100644 index 000000000..ad180b4a2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.UnionAction.html @@ -0,0 +1,211 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.SetOperationCornerCases.UnionAction

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.html new file mode 100644 index 000000000..e7feb71e7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/SetOperationCornerCases.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.SetOperationCornerCases (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.SetOperationCornerCases

+
+
No usage of org.apache.datasketches.thetacommon.SetOperationCornerCases
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/ThetaUtil.html b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/ThetaUtil.html new file mode 100644 index 000000000..55fd6e5fe --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/class-use/ThetaUtil.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.thetacommon.ThetaUtil (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.thetacommon.ThetaUtil

+
+
No usage of org.apache.datasketches.thetacommon.ThetaUtil
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/package-summary.html b/docs/5.0.X/org/apache/datasketches/thetacommon/package-summary.html new file mode 100644 index 000000000..977ba2e67 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/package-summary.html @@ -0,0 +1,265 @@ + + + + + +org.apache.datasketches.thetacommon (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.thetacommon

+
+
+
+ + +
This package contains common tools and methods for the theta, + tuple, tuple/* and fdt packages.
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    BinomialBoundsN +
    This class enables the estimation of error bounds given a sample set size, the sampling + probability theta, the number of standard deviations and a simple noDataSeen flag.
    +
    BoundsOnRatiosInThetaSketchedSets +
    This class is used to compute the bounds on the estimate of the ratio B / A, where: + + A is a Theta Sketch of population PopA. + B is a Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Theta Sketch C, + which acts like a predicate or selection clause. + The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B). + The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B). + The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B). + + Note: The theta of A cannot be greater than the theta of B.
    +
    BoundsOnRatiosInTupleSketchedSets +
    This class is used to compute the bounds on the estimate of the ratio B / A, where: + + A is a Tuple Sketch of population PopA. + B is a Tuple or Theta Sketch of population PopB that is a subset of A, + obtained by an intersection of A with some other Tuple or Theta Sketch C, + which acts like a predicate or selection clause. + The estimate of the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getEstimateOfBoverA(A, B). + The Upper Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getUpperBoundForBoverA(A, B). + The Lower Bound estimate on the ratio PopB/PopA is + BoundsOnRatiosInThetaSketchedSets.getLowerBoundForBoverA(A, B). + + Note: The theta of A cannot be greater than the theta of B.
    +
    HashOperations +
    Helper class for the common hash table methods.
    +
    QuickSelect +
    QuickSelect algorithm improved from Sedgewick.
    +
    SetOperationCornerCases +
    Simplifies and speeds up set operations by resolving specific corner cases.
    +
    ThetaUtil +
    Utility methods for the Theta Family of sketches
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    SetOperationCornerCases.AnotbAction 
    SetOperationCornerCases.CornerCase 
    SetOperationCornerCases.IntersectAction 
    SetOperationCornerCases.UnionAction 
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/package-tree.html b/docs/5.0.X/org/apache/datasketches/thetacommon/package-tree.html new file mode 100644 index 000000000..a9d615480 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/package-tree.html @@ -0,0 +1,187 @@ + + + + + +org.apache.datasketches.thetacommon Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.thetacommon

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/thetacommon/package-use.html b/docs/5.0.X/org/apache/datasketches/thetacommon/package-use.html new file mode 100644 index 000000000..c0dbff5dc --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/thetacommon/package-use.html @@ -0,0 +1,199 @@ + + + + + +Uses of Package org.apache.datasketches.thetacommon (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.thetacommon

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/AnotB.html b/docs/5.0.X/org/apache/datasketches/tuple/AnotB.html new file mode 100644 index 000000000..2ee616e4d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/AnotB.html @@ -0,0 +1,571 @@ + + + + + +AnotB (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AnotB<S extends Summary>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    S - Type of Summary
    +
    +
    +
    public final class AnotB<S extends Summary>
    +extends Object
    +
    Computes a set difference, A-AND-NOT-B, of two generic tuple sketches. + This class includes both stateful and stateless operations. + +

    The stateful operation is as follows:

    +
    
    + AnotB anotb = new AnotB();
    +
    + anotb.setA(Sketch skA); //The first argument.
    + anotb.notB(Sketch skB); //The second (subtraction) argument.
    + anotb.notB(Sketch skC); // ...any number of additional subtractions...
    + anotb.getResult(false); //Get an interim result.
    + anotb.notB(Sketch skD); //Additional subtractions.
    + anotb.getResult(true);  //Final result and resets the AnotB operator.
    + 
    + +

    The stateless operation is as follows:

    +
    
    + AnotB anotb = new AnotB();
    +
    + CompactSketch csk = anotb.aNotB(Sketch skA, Sketch skB);
    + 
    + +

    Calling the setA operation a second time essentially clears the internal state and loads + the new sketch.

    + +

    The stateless and stateful operations are independent of each other.

    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AnotB

        +
        public AnotB()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setA

        +
        public void setA​(Sketch<S> skA)
        +
        This is part of a multistep, stateful AnotB operation and sets the given Tuple sketch as the + first argument A of A-AND-NOT-B. This overwrites the internal state of this + AnotB operator with the contents of the given sketch. + This sets the stage for multiple following notB steps. + +

        An input argument of null will throw an exception.

        + +

        Rationale: In mathematics a "null set" is a set with no members, which we call an empty set. + That is distinctly different from the java null, which represents a nonexistent object. + In most cases it is a programming error due to some object that was not properly initialized. + With a null as the first argument, we cannot know what the user's intent is. + Since it is very likely that a null is a programming error, we throw a an exception.

        + +

        An empty input argument will set the internal state to empty.

        + +

        Rationale: An empty set is a mathematically legal concept. Although it makes any subsequent, + valid argument for B irrelevant, we must allow this and assume the user knows what they are + doing.

        + +

        Performing getResult(boolean) just after this step will return a compact form of + the given argument.

        +
        +
        Parameters:
        +
        skA - The incoming sketch for the first argument, A.
        +
        +
      • +
      + + + +
        +
      • +

        notB

        +
        public void notB​(Sketch<S> skB)
        +
        This is part of a multistep, stateful AnotB operation and sets the given Tuple sketch as the + second (or n+1th) argument B of A-AND-NOT-B. + Performs an AND NOT operation with the existing internal state of this AnotB operator. + +

        An input argument of null or empty is ignored.

        + +

        Rationale: A null for the second or following arguments is more tolerable because + A NOT null is still A even if we don't know exactly what the null represents. It + clearly does not have any content that overlaps with A. Also, because this can be part of + a multistep operation with multiple notB steps. Other following steps can still produce + a valid result.

        + +

        Use getResult(boolean) to obtain the result.

        +
        +
        Parameters:
        +
        skB - The incoming Tuple sketch for the second (or following) argument B.
        +
        +
      • +
      + + + +
        +
      • +

        notB

        +
        public void notB​(Sketch skB)
        +
        This is part of a multistep, stateful AnotB operation and sets the given Theta sketch as the + second (or n+1th) argument B of A-AND-NOT-B. + Performs an AND NOT operation with the existing internal state of this AnotB operator. + Calls to this method can be intermingled with calls to + notB(org.apache.datasketches.theta.Sketch). + +

        An input argument of null or empty is ignored.

        + +

        Rationale: A null for the second or following arguments is more tolerable because + A NOT null is still A even if we don't know exactly what the null represents. It + clearly does not have any content that overlaps with A. Also, because this can be part of + a multistep operation with multiple notB steps. Other following steps can still produce + a valid result.

        + +

        Use getResult(boolean) to obtain the result.

        +
        +
        Parameters:
        +
        skB - The incoming Theta sketch for the second (or following) argument B.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public CompactSketch<S> getResult​(boolean reset)
        +
        Gets the result of the multistep, stateful operation AnotB that have been executed with calls + to setA(Sketch) and (notB(Sketch) or + notB(org.apache.datasketches.theta.Sketch)).
        +
        +
        Parameters:
        +
        reset - If true, clears this operator to the empty state after this result is + returned. Set this to false if you wish to obtain an intermediate result.
        +
        Returns:
        +
        the result of this operation as an unordered CompactSketch.
        +
        +
      • +
      + + + +
        +
      • +

        aNotB

        +
        public static <S extends SummaryCompactSketch<S> aNotB​(Sketch<S> skA,
        +                                                         Sketch<S> skB)
        +
        Returns the A-and-not-B set operation on the two given Tuple sketches. + +

        This a stateless operation and has no impact on the internal state of this operator. + Thus, this is not an accumulating update and is independent of the setA(Sketch), + notB(Sketch), notB(org.apache.datasketches.theta.Sketch), and + getResult(boolean) methods.

        + +

        If either argument is null an exception is thrown.

        + +

        Rationale: In mathematics a "null set" is a set with no members, which we call an empty set. + That is distinctly different from the java null, which represents a nonexistent object. + In most cases it is a programming error due to some object that was not properly initialized. + With a null as the first argument, we cannot know what the user's intent is. + With a null as the second argument, we can't ignore it as we must return a result and there is + no following possible viable arguments for the second argument. + Since it is very likely that a null is a programming error, we throw an exception.

        +
        +
        Type Parameters:
        +
        S - Type of Summary
        +
        Parameters:
        +
        skA - The incoming Tuple sketch for the first argument
        +
        skB - The incoming Tuple sketch for the second argument
        +
        Returns:
        +
        the result as an unordered CompactSketch
        +
        +
      • +
      + + + +
        +
      • +

        aNotB

        +
        public static <S extends SummaryCompactSketch<S> aNotB​(Sketch<S> skA,
        +                                                         Sketch skB)
        +
        Returns the A-and-not-B set operation on a Tuple sketch and a Theta sketch. + +

        This a stateless operation and has no impact on the internal state of this operator. + Thus, this is not an accumulating update and is independent of the setA(Sketch), + notB(Sketch), notB(org.apache.datasketches.theta.Sketch), and + getResult(boolean) methods.

        + +

        If either argument is null an exception is thrown.

        + +

        Rationale: In mathematics a "null set" is a set with no members, which we call an empty set. + That is distinctly different from the java null, which represents a nonexistent object. + In most cases it is a programming error due to some object that was not properly initialized. + With a null as the first argument, we cannot know what the user's intent is. + With a null as the second argument, we can't ignore it as we must return a result and there is + no following possible viable arguments for the second argument. + Since it is very likely that a null is a programming error for either argument + we throw a an exception.

        +
        +
        Type Parameters:
        +
        S - Type of Summary
        +
        Parameters:
        +
        skA - The incoming Tuple sketch for the first argument
        +
        skB - The incoming Theta sketch for the second argument
        +
        Returns:
        +
        the result as an unordered CompactSketch
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this operation back to the empty state.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/CompactSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/CompactSketch.html new file mode 100644 index 000000000..fd818598d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/CompactSketch.html @@ -0,0 +1,416 @@ + + + + + +CompactSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CompactSketch<S extends Summary>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    S - type of Summary
    +
    +
    +
    public final class CompactSketch<S extends Summary>
    +extends Sketch<S>
    +
    CompactSketches are never created directly. They are created as a result of + the compact() method of an UpdatableSketch or as a result of the getResult() + method of a set operation like Union, Intersection or AnotB. CompactSketch + consists of a compact list (i.e. no intervening spaces) of hash values, + corresponding list of Summaries, and a value for theta. The lists may or may + not be ordered. CompactSketch is read-only.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        compact

        +
        public CompactSketch<S> compact()
        +
        Description copied from class: Sketch
        +
        Converts this sketch to a CompactSketch on the Java heap. + +

        If this sketch is already in compact form this operation returns this.

        +
        +
        Specified by:
        +
        compact in class Sketch<S extends Summary>
        +
        Returns:
        +
        this sketch as a CompactSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public int getRetainedEntries()
        +
        +
        Specified by:
        +
        getRetainedEntries in class Sketch<S extends Summary>
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public int getCountLessThanThetaLong​(long thetaLong)
        +
        Description copied from class: Sketch
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Specified by:
        +
        getCountLessThanThetaLong in class Sketch<S extends Summary>
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from class: Sketch
        +
        This is to serialize a sketch instance to a byte array. + +

        As of 3.0.0, serializing an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Serializing a CompactSketch is not deprecated.

        +
        +
        Specified by:
        +
        toByteArray in class Sketch<S extends Summary>
        +
        Returns:
        +
        serialized representation of the sketch
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/DeserializeResult.html b/docs/5.0.X/org/apache/datasketches/tuple/DeserializeResult.html new file mode 100644 index 000000000..fd1109411 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/DeserializeResult.html @@ -0,0 +1,346 @@ + + + + + +DeserializeResult (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DeserializeResult<T>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.DeserializeResult<T>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - Type of object
    +
    +
    +
    public class DeserializeResult<T>
    +extends Object
    +
    Returns an object and its size in bytes as a result of a deserialize operation
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + + + +
        +
      • +

        DeserializeResult

        +
        public DeserializeResult​(T object,
        +                         int size)
        +
        Creates an instance.
        +
        +
        Parameters:
        +
        object - Deserialized object.
        +
        size - Deserialized size in bytes.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getObject

        +
        public T getObject()
        +
        +
        Returns:
        +
        Deserialized object
        +
        +
      • +
      + + + +
        +
      • +

        getSize

        +
        public int getSize()
        +
        +
        Returns:
        +
        Size in bytes occupied by the object in the serialized form
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/Filter.html b/docs/5.0.X/org/apache/datasketches/tuple/Filter.html new file mode 100644 index 000000000..af9ab4e8b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/Filter.html @@ -0,0 +1,330 @@ + + + + + +Filter (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Filter<T extends Summary>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    T - Summary type against which apply the Predicate
    +
    +
    +
    public class Filter<T extends Summary>
    +extends Object
    +
    Class for filtering entries from a Sketch given a Summary
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Filter

        +
        public Filter​(Predicate<T> predicate)
        +
        Filter constructor with a Predicate
        +
        +
        Parameters:
        +
        predicate - Predicate to use in this filter. If the Predicate returns False, the + element is discarded. If the Predicate returns True, then the element is kept in the + Sketch
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        filter

        +
        public CompactSketch<T> filter​(Sketch<T> sketchIn)
        +
        Filters elements on the provided Sketch
        +
        +
        Parameters:
        +
        sketchIn - The sketch against which apply the Predicate
        +
        Returns:
        +
        A new Sketch with some of the entries filtered out based on the Predicate
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/Intersection.html b/docs/5.0.X/org/apache/datasketches/tuple/Intersection.html new file mode 100644 index 000000000..c4fcd4d02 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/Intersection.html @@ -0,0 +1,485 @@ + + + + + +Intersection (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Intersection<S extends Summary>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    S - Type of Summary
    +
    +
    +
    public class Intersection<S extends Summary>
    +extends Object
    +
    Computes an intersection of two or more generic tuple sketches or generic tuple sketches + combined with theta sketches. + A new instance represents the Universal Set. Because the Universal Set + cannot be realized a getResult() on a new instance will produce an error. + Every update() computes an intersection with the internal state, which will never + grow larger and may be reduced to zero.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Intersection​(SummarySetOperations<S> summarySetOps) +
      Creates new Intersection instance with instructions on how to process two summaries that + intersect.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      CompactSketch<S>getResult() +
      Gets the internal set as an unordered CompactSketch
      +
      booleanhasResult() +
      Returns true if there is a valid intersection result available
      +
      voidintersect​(Sketch thetaSketch, + S summary) +
      Performs a stateful intersection of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary and rules + from the summarySetOps defined by the Intersection constructor.
      +
      voidintersect​(Sketch<S> tupleSketch) +
      Performs a stateful intersection of the internal set with the given tupleSketch.
      +
      CompactSketch<S>intersect​(Sketch<S> tupleSketch, + Sketch thetaSketch, + S summary) +
      Perform a stateless intersect set operation on a tuple sketch and a theta sketch and returns the + result as an unordered CompactSketch on the heap.
      +
      CompactSketch<S>intersect​(Sketch<S> tupleSketchA, + Sketch<S> tupleSketchB) +
      Perform a stateless intersect set operation on the two given tuple sketches and returns the + result as an unordered CompactSketch on the heap.
      +
      voidreset() +
      Resets the internal set to the initial state, which represents the Universal Set
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Intersection

        +
        public Intersection​(SummarySetOperations<S> summarySetOps)
        +
        Creates new Intersection instance with instructions on how to process two summaries that + intersect.
        +
        +
        Parameters:
        +
        summarySetOps - instance of SummarySetOperations
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        intersect

        +
        public CompactSketch<S> intersect​(Sketch<S> tupleSketchA,
        +                                  Sketch<S> tupleSketchB)
        +
        Perform a stateless intersect set operation on the two given tuple sketches and returns the + result as an unordered CompactSketch on the heap.
        +
        +
        Parameters:
        +
        tupleSketchA - The first sketch argument. It must not be null.
        +
        tupleSketchB - The second sketch argument. It must not be null.
        +
        Returns:
        +
        an unordered CompactSketch on the heap
        +
        +
      • +
      + + + + + +
        +
      • +

        intersect

        +
        public CompactSketch<S> intersect​(Sketch<S> tupleSketch,
        +                                  Sketch thetaSketch,
        +                                  S summary)
        +
        Perform a stateless intersect set operation on a tuple sketch and a theta sketch and returns the + result as an unordered CompactSketch on the heap.
        +
        +
        Parameters:
        +
        tupleSketch - The first sketch argument. It must not be null.
        +
        thetaSketch - The second sketch argument. It must not be null.
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. + This must not be null.
        +
        Returns:
        +
        an unordered CompactSketch on the heap
        +
        +
      • +
      + + + +
        +
      • +

        intersect

        +
        public void intersect​(Sketch<S> tupleSketch)
        +
        Performs a stateful intersection of the internal set with the given tupleSketch.
        +
        +
        Parameters:
        +
        tupleSketch - input sketch to intersect with the internal state. It must not be null.
        +
        +
      • +
      + + + + + +
        +
      • +

        intersect

        +
        public void intersect​(Sketch thetaSketch,
        +                      S summary)
        +
        Performs a stateful intersection of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary and rules + from the summarySetOps defined by the Intersection constructor.
        +
        +
        Parameters:
        +
        thetaSketch - input theta sketch to intersect with the internal state. It must not be null.
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. + It will be copied for each matching index. It must not be null.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public CompactSketch<S> getResult()
        +
        Gets the internal set as an unordered CompactSketch
        +
        +
        Returns:
        +
        result of the intersections so far
        +
        +
      • +
      + + + +
        +
      • +

        hasResult

        +
        public boolean hasResult()
        +
        Returns true if there is a valid intersection result available
        +
        +
        Returns:
        +
        true if there is a valid intersection result available
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets the internal set to the initial state, which represents the Universal Set
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/JaccardSimilarity.html b/docs/5.0.X/org/apache/datasketches/tuple/JaccardSimilarity.html new file mode 100644 index 000000000..033ed55ad --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/JaccardSimilarity.html @@ -0,0 +1,627 @@ + + + + + +JaccardSimilarity (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class JaccardSimilarity

+
+
+ +
+
    +
  • +
    +
    public final class JaccardSimilarity
    +extends Object
    +
    Jaccard similarity of two Tuple Sketches, or alternatively, of a Tuple and Theta Sketch. + +

    Note: only retained hash values are compared, and the Tuple summary values are not accounted for in the + similarity measure.

    +
    +
    Author:
    +
    Lee Rhodes, David Cromberge
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JaccardSimilarity

        +
        public JaccardSimilarity()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        jaccard

        +
        public static <S extends Summary> double[] jaccard​(Sketch<S> sketchA,
        +                                                   Sketch<S> sketchB,
        +                                                   SummarySetOperations<S> summarySetOps)
        +
        Computes the Jaccard similarity index with upper and lower bounds. The Jaccard similarity index + J(A,B) = (A ^ B)/(A U B) is used to measure how similar the two sketches are to each + other. If J = 1.0, the sketches are considered equal. If J = 0, the two sketches are + distinct from each other. A Jaccard of .95 means the overlap between the two + populations is 95% of the union of the two populations. + +

        Note: For very large pairs of sketches, where the configured nominal entries of the sketches + are 2^25 or 2^26, this method may produce unpredictable results.

        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - The first argument, a Tuple sketch with summary type S
        +
        sketchB - The second argument, a Tuple sketch with summary type S
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        Returns:
        +
        a double array {LowerBound, Estimate, UpperBound} of the Jaccard index. + The Upper and Lower bounds are for a confidence interval of 95.4% or +/- 2 standard deviations.
        +
        +
      • +
      + + + + + +
        +
      • +

        jaccard

        +
        public static <S extends Summary> double[] jaccard​(Sketch<S> sketchA,
        +                                                   Sketch sketchB,
        +                                                   S summary,
        +                                                   SummarySetOperations<S> summarySetOps)
        +
        Computes the Jaccard similarity index with upper and lower bounds. The Jaccard similarity index + J(A,B) = (A ^ B)/(A U B) is used to measure how similar the two sketches are to each + other. If J = 1.0, the sketches are considered equal. If J = 0, the two sketches are + distinct from each other. A Jaccard of .95 means the overlap between the two + populations is 95% of the union of the two populations. + +

        Note: For very large pairs of sketches, where the configured nominal entries of the sketches + are 2^25 or 2^26, this method may produce unpredictable results.

        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - The first argument, a Tuple sketch with summary type S
        +
        sketchB - The second argument, a Theta sketch
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. + This may not be null.
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        Returns:
        +
        a double array {LowerBound, Estimate, UpperBound} of the Jaccard index. + The Upper and Lower bounds are for a confidence interval of 95.4% or +/- 2 standard deviations.
        +
        +
      • +
      + + + +
        +
      • +

        exactlyEqual

        +
        public static <S extends Summary> boolean exactlyEqual​(Sketch<S> sketchA,
        +                                                       Sketch<S> sketchB,
        +                                                       SummarySetOperations<S> summarySetOps)
        +
        Returns true if the two given sketches have exactly the same hash values and the same + theta values. Thus, they are equivalent.
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - The first argument, a Tuple sketch with summary type S
        +
        sketchB - The second argument, a Tuple sketch with summary type S
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        Returns:
        +
        true if the two given sketches have exactly the same hash values and the same + theta values.
        +
        +
      • +
      + + + + + +
        +
      • +

        exactlyEqual

        +
        public static <S extends Summary> boolean exactlyEqual​(Sketch<S> sketchA,
        +                                                       Sketch sketchB,
        +                                                       S summary,
        +                                                       SummarySetOperations<S> summarySetOps)
        +
        Returns true if the two given sketches have exactly the same hash values and the same + theta values. Thus, they are equivalent.
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        sketchA - The first argument, a Tuple sketch with summary type S
        +
        sketchB - The second argument, a Theta sketch
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. + This may not be null.
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        Returns:
        +
        true if the two given sketches have exactly the same hash values and the same + theta values.
        +
        +
      • +
      + + + +
        +
      • +

        similarityTest

        +
        public static <S extends Summary> boolean similarityTest​(Sketch<S> measured,
        +                                                         Sketch<S> expected,
        +                                                         SummarySetOperations<S> summarySetOps,
        +                                                         double threshold)
        +
        Tests similarity of a measured Sketch against an expected Sketch. + Computes the lower bound of the Jaccard index JLB of the measured and + expected sketches. + if JLB ≥ threshold, then the sketches are considered to be + similar with a confidence of 97.7%.
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        measured - a Tuple sketch with summary type S to be tested
        +
        expected - the reference Tuple sketch with summary type S that is considered to be correct.
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        threshold - a real value between zero and one.
        +
        Returns:
        +
        if true, the similarity of the two sketches is greater than the given threshold + with at least 97.7% confidence.
        +
        +
      • +
      + + + + + +
        +
      • +

        similarityTest

        +
        public static <S extends Summary> boolean similarityTest​(Sketch<S> measured,
        +                                                         Sketch expected,
        +                                                         S summary,
        +                                                         SummarySetOperations<S> summarySetOps,
        +                                                         double threshold)
        +
        Tests similarity of a measured Sketch against an expected Sketch. + Computes the lower bound of the Jaccard index JLB of the measured and + expected sketches. + if JLB ≥ threshold, then the sketches are considered to be + similar with a confidence of 97.7%.
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        measured - a Tuple sketch with summary type S to be tested
        +
        expected - the reference Theta sketch that is considered to be correct.
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. + This may not be null.
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        threshold - a real value between zero and one.
        +
        Returns:
        +
        if true, the similarity of the two sketches is greater than the given threshold + with at least 97.7% confidence.
        +
        +
      • +
      + + + +
        +
      • +

        dissimilarityTest

        +
        public static <S extends Summary> boolean dissimilarityTest​(Sketch<S> measured,
        +                                                            Sketch<S> expected,
        +                                                            SummarySetOperations<S> summarySetOps,
        +                                                            double threshold)
        +
        Tests dissimilarity of a measured Sketch against an expected Sketch. + Computes the upper bound of the Jaccard index JUB of the measured and + expected sketches. + if JUB ≤ threshold, then the sketches are considered to be + dissimilar with a confidence of 97.7%.
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        measured - a Tuple sketch with summary type S to be tested
        +
        expected - the reference Theta sketch that is considered to be correct.
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        threshold - a real value between zero and one.
        +
        Returns:
        +
        if true, the dissimilarity of the two sketches is greater than the given threshold + with at least 97.7% confidence.
        +
        +
      • +
      + + + + + +
        +
      • +

        dissimilarityTest

        +
        public static <S extends Summary> boolean dissimilarityTest​(Sketch<S> measured,
        +                                                            Sketch expected,
        +                                                            S summary,
        +                                                            SummarySetOperations<S> summarySetOps,
        +                                                            double threshold)
        +
        Tests dissimilarity of a measured Sketch against an expected Sketch. + Computes the upper bound of the Jaccard index JUB of the measured and + expected sketches. + if JUB ≤ threshold, then the sketches are considered to be + dissimilar with a confidence of 97.7%.
        +
        +
        Type Parameters:
        +
        S - Summary
        +
        Parameters:
        +
        measured - a Tuple sketch with summary type S to be tested
        +
        expected - the reference Theta sketch that is considered to be correct.
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. + This may not be null.
        +
        summarySetOps - instance of SummarySetOperations used to unify or intersect summaries.
        +
        threshold - a real value between zero and one.
        +
        Returns:
        +
        if true, the dissimilarity of the two sketches is greater than the given threshold + with at least 97.7% confidence.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.SketchType.html b/docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.SketchType.html new file mode 100644 index 000000000..3f9a21bf2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.SketchType.html @@ -0,0 +1,423 @@ + + + + + +SerializerDeserializer.SketchType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum SerializerDeserializer.SketchType

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static SerializerDeserializer.SketchType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (SerializerDeserializer.SketchType c : SerializerDeserializer.SketchType.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static SerializerDeserializer.SketchType valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.html new file mode 100644 index 000000000..2c3e97bbb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/SerializerDeserializer.html @@ -0,0 +1,390 @@ + + + + + +SerializerDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SerializerDeserializer

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.SerializerDeserializer
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class SerializerDeserializer
    +extends Object
    +
    Multipurpose serializer-deserializer for a collection of sketches defined by the enum.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SerializerDeserializer

        +
        public SerializerDeserializer()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validateFamily

        +
        public static void validateFamily​(byte familyId,
        +                                  byte preambleLongs)
        +
        Validates the preamble-Longs value given the family ID
        +
        +
        Parameters:
        +
        familyId - the given family ID
        +
        preambleLongs - the given preambleLongs value
        +
        +
      • +
      + + + +
        +
      • +

        validateType

        +
        public static void validateType​(byte sketchTypeByte,
        +                                SerializerDeserializer.SketchType expectedType)
        +
        Validates the sketch type byte versus the expected value
        +
        +
        Parameters:
        +
        sketchTypeByte - the given sketch type byte
        +
        expectedType - the expected value
        +
        +
      • +
      + + + +
        +
      • +

        getSketchType

        +
        public static SerializerDeserializer.SketchType getSketchType​(org.apache.datasketches.memory.Memory mem)
        +
        Gets the sketch type byte from the given Memory image
        +
        +
        Parameters:
        +
        mem - the given Memory image
        +
        Returns:
        +
        the SketchType
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/Sketch.html b/docs/5.0.X/org/apache/datasketches/tuple/Sketch.html new file mode 100644 index 000000000..933f7fe5d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/Sketch.html @@ -0,0 +1,711 @@ + + + + + +Sketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Sketch<S extends Summary>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    S - Type of Summary
    +
    +
    +
    Direct Known Subclasses:
    +
    CompactSketch, UpdatableSketch
    +
    +
    +
    public abstract class Sketch<S extends Summary>
    +extends Object
    +
    This is an equivalent to org.apache.datasketches.theta.Sketch with + addition of a user-defined Summary object associated with every unique entry + in the sketch.
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethodDescription
      abstract CompactSketch<S>compact() +
      Converts this sketch to a CompactSketch on the Java heap.
      +
      abstract intgetCountLessThanThetaLong​(long thetaLong) +
      Gets the number of hash values less than the given theta expressed as a long.
      +
      doublegetEstimate() +
      Estimates the cardinality of the set (number of unique values presented to the sketch)
      +
      doublegetEstimate​(int numSubsetEntries) +
      Gets the estimate of the true distinct population of subset tuples represented by the count + of entries in a subset of the total retained entries of the sketch.
      +
      doublegetLowerBound​(int numStdDev) +
      Gets the approximate lower error bound given the specified number of Standard Deviations.
      +
      doublegetLowerBound​(int numStdDev, + int numSubsetEntries) +
      Gets the estimate of the lower bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
      +
      abstract intgetRetainedEntries() 
      SummaryFactory<S>getSummaryFactory() +
      Gets the Summary Factory class of type S
      +
      doublegetTheta() +
      Gets the value of theta as a double between zero and one
      +
      longgetThetaLong() +
      Returns Theta as a long
      +
      doublegetUpperBound​(int numStdDev) +
      Gets the approximate upper error bound given the specified number of Standard Deviations.
      +
      doublegetUpperBound​(int numStdDev, + int numSubsetEntries) +
      Gets the estimate of the upper bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
      +
      booleanisEmpty() + +
      booleanisEstimationMode() +
      Returns true if the sketch is Estimation Mode (as opposed to Exact Mode).
      +
      abstract TupleSketchIterator<S>iterator() +
      Returns a SketchIterator
      +
      abstract byte[]toByteArray() +
      This is to serialize a sketch instance to a byte array.
      +
      StringtoString() 
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        compact

        +
        public abstract CompactSketch<S> compact()
        +
        Converts this sketch to a CompactSketch on the Java heap. + +

        If this sketch is already in compact form this operation returns this.

        +
        +
        Returns:
        +
        this sketch as a CompactSketch on the Java heap.
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        Estimates the cardinality of the set (number of unique values presented to the sketch)
        +
        +
        Returns:
        +
        best estimate of the number of unique values
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int numStdDev)
        +
        Gets the approximate upper error bound given the specified number of Standard Deviations. + This will return getEstimate() if isEmpty() is true.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        Returns:
        +
        the upper bound.
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int numStdDev)
        +
        Gets the approximate lower error bound given the specified number of Standard Deviations. + This will return getEstimate() if isEmpty() is true.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        Returns:
        +
        the lower bound.
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate​(int numSubsetEntries)
        +
        Gets the estimate of the true distinct population of subset tuples represented by the count + of entries in a subset of the total retained entries of the sketch.
        +
        +
        Parameters:
        +
        numSubsetEntries - number of entries for a chosen subset of the sketch.
        +
        Returns:
        +
        the estimate of the true distinct population of subset tuples represented by the count + of entries in a subset of the total retained entries of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int numStdDev,
        +                            int numSubsetEntries)
        +
        Gets the estimate of the lower bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        numSubsetEntries - number of entries for a chosen subset of the sketch.
        +
        Returns:
        +
        the estimate of the lower bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int numStdDev,
        +                            int numSubsetEntries)
        +
        Gets the estimate of the upper bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        numSubsetEntries - number of entries for a chosen subset of the sketch.
        +
        Returns:
        +
        the estimate of the upper bound of the true distinct population represented by the count + of entries in a subset of the total retained entries of the sketch.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        + +
        +
        Returns:
        +
        true if empty.
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        Returns true if the sketch is Estimation Mode (as opposed to Exact Mode). + This is true if theta < 1.0 AND isEmpty() is false.
        +
        +
        Returns:
        +
        true if the sketch is in estimation mode.
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public abstract int getRetainedEntries()
        +
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public abstract int getCountLessThanThetaLong​(long thetaLong)
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        getSummaryFactory

        +
        public SummaryFactory<S> getSummaryFactory()
        +
        Gets the Summary Factory class of type S
        +
        +
        Returns:
        +
        the Summary Factory class of type S
        +
        +
      • +
      + + + +
        +
      • +

        getTheta

        +
        public double getTheta()
        +
        Gets the value of theta as a double between zero and one
        +
        +
        Returns:
        +
        the value of theta as a double
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public abstract byte[] toByteArray()
        +
        This is to serialize a sketch instance to a byte array. + +

        As of 3.0.0, serializing an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Serializing a CompactSketch is not deprecated.

        +
        +
        Returns:
        +
        serialized representation of the sketch
        +
        +
      • +
      + + + +
        +
      • +

        iterator

        +
        public abstract TupleSketchIterator<S> iterator()
        +
        Returns a SketchIterator
        +
        +
        Returns:
        +
        a SketchIterator
        +
        +
      • +
      + + + +
        +
      • +

        getThetaLong

        +
        public long getThetaLong()
        +
        Returns Theta as a long
        +
        +
        Returns:
        +
        Theta as a long
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/Sketches.html b/docs/5.0.X/org/apache/datasketches/tuple/Sketches.html new file mode 100644 index 000000000..0fc82f286 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/Sketches.html @@ -0,0 +1,374 @@ + + + + + +Sketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Sketches

+
+
+ +
+
    +
  • +
    +
    public final class Sketches
    +extends Object
    +
    Convenient static methods to instantiate generic tuple sketches.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Sketches

        +
        public Sketches()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        createEmptySketch

        +
        public static <S extends SummarySketch<S> createEmptySketch()
        +
        +
        Type Parameters:
        +
        S - Type of Summary
        +
        Returns:
        +
        an empty instance of Sketch
        +
        +
      • +
      + + + +
        +
      • +

        heapifySketch

        +
        public static <S extends SummarySketch<S> heapifySketch​(org.apache.datasketches.memory.Memory mem,
        +                                                          SummaryDeserializer<S> deserializer)
        +
        Instantiate a Sketch from a given Memory.
        +
        +
        Type Parameters:
        +
        S - Type of Summary
        +
        Parameters:
        +
        mem - Memory object representing a Sketch
        +
        deserializer - instance of SummaryDeserializer
        +
        Returns:
        +
        Sketch created from its Memory representation
        +
        +
      • +
      + + + +
        +
      • +

        heapifyUpdatableSketch

        +
        public static <U,​S extends UpdatableSummary<U>> UpdatableSketch<U,​S> heapifyUpdatableSketch​(org.apache.datasketches.memory.Memory mem,
        +                                                                                                        SummaryDeserializer<S> deserializer,
        +                                                                                                        SummaryFactory<S> summaryFactory)
        +
        Instantiate UpdatableSketch from a given Memory
        +
        +
        Type Parameters:
        +
        U - Type of update value
        +
        S - Type of Summary
        +
        Parameters:
        +
        mem - Memory object representing a Sketch
        +
        deserializer - instance of SummaryDeserializer
        +
        summaryFactory - instance of SummaryFactory
        +
        Returns:
        +
        Sketch created from its Memory representation
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/Summary.html b/docs/5.0.X/org/apache/datasketches/tuple/Summary.html new file mode 100644 index 000000000..fd23fed46 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/Summary.html @@ -0,0 +1,293 @@ + + + + + +Summary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Summary

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        copy

        +
        Summary copy()
        +
        Deep copy. + +

        Caution: This must implement a deep copy.

        +
        +
        Returns:
        +
        deep copy of the Summary
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        byte[] toByteArray()
        +
        This is to serialize a Summary instance to a byte array. + +

        The user should encode in the byte array its total size, which is used during + deserialization, especially if the Summary has variable sized elements.

        +
        +
        Returns:
        +
        serialized representation of the Summary
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/SummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/SummaryDeserializer.html new file mode 100644 index 000000000..b9424158c --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/SummaryDeserializer.html @@ -0,0 +1,274 @@ + + + + + +SummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface SummaryDeserializer<S extends Summary>

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapifySummary

        +
        DeserializeResult<S> heapifySummary​(org.apache.datasketches.memory.Memory mem)
        +
        This is to create an instance of a Summary given a serialized representation. + The user may assume that the start of the given Memory is the correct place to start + deserializing. However, the user must be able to determine the number of bytes required to + deserialize the summary as the capacity of the given Memory may + include multiple such summaries and may be much larger than required for a single summary.
        +
        +
        Parameters:
        +
        mem - Memory object with serialized representation of a Summary
        +
        Returns:
        +
        DeserializedResult object, which contains a Summary object and number of bytes read + from the Memory
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/SummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/SummaryFactory.html new file mode 100644 index 000000000..d21114564 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/SummaryFactory.html @@ -0,0 +1,264 @@ + + + + + +SummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface SummaryFactory<S extends Summary>

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        newSummary

        +
        S newSummary()
        +
        +
        Returns:
        +
        new instance of Summary
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/SummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/SummarySetOperations.html new file mode 100644 index 000000000..032dc31c0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/SummarySetOperations.html @@ -0,0 +1,312 @@ + + + + + +SummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface SummarySetOperations<S extends Summary>

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      Sintersection​(S a, + S b) +
      This is called by the intersection operator when both sketches have the same hash value.
      +
      Sunion​(S a, + S b) +
      This is called by the union operator when both sketches have the same hash value.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        union

        +
        S union​(S a,
        +        S b)
        +
        This is called by the union operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        union of Summary A and Summary B
        +
        +
      • +
      + + + + + +
        +
      • +

        intersection

        +
        S intersection​(S a,
        +               S b)
        +
        This is called by the intersection operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        intersection of Summary A and Summary B
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/TupleSketchIterator.html b/docs/5.0.X/org/apache/datasketches/tuple/TupleSketchIterator.html new file mode 100644 index 000000000..7462af431 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/TupleSketchIterator.html @@ -0,0 +1,330 @@ + + + + + +TupleSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TupleSketchIterator<S extends Summary>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.TupleSketchIterator<S>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    S - Type of Summary
    +
    +
    +
    public class TupleSketchIterator<S extends Summary>
    +extends Object
    +
    Iterator over a generic tuple sketch
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        next

        +
        public boolean next()
        +
        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.
        +
        +
        Returns:
        +
        true if the next element exists
        +
        +
      • +
      + + + +
        +
      • +

        getHash

        +
        public long getHash()
        +
        Gets the hash from the current entry in the sketch, which is a hash + of the original key passed to update(). The original keys are not + retained. Don't call this before calling next() for the first time + or after getting false from next().
        +
        +
        Returns:
        +
        hash from the current entry
        +
        +
      • +
      + + + +
        +
      • +

        getSummary

        +
        public S getSummary()
        +
        Gets a Summary object from the current entry in the sketch. + Don't call this before calling next() for the first time + or after getting false from next().
        +
        +
        Returns:
        +
        Summary object for the current entry (this is not a copy!)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/Union.html b/docs/5.0.X/org/apache/datasketches/tuple/Union.html new file mode 100644 index 000000000..5494c57c9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/Union.html @@ -0,0 +1,512 @@ + + + + + +Union (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Union<S extends Summary>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    S - Type of Summary
    +
    +
    +
    public class Union<S extends Summary>
    +extends Object
    +
    Compute the union of two or more generic tuple sketches or generic tuple sketches combined with + theta sketches. A new instance represents an empty set.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Union​(int nomEntries, + SummarySetOperations<S> summarySetOps) +
      Creates new Union instance.
      +
      Union​(SummarySetOperations<S> summarySetOps) +
      Creates new Union instance with instructions on how to process two summaries that + overlap.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      CompactSketch<S>getResult() +
      Gets the result of a sequence of stateful union operations as an unordered CompactSketch
      +
      CompactSketch<S>getResult​(boolean reset) +
      Gets the result of a sequence of stateful union operations as an unordered CompactSketch.
      +
      voidreset() +
      Resets the internal set to the initial state, which represents an empty set.
      +
      voidunion​(Sketch thetaSketch, + S summary) +
      Performs a stateful union of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary.
      +
      voidunion​(Sketch<S> tupleSketch) +
      Performs a stateful union of the internal set with the given tupleSketch.
      +
      CompactSketch<S>union​(Sketch<S> tupleSketch, + Sketch thetaSketch, + S summary) +
      Perform a stateless, pair-wise union operation between a tupleSketch and a thetaSketch.
      +
      CompactSketch<S>union​(Sketch<S> tupleSketchA, + Sketch<S> tupleSketchB) +
      Perform a stateless, pair-wise union operation between two tuple sketches.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Union

        +
        public Union​(SummarySetOperations<S> summarySetOps)
        +
        Creates new Union instance with instructions on how to process two summaries that + overlap. This will have the default nominal entries (K).
        +
        +
        Parameters:
        +
        summarySetOps - instance of SummarySetOperations
        +
        +
      • +
      + + + +
        +
      • +

        Union

        +
        public Union​(int nomEntries,
        +             SummarySetOperations<S> summarySetOps)
        +
        Creates new Union instance.
        +
        +
        Parameters:
        +
        nomEntries - nominal entries (K). Forced to the nearest power of 2 greater than + given value.
        +
        summarySetOps - instance of SummarySetOperations
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        union

        +
        public CompactSketch<S> union​(Sketch<S> tupleSketchA,
        +                              Sketch<S> tupleSketchB)
        +
        Perform a stateless, pair-wise union operation between two tuple sketches. + The returned sketch will be cut back to the smaller of the two k values if required. + +

        Nulls and empty sketches are ignored.

        +
        +
        Parameters:
        +
        tupleSketchA - The first argument
        +
        tupleSketchB - The second argument
        +
        Returns:
        +
        the result ordered CompactSketch on the heap.
        +
        +
      • +
      + + + + + +
        +
      • +

        union

        +
        public CompactSketch<S> union​(Sketch<S> tupleSketch,
        +                              Sketch thetaSketch,
        +                              S summary)
        +
        Perform a stateless, pair-wise union operation between a tupleSketch and a thetaSketch. + The returned sketch will be cut back to the smaller of the two k values if required. + +

        Nulls and empty sketches are ignored.

        +
        +
        Parameters:
        +
        tupleSketch - The first argument
        +
        thetaSketch - The second argument
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. + This may not be null.
        +
        Returns:
        +
        the result ordered CompactSketch on the heap.
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public void union​(Sketch<S> tupleSketch)
        +
        Performs a stateful union of the internal set with the given tupleSketch.
        +
        +
        Parameters:
        +
        tupleSketch - input tuple sketch to merge with the internal set. + +

        Nulls and empty sketches are ignored.

        +
        +
      • +
      + + + + + +
        +
      • +

        union

        +
        public void union​(Sketch thetaSketch,
        +                  S summary)
        +
        Performs a stateful union of the internal set with the given thetaSketch by combining entries + using the hashes from the theta sketch and summary values from the given summary.
        +
        +
        Parameters:
        +
        thetaSketch - the given theta sketch input. If null or empty, it is ignored.
        +
        summary - the given proxy summary for the theta sketch, which doesn't have one. This may + not be null.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public CompactSketch<S> getResult()
        +
        Gets the result of a sequence of stateful union operations as an unordered CompactSketch
        +
        +
        Returns:
        +
        result of the stateful unions so far. The state of this operation is not reset after the + result is returned.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public CompactSketch<S> getResult​(boolean reset)
        +
        Gets the result of a sequence of stateful union operations as an unordered CompactSketch.
        +
        +
        Parameters:
        +
        reset - If true, clears this operator to the empty state after this result is + returned. Set this to false if you wish to obtain an intermediate result.
        +
        Returns:
        +
        result of the stateful union
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets the internal set to the initial state, which represents an empty set. This is only useful + after sequences of stateful union operations.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketch.html new file mode 100644 index 000000000..28e81c689 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketch.html @@ -0,0 +1,879 @@ + + + + + +UpdatableSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UpdatableSketch<U,​S extends UpdatableSummary<U>>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    U - Type of the value, which is passed to update method of a Summary
    +
    S - Type of the UpdatableSummary<U>
    +
    +
    +
    Direct Known Subclasses:
    +
    ArrayOfStringsSketch, DoubleSketch, IntegerSketch
    +
    +
    +
    public class UpdatableSketch<U,​S extends UpdatableSummary<U>>
    +extends Sketch<S>
    +
    An extension of QuickSelectSketch<S>, which can be updated with many types of keys. + Summary objects are created using a user-defined SummaryFactory class, + which should allow very flexible parameterization if needed. + Keys are presented to a sketch along with values of a user-defined + update type U. When an entry is inserted into a sketch or a duplicate key is + presented to a sketch then summary.update(U value) method will be called. So + any kind of user-defined accumulation is possible. Summaries also must know + how to copy themselves. Also union and intersection of summaries can be + implemented in a sub-class of SummarySetOperations, which will be used in + case Union or Intersection of two instances of Tuple Sketch is needed
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UpdatableSketch

        +
        public UpdatableSketch​(int nomEntries,
        +                       int lgResizeFactor,
        +                       float samplingProbability,
        +                       SummaryFactory<S> summaryFactory)
        +
        This is to create a new instance of an UpdatableQuickSelectSketch.
        +
        +
        Parameters:
        +
        nomEntries - Nominal number of entries. Forced to the nearest power of 2 greater than + or equal to the given value.
        +
        lgResizeFactor - log2(resizeFactor) - value from 0 to 3: +
        + 0 - no resizing (max size allocated),
        + 1 - double internal hash table each time it reaches a threshold
        + 2 - grow four times
        + 3 - grow eight times (default)
        + 
        +
        samplingProbability - See Sampling Probability
        +
        summaryFactory - An instance of a SummaryFactory.
        +
        +
      • +
      + + + +
        +
      • +

        UpdatableSketch

        +
        @Deprecated
        +public UpdatableSketch​(org.apache.datasketches.memory.Memory srcMem,
        +                       SummaryDeserializer<S> deserializer,
        +                       SummaryFactory<S> summaryFactory)
        +
        Deprecated. +
        As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
        +
        +
        This is to create an instance of a sketch given a serialized form
        +
        +
        Parameters:
        +
        srcMem - Memory object with data of a serialized UpdatableSketch
        +
        deserializer - instance of SummaryDeserializer
        +
        summaryFactory - instance of SummaryFactory
        +
        +
      • +
      + + + +
        +
      • +

        UpdatableSketch

        +
        public UpdatableSketch​(UpdatableSketch<U,​S> sketch)
        +
        Copy Constructor
        +
        +
        Parameters:
        +
        sketch - the sketch to copy
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        copy

        +
        public UpdatableSketch<U,​S> copy()
        +
        +
        Returns:
        +
        a deep copy of this sketch
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(long key,
        +                   U value)
        +
        Updates this sketch with a long key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Parameters:
        +
        key - The given long key
        +
        value - The given U value
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(double key,
        +                   U value)
        +
        Updates this sketch with a double key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Parameters:
        +
        key - The given double key
        +
        value - The given U value
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(String key,
        +                   U value)
        +
        Updates this sketch with a String key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Parameters:
        +
        key - The given String key
        +
        value - The given U value
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(byte[] key,
        +                   U value)
        +
        Updates this sketch with a byte[] key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Parameters:
        +
        key - The given byte[] key
        +
        value - The given U value
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(int[] key,
        +                   U value)
        +
        Updates this sketch with a int[] key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Parameters:
        +
        key - The given int[] key
        +
        value - The given U value
        +
        +
      • +
      + + + + + +
        +
      • +

        update

        +
        public void update​(long[] key,
        +                   U value)
        +
        Updates this sketch with a long[] key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Parameters:
        +
        key - The given long[] key
        +
        value - The given U value
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public int getRetainedEntries()
        +
        +
        Specified by:
        +
        getRetainedEntries in class Sketch<S extends Summary>
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public int getCountLessThanThetaLong​(long thetaLong)
        +
        Description copied from class: Sketch
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Specified by:
        +
        getCountLessThanThetaLong in class Sketch<S extends Summary>
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        getNominalEntries

        +
        public int getNominalEntries()
        +
        Get configured nominal number of entries
        +
        +
        Returns:
        +
        nominal number of entries
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Get log_base2 of Nominal Entries
        +
        +
        Returns:
        +
        log_base2 of Nominal Entries
        +
        +
      • +
      + + + +
        +
      • +

        getSamplingProbability

        +
        public float getSamplingProbability()
        +
        Get configured sampling probability
        +
        +
        Returns:
        +
        sampling probability
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentCapacity

        +
        public int getCurrentCapacity()
        +
        Get current capacity
        +
        +
        Returns:
        +
        current capacity
        +
        +
      • +
      + + + +
        +
      • +

        getResizeFactor

        +
        public ResizeFactor getResizeFactor()
        +
        Get configured resize factor
        +
        +
        Returns:
        +
        resize factor
        +
        +
      • +
      + + + +
        +
      • +

        trim

        +
        public void trim()
        +
        Rebuilds reducing the actual number of entries to the nominal number of entries if needed
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch an empty state.
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactSketch<S> compact()
        +
        Converts the current state of the sketch into a compact sketch
        +
        +
        Specified by:
        +
        compact in class Sketch<S extends Summary>
        +
        Returns:
        +
        compact sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        @Deprecated
        +public byte[] toByteArray()
        +
        Deprecated. +
        As of 3.0.0, serializing an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Serializing a CompactSketch is not deprecated.
        +
        +
        This serializes an UpdatableSketch (QuickSelectSketch).
        +
        +
        Specified by:
        +
        toByteArray in class Sketch<S extends Summary>
        +
        Returns:
        +
        serialized representation of an UpdatableSketch (QuickSelectSketch).
        +
        +
      • +
      + + + + + +
        +
      • +

        insertSummary

        +
        protected void insertSummary​(int index,
        +                             S summary)
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketchBuilder.html new file mode 100644 index 000000000..c8fe864e6 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSketchBuilder.html @@ -0,0 +1,418 @@ + + + + + +UpdatableSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UpdatableSketchBuilder<U,​S extends UpdatableSummary<U>>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.UpdatableSketchBuilder<U,​S>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    U - Type of update value
    +
    S - Type of Summary
    +
    +
    +
    public class UpdatableSketchBuilder<U,​S extends UpdatableSummary<U>>
    +extends Object
    +
    For building a new generic tuple UpdatableSketch
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UpdatableSketchBuilder

        +
        public UpdatableSketchBuilder​(SummaryFactory<S> summaryFactory)
        +
        Creates an instance of UpdatableSketchBuilder with default parameters
        +
        +
        Parameters:
        +
        summaryFactory - An instance of SummaryFactory.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setNominalEntries

        +
        public UpdatableSketchBuilder<U,​S> setNominalEntries​(int nomEntries)
        +
        This is to set the nominal number of entries.
        +
        +
        Parameters:
        +
        nomEntries - Nominal number of entries. Forced to the nearest power of 2 greater than + or equal to the given value.
        +
        Returns:
        +
        this UpdatableSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        setResizeFactor

        +
        public UpdatableSketchBuilder<U,​S> setResizeFactor​(ResizeFactor resizeFactor)
        +
        This is to set the resize factor. + Value of X1 means that the maximum capacity is allocated from the start. + Default resize factor is X8.
        +
        +
        Parameters:
        +
        resizeFactor - value of X1, X2, X4 or X8
        +
        Returns:
        +
        this UpdatableSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        setSamplingProbability

        +
        public UpdatableSketchBuilder<U,​S> setSamplingProbability​(float samplingProbability)
        +
        This is to set sampling probability. + Default probability is 1.
        +
        +
        Parameters:
        +
        samplingProbability - sampling probability from 0 to 1
        +
        Returns:
        +
        this UpdatableSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public UpdatableSketch<U,​S> build()
        +
        Returns an UpdatableSketch with the current configuration of this Builder.
        +
        +
        Returns:
        +
        an UpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets the Nominal Entries, Resize Factor and Sampling Probability to their default values. + The assignment of U and S remain the same.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSummary.html new file mode 100644 index 000000000..59e369d2d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/UpdatableSummary.html @@ -0,0 +1,284 @@ + + + + + +UpdatableSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface UpdatableSummary<U>

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        update

        +
        UpdatableSummary<U> update​(U value)
        +
        This is to provide a method of updating summaries. + This is primarily used internally.
        +
        +
        Parameters:
        +
        value - update value
        +
        Returns:
        +
        this
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/Util.html b/docs/5.0.X/org/apache/datasketches/tuple/Util.html new file mode 100644 index 000000000..28b056b29 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/Util.html @@ -0,0 +1,524 @@ + + + + + +Util (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Util

+
+
+ +
+
    +
  • +
    +
    public final class Util
    +extends Object
    +
    Common utility functions for Tuples
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Util

        +
        public Util()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        doubleToLongArray

        +
        public static final long[] doubleToLongArray​(double value)
        +
        Converts a double to a long[].
        +
        +
        Parameters:
        +
        value - the given double value
        +
        Returns:
        +
        the long array
        +
        +
      • +
      + + + +
        +
      • +

        stringToByteArray

        +
        public static final byte[] stringToByteArray​(String value)
        +
        Converts a String to a UTF_8 byte array. If the given value is either null or empty this + method returns null.
        +
        +
        Parameters:
        +
        value - the given String value
        +
        Returns:
        +
        the UTF_8 byte array
        +
        +
      • +
      + + + +
        +
      • +

        computeSeedHash

        +
        public static short computeSeedHash​(long seed)
        +
        Computes and checks the 16-bit seed hash from the given long seed. + The seed hash may not be zero in order to maintain compatibility with older serialized + versions that did not have this concept.
        +
        +
        Parameters:
        +
        seed - See Update Hash Seed
        +
        Returns:
        +
        the seed hash.
        +
        +
      • +
      + + + +
        +
      • +

        checkSeedHashes

        +
        public static final void checkSeedHashes​(short seedHashA,
        +                                         short seedHashB)
        +
        Checks the two given seed hashes. If they are not equal, this method throws an Exception.
        +
        +
        Parameters:
        +
        seedHashA - given seed hash A
        +
        seedHashB - given seed hash B
        +
        +
      • +
      + + + +
        +
      • +

        getStartingCapacity

        +
        public static int getStartingCapacity​(int nomEntries,
        +                                      int lgResizeFactor)
        +
        Gets the starting capacity of a new sketch given the Nominal Entries and the log Resize Factor.
        +
        +
        Parameters:
        +
        nomEntries - the given Nominal Entries
        +
        lgResizeFactor - the given log Resize Factor
        +
        Returns:
        +
        the starting capacity
        +
        +
      • +
      + + + +
        +
      • +

        stringConcat

        +
        public static String stringConcat​(String[] strArr)
        +
        Concatenate array of Strings to a single String.
        +
        +
        Parameters:
        +
        strArr - the given String array
        +
        Returns:
        +
        the concatenated String
        +
        +
      • +
      + + + +
        +
      • +

        stringHash

        +
        public static long stringHash​(String s)
        +
        +
        Parameters:
        +
        s - the string to hash
        +
        Returns:
        +
        the hash of the string
        +
        +
      • +
      + + + +
        +
      • +

        stringArrHash

        +
        public static long stringArrHash​(String[] strArray)
        +
        +
        Parameters:
        +
        strArray - array of Strings
        +
        Returns:
        +
        long hash of concatenated strings.
        +
        +
      • +
      + + + + + +
        +
      • +

        copySummaryArray

        +
        public static <S extends Summary> S[] copySummaryArray​(S[] summaryArr)
        +
        Will copy compact summary arrays as well as hashed summary tables (with nulls).
        +
        +
        Type Parameters:
        +
        S - type of summary
        +
        Parameters:
        +
        summaryArr - the given summary array or table
        +
        Returns:
        +
        the copy
        +
        +
      • +
      + + + + + +
        +
      • +

        newSummaryArray

        +
        public static <S extends Summary> S[] newSummaryArray​(S[] summaryArr,
        +                                                      int length)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSketch.html new file mode 100644 index 000000000..89fa01e3a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSketch.html @@ -0,0 +1,753 @@ + + + + + +DoubleSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoubleSketch

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoubleSketch

        +
        public DoubleSketch​(int lgK,
        +                    DoubleSummary.Mode mode)
        +
        Constructs this sketch with given lgK.
        +
        +
        Parameters:
        +
        lgK - Log_base2 of Nominal Entries. + See Nominal Entries
        +
        mode - The DoubleSummary mode to be used
        +
        +
      • +
      + + + +
        +
      • +

        DoubleSketch

        +
        public DoubleSketch​(int lgK,
        +                    int lgResizeFactor,
        +                    float samplingProbability,
        +                    DoubleSummary.Mode mode)
        +
        Creates this sketch with the following parameters:
        +
        +
        Parameters:
        +
        lgK - Log_base2 of Nominal Entries.
        +
        lgResizeFactor - log2(resizeFactor) - value from 0 to 3: +
        + 0 - no resizing (max size allocated),
        + 1 - double internal hash table each time it reaches a threshold
        + 2 - grow four times
        + 3 - grow eight times (default)
        + 
        +
        samplingProbability - See Sampling Probability
        +
        mode - The DoubleSummary mode to be used
        +
        +
      • +
      + + + +
        +
      • +

        DoubleSketch

        +
        @Deprecated
        +public DoubleSketch​(org.apache.datasketches.memory.Memory mem,
        +                    DoubleSummary.Mode mode)
        +
        Deprecated. +
        As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
        +
        +
        Constructs this sketch from a Memory image, which must be from an DoubleSketch, and + usually with data.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        mode - The DoubleSummary mode to be used
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public void update​(String key,
        +                   Double value)
        +
        Description copied from class: UpdatableSketch
        +
        Updates this sketch with a String key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Overrides:
        +
        update in class UpdatableSketch<Double,​DoubleSummary>
        +
        Parameters:
        +
        key - The given String key
        +
        value - The given U value
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long key,
        +                   Double value)
        +
        Description copied from class: UpdatableSketch
        +
        Updates this sketch with a long key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Overrides:
        +
        update in class UpdatableSketch<Double,​DoubleSummary>
        +
        Parameters:
        +
        key - The given long key
        +
        value - The given U value
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public int getRetainedEntries()
        +
        +
        Specified by:
        +
        getRetainedEntries in class Sketch<S extends Summary>
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public int getCountLessThanThetaLong​(long thetaLong)
        +
        Description copied from class: Sketch
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Specified by:
        +
        getCountLessThanThetaLong in class Sketch<S extends Summary>
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        getNominalEntries

        +
        public int getNominalEntries()
        +
        Get configured nominal number of entries
        +
        +
        Returns:
        +
        nominal number of entries
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Get log_base2 of Nominal Entries
        +
        +
        Returns:
        +
        log_base2 of Nominal Entries
        +
        +
      • +
      + + + +
        +
      • +

        getSamplingProbability

        +
        public float getSamplingProbability()
        +
        Get configured sampling probability
        +
        +
        Returns:
        +
        sampling probability
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentCapacity

        +
        public int getCurrentCapacity()
        +
        Get current capacity
        +
        +
        Returns:
        +
        current capacity
        +
        +
      • +
      + + + +
        +
      • +

        getResizeFactor

        +
        public ResizeFactor getResizeFactor()
        +
        Get configured resize factor
        +
        +
        Returns:
        +
        resize factor
        +
        +
      • +
      + + + +
        +
      • +

        trim

        +
        public void trim()
        +
        Rebuilds reducing the actual number of entries to the nominal number of entries if needed
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch an empty state.
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactSketch<S> compact()
        +
        Converts the current state of the sketch into a compact sketch
        +
        +
        Specified by:
        +
        compact in class Sketch<S extends Summary>
        +
        Returns:
        +
        compact sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        @Deprecated
        +public byte[] toByteArray()
        +
        Deprecated. +
        As of 3.0.0, serializing an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Serializing a CompactSketch is not deprecated.
        +
        +
        This serializes an UpdatableSketch (QuickSelectSketch).
        +
        +
        Specified by:
        +
        toByteArray in class Sketch<S extends Summary>
        +
        Returns:
        +
        serialized representation of an UpdatableSketch (QuickSelectSketch).
        +
        +
      • +
      + + + + + +
        +
      • +

        insertSummary

        +
        protected void insertSummary​(int index,
        +                             S summary)
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.Mode.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.Mode.html new file mode 100644 index 000000000..c473e1c3a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.Mode.html @@ -0,0 +1,426 @@ + + + + + +DoubleSummary.Mode (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum DoubleSummary.Mode

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        Sum

        +
        public static final DoubleSummary.Mode Sum
        +
        The aggregation mode is the summation function. +

        New retained value = previous retained value + incoming value

        +
      • +
      + + + +
        +
      • +

        Min

        +
        public static final DoubleSummary.Mode Min
        +
        The aggregation mode is the minimum function. +

        New retained value = min(previous retained value, incoming value)

        +
      • +
      + + + +
        +
      • +

        Max

        +
        public static final DoubleSummary.Mode Max
        +
        The aggregation mode is the maximum function. +

        New retained value = max(previous retained value, incoming value)

        +
      • +
      + + + +
        +
      • +

        AlwaysOne

        +
        public static final DoubleSummary.Mode AlwaysOne
        +
        The aggregation mode is always one. +

        New retained value = 1.0

        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static DoubleSummary.Mode[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (DoubleSummary.Mode c : DoubleSummary.Mode.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static DoubleSummary.Mode valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.html new file mode 100644 index 000000000..b11e0f9fb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummary.html @@ -0,0 +1,456 @@ + + + + + +DoubleSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoubleSummary

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.adouble.DoubleSummary
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Summary, UpdatableSummary<Double>
    +
    +
    +
    public final class DoubleSummary
    +extends Object
    +implements UpdatableSummary<Double>
    +
    Summary for generic tuple sketches of type Double. + This summary keeps a double value. On update a predefined operation is performed depending on + the mode. + Supported modes: Sum, Min, Max, AlwaysOne, Increment. The default mode is Sum.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoubleSummary

        +
        public DoubleSummary​(DoubleSummary.Mode mode)
        +
        Creates an instance of DoubleSummary with a given mode.
        +
        +
        Parameters:
        +
        mode - update mode
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public DoubleSummary update​(Double value)
        +
        Description copied from interface: UpdatableSummary
        +
        This is to provide a method of updating summaries. + This is primarily used internally.
        +
        +
        Specified by:
        +
        update in interface UpdatableSummary<Double>
        +
        Parameters:
        +
        value - update value
        +
        Returns:
        +
        this
        +
        +
      • +
      + + + +
        +
      • +

        copy

        +
        public DoubleSummary copy()
        +
        Description copied from interface: Summary
        +
        Deep copy. + +

        Caution: This must implement a deep copy.

        +
        +
        Specified by:
        +
        copy in interface Summary
        +
        Returns:
        +
        deep copy of the Summary
        +
        +
      • +
      + + + +
        +
      • +

        getValue

        +
        public double getValue()
        +
        +
        Returns:
        +
        current value of the DoubleSummary
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from interface: Summary
        +
        This is to serialize a Summary instance to a byte array. + +

        The user should encode in the byte array its total size, which is used during + deserialization, especially if the Summary has variable sized elements.

        +
        +
        Specified by:
        +
        toByteArray in interface Summary
        +
        Returns:
        +
        serialized representation of the Summary
        +
        +
      • +
      + + + +
        +
      • +

        fromMemory

        +
        public static DeserializeResult<DoubleSummary> fromMemory​(org.apache.datasketches.memory.Memory mem)
        +
        Creates an instance of the DoubleSummary given a serialized representation
        +
        +
        Parameters:
        +
        mem - Memory object with serialized DoubleSummary
        +
        Returns:
        +
        DeserializedResult object, which contains a DoubleSummary object and number of bytes + read from the Memory
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryDeserializer.html new file mode 100644 index 000000000..d0c1e9b5e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryDeserializer.html @@ -0,0 +1,333 @@ + + + + + +DoubleSummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoubleSummaryDeserializer

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.adouble.DoubleSummaryDeserializer
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoubleSummaryDeserializer

        +
        public DoubleSummaryDeserializer()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapifySummary

        +
        public DeserializeResult<DoubleSummary> heapifySummary​(org.apache.datasketches.memory.Memory mem)
        +
        Description copied from interface: SummaryDeserializer
        +
        This is to create an instance of a Summary given a serialized representation. + The user may assume that the start of the given Memory is the correct place to start + deserializing. However, the user must be able to determine the number of bytes required to + deserialize the summary as the capacity of the given Memory may + include multiple such summaries and may be much larger than required for a single summary.
        +
        +
        Specified by:
        +
        heapifySummary in interface SummaryDeserializer<DoubleSummary>
        +
        Parameters:
        +
        mem - Memory object with serialized representation of a Summary
        +
        Returns:
        +
        DeserializedResult object, which contains a Summary object and number of bytes read + from the Memory
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryFactory.html new file mode 100644 index 000000000..1634930e2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummaryFactory.html @@ -0,0 +1,330 @@ + + + + + +DoubleSummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoubleSummaryFactory

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.adouble.DoubleSummaryFactory
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoubleSummaryFactory

        +
        public DoubleSummaryFactory​(DoubleSummary.Mode summaryMode)
        +
        Creates an instance of DoubleSummaryFactory with a given mode
        +
        +
        Parameters:
        +
        summaryMode - summary mode
        +
        +
      • +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummarySetOperations.html new file mode 100644 index 000000000..8cf411732 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/DoubleSummarySetOperations.html @@ -0,0 +1,417 @@ + + + + + +DoubleSummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DoubleSummarySetOperations

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DoubleSummarySetOperations

        +
        public DoubleSummarySetOperations()
        +
        Creates an instance with default mode of sum for both union and intersection. + This exists for backward compatibility.
        +
      • +
      + + + +
        +
      • +

        DoubleSummarySetOperations

        +
        public DoubleSummarySetOperations​(DoubleSummary.Mode summaryMode)
        +
        Creates an instance given a DoubleSummary update mode where the mode is the same for both + union and intersection. This exists for backward compatibility.
        +
        +
        Parameters:
        +
        summaryMode - DoubleSummary update mode.
        +
        +
      • +
      + + + +
        +
      • +

        DoubleSummarySetOperations

        +
        public DoubleSummarySetOperations​(DoubleSummary.Mode unionSummaryMode,
        +                                  DoubleSummary.Mode intersectionSummaryMode)
        +
        Creates an instance with two modes.
        +
        +
        Parameters:
        +
        unionSummaryMode - for unions
        +
        intersectionSummaryMode - for intersections
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        union

        +
        public DoubleSummary union​(DoubleSummary a,
        +                           DoubleSummary b)
        +
        Description copied from interface: SummarySetOperations
        +
        This is called by the union operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Specified by:
        +
        union in interface SummarySetOperations<DoubleSummary>
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        union of Summary A and Summary B
        +
        +
      • +
      + + + +
        +
      • +

        intersection

        +
        public DoubleSummary intersection​(DoubleSummary a,
        +                                  DoubleSummary b)
        +
        Description copied from interface: SummarySetOperations
        +
        This is called by the intersection operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Specified by:
        +
        intersection in interface SummarySetOperations<DoubleSummary>
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        intersection of Summary A and Summary B
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSketch.html new file mode 100644 index 000000000..0aea3e109 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSketch.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.adouble.DoubleSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.adouble.DoubleSketch

+
+
No usage of org.apache.datasketches.tuple.adouble.DoubleSketch
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.Mode.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.Mode.html new file mode 100644 index 000000000..e7f6b2a8f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.Mode.html @@ -0,0 +1,265 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.adouble.DoubleSummary.Mode (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.adouble.DoubleSummary.Mode

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.html new file mode 100644 index 000000000..bc14cc3cf --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummary.html @@ -0,0 +1,261 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.adouble.DoubleSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.adouble.DoubleSummary

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryDeserializer.html new file mode 100644 index 000000000..9551c203d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryDeserializer.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.adouble.DoubleSummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.adouble.DoubleSummaryDeserializer

+
+
No usage of org.apache.datasketches.tuple.adouble.DoubleSummaryDeserializer
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryFactory.html new file mode 100644 index 000000000..68866c4b0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummaryFactory.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.adouble.DoubleSummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.adouble.DoubleSummaryFactory

+
+
No usage of org.apache.datasketches.tuple.adouble.DoubleSummaryFactory
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummarySetOperations.html new file mode 100644 index 000000000..a23994945 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/class-use/DoubleSummarySetOperations.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations

+
+
No usage of org.apache.datasketches.tuple.adouble.DoubleSummarySetOperations
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-summary.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-summary.html new file mode 100644 index 000000000..bd60cd48b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-summary.html @@ -0,0 +1,212 @@ + + + + + +org.apache.datasketches.tuple.adouble (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.tuple.adouble

+
+
+
+ + +
This package is for a generic implementation of the Tuple sketch for single Double value.
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-tree.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-tree.html new file mode 100644 index 000000000..872bf999b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-tree.html @@ -0,0 +1,190 @@ + + + + + +org.apache.datasketches.tuple.adouble Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.tuple.adouble

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-use.html b/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-use.html new file mode 100644 index 000000000..3cd6ef4c0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/adouble/package-use.html @@ -0,0 +1,194 @@ + + + + + +Uses of Package org.apache.datasketches.tuple.adouble (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.tuple.adouble

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSketch.html new file mode 100644 index 000000000..e98c74163 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSketch.html @@ -0,0 +1,753 @@ + + + + + +IntegerSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IntegerSketch

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IntegerSketch

        +
        public IntegerSketch​(int lgK,
        +                     IntegerSummary.Mode mode)
        +
        Constructs this sketch with given lgK.
        +
        +
        Parameters:
        +
        lgK - Log_base2 of Nominal Entries. + See Nominal Entries
        +
        mode - The IntegerSummary mode to be used
        +
        +
      • +
      + + + +
        +
      • +

        IntegerSketch

        +
        public IntegerSketch​(int lgK,
        +                     int lgResizeFactor,
        +                     float samplingProbability,
        +                     IntegerSummary.Mode mode)
        +
        Creates this sketch with the following parameters:
        +
        +
        Parameters:
        +
        lgK - Log_base2 of Nominal Entries.
        +
        lgResizeFactor - log2(resizeFactor) - value from 0 to 3: +
        + 0 - no resizing (max size allocated),
        + 1 - double internal hash table each time it reaches a threshold
        + 2 - grow four times
        + 3 - grow eight times (default)
        + 
        +
        samplingProbability - See Sampling Probability
        +
        mode - The IntegerSummary mode to be used
        +
        +
      • +
      + + + +
        +
      • +

        IntegerSketch

        +
        @Deprecated
        +public IntegerSketch​(org.apache.datasketches.memory.Memory mem,
        +                     IntegerSummary.Mode mode)
        +
        Deprecated. +
        As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
        +
        +
        Constructs this sketch from a Memory image, which must be from an IntegerSketch, and + usually with data.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        mode - The IntegerSummary mode to be used
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public void update​(String key,
        +                   Integer value)
        +
        Description copied from class: UpdatableSketch
        +
        Updates this sketch with a String key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Overrides:
        +
        update in class UpdatableSketch<Integer,​IntegerSummary>
        +
        Parameters:
        +
        key - The given String key
        +
        value - The given U value
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long key,
        +                   Integer value)
        +
        Description copied from class: UpdatableSketch
        +
        Updates this sketch with a long key and U value. + The value is passed to update() method of the Summary object associated with the key
        +
        +
        Overrides:
        +
        update in class UpdatableSketch<Integer,​IntegerSummary>
        +
        Parameters:
        +
        key - The given long key
        +
        value - The given U value
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public int getRetainedEntries()
        +
        +
        Specified by:
        +
        getRetainedEntries in class Sketch<S extends Summary>
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public int getCountLessThanThetaLong​(long thetaLong)
        +
        Description copied from class: Sketch
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Specified by:
        +
        getCountLessThanThetaLong in class Sketch<S extends Summary>
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        getNominalEntries

        +
        public int getNominalEntries()
        +
        Get configured nominal number of entries
        +
        +
        Returns:
        +
        nominal number of entries
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Get log_base2 of Nominal Entries
        +
        +
        Returns:
        +
        log_base2 of Nominal Entries
        +
        +
      • +
      + + + +
        +
      • +

        getSamplingProbability

        +
        public float getSamplingProbability()
        +
        Get configured sampling probability
        +
        +
        Returns:
        +
        sampling probability
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentCapacity

        +
        public int getCurrentCapacity()
        +
        Get current capacity
        +
        +
        Returns:
        +
        current capacity
        +
        +
      • +
      + + + +
        +
      • +

        getResizeFactor

        +
        public ResizeFactor getResizeFactor()
        +
        Get configured resize factor
        +
        +
        Returns:
        +
        resize factor
        +
        +
      • +
      + + + +
        +
      • +

        trim

        +
        public void trim()
        +
        Rebuilds reducing the actual number of entries to the nominal number of entries if needed
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch an empty state.
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactSketch<S> compact()
        +
        Converts the current state of the sketch into a compact sketch
        +
        +
        Specified by:
        +
        compact in class Sketch<S extends Summary>
        +
        Returns:
        +
        compact sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        @Deprecated
        +public byte[] toByteArray()
        +
        Deprecated. +
        As of 3.0.0, serializing an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Serializing a CompactSketch is not deprecated.
        +
        +
        This serializes an UpdatableSketch (QuickSelectSketch).
        +
        +
        Specified by:
        +
        toByteArray in class Sketch<S extends Summary>
        +
        Returns:
        +
        serialized representation of an UpdatableSketch (QuickSelectSketch).
        +
        +
      • +
      + + + + + +
        +
      • +

        insertSummary

        +
        protected void insertSummary​(int index,
        +                             S summary)
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.Mode.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.Mode.html new file mode 100644 index 000000000..e9e69a76b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.Mode.html @@ -0,0 +1,426 @@ + + + + + +IntegerSummary.Mode (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum IntegerSummary.Mode

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        Sum

        +
        public static final IntegerSummary.Mode Sum
        +
        The aggregation mode is the summation function. +

        New retained value = previous retained value + incoming value

        +
      • +
      + + + +
        +
      • +

        Min

        +
        public static final IntegerSummary.Mode Min
        +
        The aggregation mode is the minimum function. +

        New retained value = min(previous retained value, incoming value)

        +
      • +
      + + + +
        +
      • +

        Max

        +
        public static final IntegerSummary.Mode Max
        +
        The aggregation mode is the maximum function. +

        New retained value = max(previous retained value, incoming value)

        +
      • +
      + + + +
        +
      • +

        AlwaysOne

        +
        public static final IntegerSummary.Mode AlwaysOne
        +
        The aggregation mode is always one. +

        New retained value = 1

        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static IntegerSummary.Mode[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (IntegerSummary.Mode c : IntegerSummary.Mode.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static IntegerSummary.Mode valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.html new file mode 100644 index 000000000..77d22e4fb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummary.html @@ -0,0 +1,456 @@ + + + + + +IntegerSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IntegerSummary

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.aninteger.IntegerSummary
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Summary, UpdatableSummary<Integer>
    +
    +
    +
    public class IntegerSummary
    +extends Object
    +implements UpdatableSummary<Integer>
    +
    Summary for generic tuple sketches of type Integer. + This summary keeps an Integer value. On update a predefined operation is performed depending on + the mode. + Supported modes: Sum, Min, Max, AlwaysOne, Increment. The default mode is Sum.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IntegerSummary

        +
        public IntegerSummary​(IntegerSummary.Mode mode)
        +
        Creates an instance of IntegerSummary with a given mode.
        +
        +
        Parameters:
        +
        mode - update mode. This should not be called by a user.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        copy

        +
        public IntegerSummary copy()
        +
        Description copied from interface: Summary
        +
        Deep copy. + +

        Caution: This must implement a deep copy.

        +
        +
        Specified by:
        +
        copy in interface Summary
        +
        Returns:
        +
        deep copy of the Summary
        +
        +
      • +
      + + + +
        +
      • +

        getValue

        +
        public int getValue()
        +
        +
        Returns:
        +
        current value of the IntegerSummary
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from interface: Summary
        +
        This is to serialize a Summary instance to a byte array. + +

        The user should encode in the byte array its total size, which is used during + deserialization, especially if the Summary has variable sized elements.

        +
        +
        Specified by:
        +
        toByteArray in interface Summary
        +
        Returns:
        +
        serialized representation of the Summary
        +
        +
      • +
      + + + +
        +
      • +

        fromMemory

        +
        public static DeserializeResult<IntegerSummary> fromMemory​(org.apache.datasketches.memory.Memory mem)
        +
        Creates an instance of the IntegerSummary given a serialized representation
        +
        +
        Parameters:
        +
        mem - Memory object with serialized IntegerSummary
        +
        Returns:
        +
        DeserializedResult object, which contains a IntegerSummary object and number of bytes + read from the Memory
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryDeserializer.html new file mode 100644 index 000000000..95245d254 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryDeserializer.html @@ -0,0 +1,333 @@ + + + + + +IntegerSummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IntegerSummaryDeserializer

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.aninteger.IntegerSummaryDeserializer
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IntegerSummaryDeserializer

        +
        public IntegerSummaryDeserializer()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapifySummary

        +
        public DeserializeResult<IntegerSummary> heapifySummary​(org.apache.datasketches.memory.Memory mem)
        +
        Description copied from interface: SummaryDeserializer
        +
        This is to create an instance of a Summary given a serialized representation. + The user may assume that the start of the given Memory is the correct place to start + deserializing. However, the user must be able to determine the number of bytes required to + deserialize the summary as the capacity of the given Memory may + include multiple such summaries and may be much larger than required for a single summary.
        +
        +
        Specified by:
        +
        heapifySummary in interface SummaryDeserializer<IntegerSummary>
        +
        Parameters:
        +
        mem - Memory object with serialized representation of a Summary
        +
        Returns:
        +
        DeserializedResult object, which contains a Summary object and number of bytes read + from the Memory
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryFactory.html new file mode 100644 index 000000000..dede362f6 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummaryFactory.html @@ -0,0 +1,330 @@ + + + + + +IntegerSummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IntegerSummaryFactory

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.aninteger.IntegerSummaryFactory
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IntegerSummaryFactory

        +
        public IntegerSummaryFactory​(IntegerSummary.Mode summaryMode)
        +
        Creates an instance of IntegerSummaryFactory with a given mode
        +
        +
        Parameters:
        +
        summaryMode - summary mode
        +
        +
      • +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummarySetOperations.html new file mode 100644 index 000000000..7284b7fe4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/IntegerSummarySetOperations.html @@ -0,0 +1,382 @@ + + + + + +IntegerSummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IntegerSummarySetOperations

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.aninteger.IntegerSummarySetOperations
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IntegerSummarySetOperations

        +
        public IntegerSummarySetOperations​(IntegerSummary.Mode unionSummaryMode,
        +                                   IntegerSummary.Mode intersectionSummaryMode)
        +
        Creates a new instance with two modes
        +
        +
        Parameters:
        +
        unionSummaryMode - for unions
        +
        intersectionSummaryMode - for intersections
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        union

        +
        public IntegerSummary union​(IntegerSummary a,
        +                            IntegerSummary b)
        +
        Description copied from interface: SummarySetOperations
        +
        This is called by the union operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Specified by:
        +
        union in interface SummarySetOperations<IntegerSummary>
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        union of Summary A and Summary B
        +
        +
      • +
      + + + +
        +
      • +

        intersection

        +
        public IntegerSummary intersection​(IntegerSummary a,
        +                                   IntegerSummary b)
        +
        Description copied from interface: SummarySetOperations
        +
        This is called by the intersection operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Specified by:
        +
        intersection in interface SummarySetOperations<IntegerSummary>
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        intersection of Summary A and Summary B
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSketch.html new file mode 100644 index 000000000..f87f39761 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSketch.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.aninteger.IntegerSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.aninteger.IntegerSketch

+
+
No usage of org.apache.datasketches.tuple.aninteger.IntegerSketch
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.Mode.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.Mode.html new file mode 100644 index 000000000..d9708a8e3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.Mode.html @@ -0,0 +1,258 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.html new file mode 100644 index 000000000..0d3524609 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummary.html @@ -0,0 +1,261 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.aninteger.IntegerSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.aninteger.IntegerSummary

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryDeserializer.html new file mode 100644 index 000000000..fcc6e08eb --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryDeserializer.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.aninteger.IntegerSummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.aninteger.IntegerSummaryDeserializer

+
+
No usage of org.apache.datasketches.tuple.aninteger.IntegerSummaryDeserializer
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryFactory.html new file mode 100644 index 000000000..9a4d53c9d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummaryFactory.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.aninteger.IntegerSummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.aninteger.IntegerSummaryFactory

+
+
No usage of org.apache.datasketches.tuple.aninteger.IntegerSummaryFactory
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummarySetOperations.html new file mode 100644 index 000000000..be1ed55b4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/class-use/IntegerSummarySetOperations.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.aninteger.IntegerSummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.aninteger.IntegerSummarySetOperations

+
+
No usage of org.apache.datasketches.tuple.aninteger.IntegerSummarySetOperations
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-summary.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-summary.html new file mode 100644 index 000000000..f96bdd180 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-summary.html @@ -0,0 +1,212 @@ + + + + + +org.apache.datasketches.tuple.aninteger (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.tuple.aninteger

+
+
+
+ + +
This package is for a generic implementation of the Tuple sketch for single Integer value.
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-tree.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-tree.html new file mode 100644 index 000000000..1f4514dd5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-tree.html @@ -0,0 +1,190 @@ + + + + + +org.apache.datasketches.tuple.aninteger Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.tuple.aninteger

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-use.html b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-use.html new file mode 100644 index 000000000..76662f1e3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/aninteger/package-use.html @@ -0,0 +1,194 @@ + + + + + +Uses of Package org.apache.datasketches.tuple.aninteger (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.tuple.aninteger

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotB.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotB.html new file mode 100644 index 000000000..c608fefaa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotB.html @@ -0,0 +1,331 @@ + + + + + +ArrayOfDoublesAnotB (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesAnotB

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotB
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    ArrayOfDoublesAnotBImpl
    +
    +
    +
    public abstract class ArrayOfDoublesAnotB
    +extends Object
    +
    Computes a set difference of two tuple sketches of type ArrayOfDoubles
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public abstract void update​(ArrayOfDoublesSketch a,
        +                            ArrayOfDoublesSketch b)
        +
        Perform A-and-not-B set operation on the two given sketches. + A null sketch is interpreted as an empty sketch. + This is not an accumulating update. Calling update() more than once + without calling getResult() will discard the result of previous update(). + Both input sketches must have the same numValues.
        +
        +
        Parameters:
        +
        a - The incoming sketch for the first argument
        +
        b - The incoming sketch for the second argument
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract ArrayOfDoublesCompactSketch getResult()
        +
        Gets the result of this operation in the form of a ArrayOfDoublesCompactSketch
        +
        +
        Returns:
        +
        compact sketch representing the result of the operation
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public abstract ArrayOfDoublesCompactSketch getResult​(org.apache.datasketches.memory.WritableMemory mem)
        +
        Gets the result of this operation in the form of a ArrayOfDoublesCompactSketch
        +
        +
        Parameters:
        +
        mem - memory for the result (can be null)
        +
        Returns:
        +
        compact sketch representing the result of the operation (off-heap if memory is + provided)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotBImpl.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotBImpl.html new file mode 100644 index 000000000..372a8d33e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotBImpl.html @@ -0,0 +1,351 @@ + + + + + +ArrayOfDoublesAnotBImpl (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesAnotBImpl

+
+
+ +
+
    +
  • +
    +
    public class ArrayOfDoublesAnotBImpl
    +extends ArrayOfDoublesAnotB
    +
    Computes a set difference, A-AND-NOT-B, of two ArrayOfDoublesSketches. + +

    This class includes a stateless operation as follows:

    + +
    
    + CompactSketch csk = anotb.aNotB(ArrayOfDoublesSketch skA, ArrayOfDoublesSketch skB);
    + 
    +
    +
    Author:
    +
    Lee Rhodes
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public void update​(ArrayOfDoublesSketch skA,
        +                   ArrayOfDoublesSketch skB)
        +
        Description copied from class: ArrayOfDoublesAnotB
        +
        Perform A-and-not-B set operation on the two given sketches. + A null sketch is interpreted as an empty sketch. + This is not an accumulating update. Calling update() more than once + without calling getResult() will discard the result of previous update(). + Both input sketches must have the same numValues.
        +
        +
        Specified by:
        +
        update in class ArrayOfDoublesAnotB
        +
        Parameters:
        +
        skA - The incoming sketch for the first argument
        +
        skB - The incoming sketch for the second argument
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getResult

        +
        public ArrayOfDoublesCompactSketch getResult​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Description copied from class: ArrayOfDoublesAnotB
        +
        Gets the result of this operation in the form of a ArrayOfDoublesCompactSketch
        +
        +
        Specified by:
        +
        getResult in class ArrayOfDoublesAnotB
        +
        Parameters:
        +
        dstMem - memory for the result (can be null)
        +
        Returns:
        +
        compact sketch representing the result of the operation (off-heap if memory is + provided)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCombiner.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCombiner.html new file mode 100644 index 000000000..7e959e704 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCombiner.html @@ -0,0 +1,264 @@ + + + + + +ArrayOfDoublesCombiner (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ArrayOfDoublesCombiner

+
+
+
+
    +
  • +
    +
    public interface ArrayOfDoublesCombiner
    +
    Combines two arrays of double values for use with ArrayOfDoubles tuple sketches
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      double[]combine​(double[] a, + double[] b) +
      Method of combining two arrays of double values
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        combine

        +
        double[] combine​(double[] a,
        +                 double[] b)
        +
        Method of combining two arrays of double values
        +
        +
        Parameters:
        +
        a - Array A.
        +
        b - Array B.
        +
        Returns:
        +
        Result of combining A and B
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCompactSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCompactSketch.html new file mode 100644 index 000000000..dfc99ddc3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesCompactSketch.html @@ -0,0 +1,315 @@ + + + + + +ArrayOfDoublesCompactSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesCompactSketch

+
+
+ +
+
    +
  • +
    +
    public abstract class ArrayOfDoublesCompactSketch
    +extends ArrayOfDoublesSketch
    +
    Top level compact tuple sketch of type ArrayOfDoubles. Compact sketches are never created + directly. They are created as a result of the compact() method on a QuickSelectSketch + or the getResult() method of a set operation like Union, Intersection or AnotB. + Compact sketch consists of a compact list (i.e. no intervening spaces) of hash values, + corresponding list of double values, and a value for theta. The lists may or may + not be ordered. A compact sketch is read-only.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getCurrentBytes

        +
        public int getCurrentBytes()
        +
        Description copied from class: ArrayOfDoublesSketch
        +
        For compact sketches this is the same as getMaxBytes().
        +
        +
        Specified by:
        +
        getCurrentBytes in class ArrayOfDoublesSketch
        +
        Returns:
        +
        the current number of bytes for this sketch when serialized.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxBytes

        +
        public int getMaxBytes()
        +
        +
        Specified by:
        +
        getMaxBytes in class ArrayOfDoublesSketch
        +
        Returns:
        +
        the maximum number of bytes for this sketch when serialized.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesIntersection.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesIntersection.html new file mode 100644 index 000000000..9ee4762cf --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesIntersection.html @@ -0,0 +1,361 @@ + + + + + +ArrayOfDoublesIntersection (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesIntersection

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection
    • +
    +
  • +
+
+
    +
  • +
    +
    public abstract class ArrayOfDoublesIntersection
    +extends Object
    +
    Computes the intersection of two or more tuple sketches of type ArrayOfDoubles. + A new instance represents the Universal Set. + Every update() computes an intersection with the internal set + and can only reduce the internal set.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        intersect

        +
        public void intersect​(ArrayOfDoublesSketch tupleSketch,
        +                      ArrayOfDoublesCombiner combiner)
        +
        Performs a stateful intersection of the internal set with the given tupleSketch. + The given tupleSketch and the internal state must have the same numValues.
        +
        +
        Parameters:
        +
        tupleSketch - Input sketch to intersect with the internal set.
        +
        combiner - Method of combining two arrays of double values
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public ArrayOfDoublesCompactSketch getResult()
        +
        Gets the internal set as an on-heap compact sketch.
        +
        +
        Returns:
        +
        Result of the intersections so far as a compact sketch.
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public ArrayOfDoublesCompactSketch getResult​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Gets the result of stateful intersections so far.
        +
        +
        Parameters:
        +
        dstMem - Memory for the compact sketch (can be null).
        +
        Returns:
        +
        Result of the intersections so far as a compact sketch.
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets the internal set to the initial state, which represents the Universal Set
        +
      • +
      + + + +
        +
      • +

        createSketch

        +
        protected abstract org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesQuickSelectSketch createSketch​(int nomEntries,
        +                                                                                                             int numValues,
        +                                                                                                             long seed)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSetOperationBuilder.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSetOperationBuilder.html new file mode 100644 index 000000000..589986460 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSetOperationBuilder.html @@ -0,0 +1,559 @@ + + + + + +ArrayOfDoublesSetOperationBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesSetOperationBuilder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder
    • +
    +
  • +
+
+
    +
  • +
    +
    public class ArrayOfDoublesSetOperationBuilder
    +extends Object
    +
    Builds set operations object for tuple sketches of type ArrayOfDoubles.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_NOMINAL_ENTRIES

        +
        public static final int DEFAULT_NOMINAL_ENTRIES
        +
        Default Nominal Entries (a.k.a. K)
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_NUMBER_OF_VALUES

        +
        public static final int DEFAULT_NUMBER_OF_VALUES
        +
        Default number of values
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfDoublesSetOperationBuilder

        +
        public ArrayOfDoublesSetOperationBuilder()
        +
        Creates an instance of the builder with default parameters
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setNominalEntries

        +
        public ArrayOfDoublesSetOperationBuilder setNominalEntries​(int nomEntries)
        +
        This is to set the nominal number of entries.
        +
        +
        Parameters:
        +
        nomEntries - Nominal number of entries. Forced to the nearest power of 2 greater than + given value.
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        setNumberOfValues

        +
        public ArrayOfDoublesSetOperationBuilder setNumberOfValues​(int numValues)
        +
        This is to set the number of double values associated with each key
        +
        +
        Parameters:
        +
        numValues - number of double values
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        setSeed

        +
        public ArrayOfDoublesSetOperationBuilder setSeed​(long seed)
        +
        Sets the long seed value that is required by the hashing function.
        +
        +
        Parameters:
        +
        seed - See seed
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        buildUnion

        +
        public ArrayOfDoublesUnion buildUnion()
        +
        Creates an instance of ArrayOfDoublesUnion based on the current configuration of the builder. + The new instance is allocated on the heap if the memory is not provided.
        +
        +
        Returns:
        +
        an instance of ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        buildUnion

        +
        public ArrayOfDoublesUnion buildUnion​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Creates an instance of ArrayOfDoublesUnion based on the current configuration of the builder + and the given destination memory.
        +
        +
        Parameters:
        +
        dstMem - destination memory to be used by the sketch
        +
        Returns:
        +
        an instance of ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        buildIntersection

        +
        public ArrayOfDoublesIntersection buildIntersection()
        +
        Creates an instance of ArrayOfDoublesIntersection based on the current configuration of the + builder. + The new instance is allocated on the heap if the memory is not provided. + The number of nominal entries is not relevant to this, so it is ignored.
        +
        +
        Returns:
        +
        an instance of ArrayOfDoublesIntersection
        +
        +
      • +
      + + + +
        +
      • +

        buildIntersection

        +
        public ArrayOfDoublesIntersection buildIntersection​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Creates an instance of ArrayOfDoublesIntersection based on the current configuration of the + builder. + The new instance is allocated on the heap if the memory is not provided. + The number of nominal entries is not relevant to this, so it is ignored.
        +
        +
        Parameters:
        +
        dstMem - destination memory to be used by the sketch
        +
        Returns:
        +
        an instance of ArrayOfDoublesIntersection
        +
        +
      • +
      + + + +
        +
      • +

        buildAnotB

        +
        public ArrayOfDoublesAnotB buildAnotB()
        +
        Creates an instance of ArrayOfDoublesAnotB based on the current configuration of the builder. + The memory is not relevant to this, so it is ignored if set. + The number of nominal entries is not relevant to this, so it is ignored.
        +
        +
        Returns:
        +
        an instance of ArrayOfDoublesAnotB
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.html new file mode 100644 index 000000000..8c7bc025d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketch.html @@ -0,0 +1,698 @@ + + + + + +ArrayOfDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesSketch

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    ArrayOfDoublesCompactSketch, ArrayOfDoublesUpdatableSketch
    +
    +
    +
    public abstract class ArrayOfDoublesSketch
    +extends Object
    +
    The base class for the tuple sketch of type ArrayOfDoubles, where an array of double values + is associated with each key. + A primitive array of doubles is used here, as opposed to a generic Summary object, + for improved performance.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static ArrayOfDoublesSketch heapify​(org.apache.datasketches.memory.Memory mem)
        +
        Heapify the given Memory as an ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static ArrayOfDoublesSketch heapify​(org.apache.datasketches.memory.Memory mem,
        +                                           long seed)
        +
        Heapify the given Memory and seed as a ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesSketch wrap​(org.apache.datasketches.memory.Memory mem)
        +
        Wrap the given Memory as an ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesSketch wrap​(org.apache.datasketches.memory.Memory mem,
        +                                        long seed)
        +
        Wrap the given Memory and seed as a ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        getEstimate

        +
        public double getEstimate()
        +
        Estimates the cardinality of the set (number of unique values presented to the sketch)
        +
        +
        Returns:
        +
        best estimate of the number of unique values
        +
        +
      • +
      + + + +
        +
      • +

        getUpperBound

        +
        public double getUpperBound​(int numStdDev)
        +
        Gets the approximate upper error bound given the specified number of Standard Deviations. + This will return getEstimate() if isEmpty() is true.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        Returns:
        +
        the upper bound.
        +
        +
      • +
      + + + +
        +
      • +

        getLowerBound

        +
        public double getLowerBound​(int numStdDev)
        +
        Gets the approximate lower error bound given the specified number of Standard Deviations. + This will return getEstimate() if isEmpty() is true.
        +
        +
        Parameters:
        +
        numStdDev - See Number of Standard Deviations
        +
        Returns:
        +
        the lower bound.
        +
        +
      • +
      + + + +
        +
      • +

        hasMemory

        +
        public abstract boolean hasMemory()
        +
        Returns true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
        Returns:
        +
        true if this sketch's data structure is backed by Memory or WritableMemory.
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        + +
        +
        Returns:
        +
        true if empty.
        +
        +
      • +
      + + + +
        +
      • +

        getNumValues

        +
        public int getNumValues()
        +
        +
        Returns:
        +
        number of double values associated with each key
        +
        +
      • +
      + + + +
        +
      • +

        isEstimationMode

        +
        public boolean isEstimationMode()
        +
        Returns true if the sketch is Estimation Mode (as opposed to Exact Mode). + This is true if theta < 1.0 AND isEmpty() is false.
        +
        +
        Returns:
        +
        true if the sketch is in estimation mode.
        +
        +
      • +
      + + + +
        +
      • +

        getTheta

        +
        public double getTheta()
        +
        Gets the value of theta as a double between zero and one
        +
        +
        Returns:
        +
        the value of theta as a double
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public abstract int getRetainedEntries()
        +
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getMaxBytes

        +
        public abstract int getMaxBytes()
        +
        +
        Returns:
        +
        the maximum number of bytes for this sketch when serialized.
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentBytes

        +
        public abstract int getCurrentBytes()
        +
        For compact sketches this is the same as getMaxBytes().
        +
        +
        Returns:
        +
        the current number of bytes for this sketch when serialized.
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public abstract byte[] toByteArray()
        +
        +
        Returns:
        +
        serialized representation of the sketch
        +
        +
      • +
      + + + +
        +
      • +

        getValues

        +
        public abstract double[][] getValues()
        +
        +
        Returns:
        +
        array of arrays of double values in the sketch
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        compact

        +
        public abstract ArrayOfDoublesCompactSketch compact​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        +
        Parameters:
        +
        dstMem - the destination WritableMemory
        +
        Returns:
        +
        this sketch in compact form, which is immutable.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketchIterator.html new file mode 100644 index 000000000..390febc3e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketchIterator.html @@ -0,0 +1,310 @@ + + + + + +ArrayOfDoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ArrayOfDoublesSketchIterator

+
+
+
+
    +
  • +
    +
    public interface ArrayOfDoublesSketchIterator
    +
    Interface for iterating over tuple sketches of type ArrayOfDoubles
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      longgetKey() +
      Gets a key from the current entry in the sketch, which is a hash + of the original key passed to update().
      +
      double[]getValues() +
      Gets an array of values from the current entry in the sketch.
      +
      booleannext() +
      Advancing the iterator and checking existence of the next entry + is combined here for efficiency.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        next

        +
        boolean next()
        +
        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.
        +
        +
        Returns:
        +
        true if the next element exists
        +
        +
      • +
      + + + +
        +
      • +

        getKey

        +
        long getKey()
        +
        Gets a key from the current entry in the sketch, which is a hash + of the original key passed to update(). The original keys are not + retained. Don't call this before calling next() for the first time + or after getting false from next().
        +
        +
        Returns:
        +
        hash key from the current entry
        +
        +
      • +
      + + + +
        +
      • +

        getValues

        +
        double[] getValues()
        +
        Gets an array of values from the current entry in the sketch. + Don't call this before calling next() for the first time + or after getting false from next().
        +
        +
        Returns:
        +
        array of double values for the current entry (may or may not be a copy)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketches.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketches.html new file mode 100644 index 000000000..a27c2d3f4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesSketches.html @@ -0,0 +1,637 @@ + + + + + +ArrayOfDoublesSketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesSketches

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
    • +
    +
  • +
+
+
    +
  • +
    +
    public final class ArrayOfDoublesSketches
    +extends Object
    +
    Convenient static methods to instantiate tuple sketches of type ArrayOfDoubles.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfDoublesSketches

        +
        public ArrayOfDoublesSketches()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapifySketch

        +
        public static ArrayOfDoublesSketch heapifySketch​(org.apache.datasketches.memory.Memory srcMem)
        +
        Heapify the given Memory as an ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        heapifySketch

        +
        public static ArrayOfDoublesSketch heapifySketch​(org.apache.datasketches.memory.Memory srcMem,
        +                                                 long seed)
        +
        Heapify the given Memory and seed as a ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        heapifyUpdatableSketch

        +
        public static ArrayOfDoublesUpdatableSketch heapifyUpdatableSketch​(org.apache.datasketches.memory.Memory srcMem)
        +
        Heapify the given Memory as an ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        heapifyUpdatableSketch

        +
        public static ArrayOfDoublesUpdatableSketch heapifyUpdatableSketch​(org.apache.datasketches.memory.Memory srcMem,
        +                                                                   long seed)
        +
        Heapify the given Memory and seed as a ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrapSketch

        +
        public static ArrayOfDoublesSketch wrapSketch​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap the given Memory as an ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrapSketch

        +
        public static ArrayOfDoublesSketch wrapSketch​(org.apache.datasketches.memory.Memory srcMem,
        +                                              long seed)
        +
        Wrap the given Memory and seed as a ArrayOfDoublesSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrapUpdatableSketch

        +
        public static ArrayOfDoublesUpdatableSketch wrapUpdatableSketch​(org.apache.datasketches.memory.WritableMemory srcMem)
        +
        Wrap the given WritableMemory as an ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrapUpdatableSketch

        +
        public static ArrayOfDoublesUpdatableSketch wrapUpdatableSketch​(org.apache.datasketches.memory.WritableMemory srcMem,
        +                                                                long seed)
        +
        Wrap the given WritableMemory and seed as a ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        heapifyUnion

        +
        public static ArrayOfDoublesUnion heapifyUnion​(org.apache.datasketches.memory.Memory srcMem)
        +
        Heapify the given Memory as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        heapifyUnion

        +
        public static ArrayOfDoublesUnion heapifyUnion​(org.apache.datasketches.memory.Memory srcMem,
        +                                               long seed)
        +
        Heapify the given Memory and seed as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrapUnion

        +
        public static ArrayOfDoublesUnion wrapUnion​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap the given Memory as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrapUnion

        +
        public static ArrayOfDoublesUnion wrapUnion​(org.apache.datasketches.memory.Memory srcMem,
        +                                            long seed)
        +
        Wrap the given Memory and seed as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrapUnion

        +
        public static ArrayOfDoublesUnion wrapUnion​(org.apache.datasketches.memory.WritableMemory srcMem)
        +
        Wrap the given Memory as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrapUnion

        +
        public static ArrayOfDoublesUnion wrapUnion​(org.apache.datasketches.memory.WritableMemory srcMem,
        +                                            long seed)
        +
        Wrap the given Memory and seed as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUnion.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUnion.html new file mode 100644 index 000000000..ce646cbfa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUnion.html @@ -0,0 +1,528 @@ + + + + + +ArrayOfDoublesUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesUnion

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion
    • +
    +
  • +
+
+
    +
  • +
    +
    public abstract class ArrayOfDoublesUnion
    +extends Object
    +
    The base class for unions of tuple sketches of type ArrayOfDoubles.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static ArrayOfDoublesUnion heapify​(org.apache.datasketches.memory.Memory srcMem)
        +
        Heapify the given Memory as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static ArrayOfDoublesUnion heapify​(org.apache.datasketches.memory.Memory srcMem,
        +                                          long seed)
        +
        Heapify the given Memory and seed as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesUnion wrap​(org.apache.datasketches.memory.Memory srcMem)
        +
        Wrap the given Memory as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesUnion wrap​(org.apache.datasketches.memory.Memory srcMem,
        +                                       long seed)
        +
        Wrap the given Memory and seed as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesUnion wrap​(org.apache.datasketches.memory.WritableMemory srcMem)
        +
        Wrap the given WritableMemory as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesUnion wrap​(org.apache.datasketches.memory.WritableMemory srcMem,
        +                                       long seed)
        +
        Wrap the given WritableMemory and seed as an ArrayOfDoublesUnion
        +
        +
        Parameters:
        +
        srcMem - the given source Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUnion
        +
        +
      • +
      + + + +
        +
      • +

        union

        +
        public void union​(ArrayOfDoublesSketch tupleSketch)
        +
        Updates the union by adding a set of entries from a given sketch, which can be on-heap or off-heap. + Both the given tupleSketch and the internal state of the Union must have the same numValues. + +

        Nulls and empty sketches are ignored.

        +
        +
        Parameters:
        +
        tupleSketch - sketch to add to the union
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public ArrayOfDoublesCompactSketch getResult​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns the resulting union in the form of a compact sketch
        +
        +
        Parameters:
        +
        dstMem - memory for the result (can be null)
        +
        Returns:
        +
        compact sketch representing the union (off-heap if memory is provided)
        +
        +
      • +
      + + + +
        +
      • +

        getResult

        +
        public ArrayOfDoublesCompactSketch getResult()
        +
        Returns the resulting union in the form of a compact sketch
        +
        +
        Returns:
        +
        on-heap compact sketch representing the union
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets the union to an empty state
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        +
        Returns:
        +
        a byte array representation of this object
        +
        +
      • +
      + + + +
        +
      • +

        getMaxBytes

        +
        public static int getMaxBytes​(int nomEntries,
        +                              int numValues)
        +
        +
        Parameters:
        +
        nomEntries - Nominal number of entries. Forced to the nearest power of 2 greater than or equal to + given value.
        +
        numValues - Number of double values to keep for each key
        +
        Returns:
        +
        maximum required storage bytes given nomEntries and numValues
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketch.html new file mode 100644 index 000000000..97df3eaa8 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketch.html @@ -0,0 +1,659 @@ + + + + + +ArrayOfDoublesUpdatableSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesUpdatableSketch

+
+
+ +
+
    +
  • +
    +
    public abstract class ArrayOfDoublesUpdatableSketch
    +extends ArrayOfDoublesSketch
    +
    The top level for updatable tuple sketches of type ArrayOfDoubles.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapify

        +
        public static ArrayOfDoublesUpdatableSketch heapify​(org.apache.datasketches.memory.Memory mem)
        +
        Heapify the given Memory as an ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        heapify

        +
        public static ArrayOfDoublesUpdatableSketch heapify​(org.apache.datasketches.memory.Memory mem,
        +                                                    long seed)
        +
        Heapify the given Memory and seed as a ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesUpdatableSketch wrap​(org.apache.datasketches.memory.WritableMemory mem)
        +
        Wrap the given WritableMemory as an ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        wrap

        +
        public static ArrayOfDoublesUpdatableSketch wrap​(org.apache.datasketches.memory.WritableMemory mem,
        +                                                 long seed)
        +
        Wrap the given WritableMemory and seed as a ArrayOfDoublesUpdatableSketch
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        seed - the given seed
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long key,
        +                   double[] values)
        +
        Updates this sketch with a long key and double values. + The values will be stored or added to the ones associated with the key
        +
        +
        Parameters:
        +
        key - The given long key
        +
        values - The given values
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(double key,
        +                   double[] values)
        +
        Updates this sketch with a double key and double values. + The values will be stored or added to the ones associated with the key
        +
        +
        Parameters:
        +
        key - The given double key
        +
        values - The given values
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(String key,
        +                   double[] values)
        +
        Updates this sketch with a String key and double values. + The values will be stored or added to the ones associated with the key
        +
        +
        Parameters:
        +
        key - The given String key
        +
        values - The given values
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(byte[] key,
        +                   double[] values)
        +
        Updates this sketch with a byte[] key and double values. + The values will be stored or added to the ones associated with the key
        +
        +
        Parameters:
        +
        key - The given byte[] key
        +
        values - The given values
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(int[] key,
        +                   double[] values)
        +
        Updates this sketch with a int[] key and double values. + The values will be stored or added to the ones associated with the key
        +
        +
        Parameters:
        +
        key - The given int[] key
        +
        values - The given values
        +
        +
      • +
      + + + +
        +
      • +

        update

        +
        public void update​(long[] key,
        +                   double[] values)
        +
        Updates this sketch with a long[] key and double values. + The values will be stored or added to the ones associated with the key
        +
        +
        Parameters:
        +
        key - The given long[] key
        +
        values - The given values
        +
        +
      • +
      + + + +
        +
      • +

        getNominalEntries

        +
        public abstract int getNominalEntries()
        +
        Gets the configured nominal number of entries
        +
        +
        Returns:
        +
        nominal number of entries
        +
        +
      • +
      + + + +
        +
      • +

        getResizeFactor

        +
        public abstract ResizeFactor getResizeFactor()
        +
        Gets the configured resize factor
        +
        +
        Returns:
        +
        resize factor
        +
        +
      • +
      + + + +
        +
      • +

        getSamplingProbability

        +
        public abstract float getSamplingProbability()
        +
        Gets the configured sampling probability
        +
        +
        Returns:
        +
        sampling probability
        +
        +
      • +
      + + + +
        +
      • +

        trim

        +
        public abstract void trim()
        +
        Rebuilds reducing the actual number of entries to the nominal number of entries if needed
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public abstract void reset()
        +
        Resets this sketch an empty state.
        +
      • +
      + + + + + + + +
        +
      • +

        compact

        +
        public ArrayOfDoublesCompactSketch compact​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Gets an off-heap compact representation of the sketch using the given memory
        +
        +
        Specified by:
        +
        compact in class ArrayOfDoublesSketch
        +
        Parameters:
        +
        dstMem - memory for the compact sketch (can be null)
        +
        Returns:
        +
        compact sketch (off-heap if memory is provided)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketchBuilder.html new file mode 100644 index 000000000..bd25136ee --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesUpdatableSketchBuilder.html @@ -0,0 +1,460 @@ + + + + + +ArrayOfDoublesUpdatableSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfDoublesUpdatableSketchBuilder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder
    • +
    +
  • +
+
+
    +
  • +
    +
    public class ArrayOfDoublesUpdatableSketchBuilder
    +extends Object
    +
    For building a new ArrayOfDoublesUpdatableSketch
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfDoublesUpdatableSketchBuilder

        +
        public ArrayOfDoublesUpdatableSketchBuilder()
        +
        Creates an instance of builder with default parameters
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setNominalEntries

        +
        public ArrayOfDoublesUpdatableSketchBuilder setNominalEntries​(int nomEntries)
        +
        This is to set the nominal number of entries.
        +
        +
        Parameters:
        +
        nomEntries - Nominal number of entries. Forced to the nearest power of 2 greater than + or equal to given value.
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        setResizeFactor

        +
        public ArrayOfDoublesUpdatableSketchBuilder setResizeFactor​(ResizeFactor resizeFactor)
        +
        This is to set the resize factor. + Value of X1 means that the maximum capacity is allocated from the start. + Default resize factor is X8.
        +
        +
        Parameters:
        +
        resizeFactor - value of X1, X2, X4 or X8
        +
        Returns:
        +
        this UpdatableSketchBuilder
        +
        +
      • +
      + + + +
        +
      • +

        setSamplingProbability

        +
        public ArrayOfDoublesUpdatableSketchBuilder setSamplingProbability​(float samplingProbability)
        +
        This is to set sampling probability. + Default probability is 1.
        +
        +
        Parameters:
        +
        samplingProbability - sampling probability from 0 to 1
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        setNumberOfValues

        +
        public ArrayOfDoublesUpdatableSketchBuilder setNumberOfValues​(int numValues)
        +
        This is to set the number of double values associated with each key
        +
        +
        Parameters:
        +
        numValues - number of double values
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + + + + + +
        +
      • +

        build

        +
        public ArrayOfDoublesUpdatableSketch build()
        +
        Returns an ArrayOfDoublesUpdatableSketch with the current configuration of this Builder.
        +
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      + + + +
        +
      • +

        build

        +
        public ArrayOfDoublesUpdatableSketch build​(org.apache.datasketches.memory.WritableMemory dstMem)
        +
        Returns an ArrayOfDoublesUpdatableSketch with the current configuration of this Builder.
        +
        +
        Parameters:
        +
        dstMem - instance of Memory to be used by the sketch
        +
        Returns:
        +
        an ArrayOfDoublesUpdatableSketch
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotB.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotB.html new file mode 100644 index 000000000..5cdb0f409 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotB.html @@ -0,0 +1,214 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotB (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotB

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotBImpl.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotBImpl.html new file mode 100644 index 000000000..ef15e28b3 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesAnotBImpl.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotBImpl (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotBImpl

+
+
No usage of org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesAnotBImpl
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCombiner.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCombiner.html new file mode 100644 index 000000000..39c17e85b --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCombiner.html @@ -0,0 +1,198 @@ + + + + + +Uses of Interface org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCombiner (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCombiner

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCompactSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCompactSketch.html new file mode 100644 index 000000000..4cf1af0b9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesCompactSketch.html @@ -0,0 +1,266 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCompactSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesCompactSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesIntersection.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesIntersection.html new file mode 100644 index 000000000..c84a1f643 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesIntersection.html @@ -0,0 +1,206 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesIntersection

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSetOperationBuilder.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSetOperationBuilder.html new file mode 100644 index 000000000..cecc7da86 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSetOperationBuilder.html @@ -0,0 +1,211 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSetOperationBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketch.html new file mode 100644 index 000000000..fa1ab21dc --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketch.html @@ -0,0 +1,313 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketchIterator.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketchIterator.html new file mode 100644 index 000000000..e87a7a5f2 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketchIterator.html @@ -0,0 +1,195 @@ + + + + + +Uses of Interface org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketchIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketches.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketches.html new file mode 100644 index 000000000..0922f5a70 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesSketches.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches

+
+
No usage of org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketches
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUnion.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUnion.html new file mode 100644 index 000000000..7068432af --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUnion.html @@ -0,0 +1,295 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUnion

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use ArrayOfDoublesUnion 
    PackageDescription
    org.apache.datasketches.tuple.arrayofdoubles +
    This package is for a concrete implementation of the Tuple sketch for an array of double values.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of ArrayOfDoublesUnion in org.apache.datasketches.tuple.arrayofdoubles

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.datasketches.tuple.arrayofdoubles that return ArrayOfDoublesUnion 
      Modifier and TypeMethodDescription
      ArrayOfDoublesUnionArrayOfDoublesSetOperationBuilder.buildUnion() +
      Creates an instance of ArrayOfDoublesUnion based on the current configuration of the builder.
      +
      ArrayOfDoublesUnionArrayOfDoublesSetOperationBuilder.buildUnion​(org.apache.datasketches.memory.WritableMemory dstMem) +
      Creates an instance of ArrayOfDoublesUnion based on the current configuration of the builder + and the given destination memory.
      +
      static ArrayOfDoublesUnionArrayOfDoublesUnion.heapify​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify the given Memory as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesUnion.heapify​(org.apache.datasketches.memory.Memory srcMem, + long seed) +
      Heapify the given Memory and seed as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesSketches.heapifyUnion​(org.apache.datasketches.memory.Memory srcMem) +
      Heapify the given Memory as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesSketches.heapifyUnion​(org.apache.datasketches.memory.Memory srcMem, + long seed) +
      Heapify the given Memory and seed as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesUnion.wrap​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap the given Memory as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesUnion.wrap​(org.apache.datasketches.memory.Memory srcMem, + long seed) +
      Wrap the given Memory and seed as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesUnion.wrap​(org.apache.datasketches.memory.WritableMemory srcMem) +
      Wrap the given WritableMemory as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesUnion.wrap​(org.apache.datasketches.memory.WritableMemory srcMem, + long seed) +
      Wrap the given WritableMemory and seed as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesSketches.wrapUnion​(org.apache.datasketches.memory.Memory srcMem) +
      Wrap the given Memory as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesSketches.wrapUnion​(org.apache.datasketches.memory.Memory srcMem, + long seed) +
      Wrap the given Memory and seed as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesSketches.wrapUnion​(org.apache.datasketches.memory.WritableMemory srcMem) +
      Wrap the given Memory as an ArrayOfDoublesUnion
      +
      static ArrayOfDoublesUnionArrayOfDoublesSketches.wrapUnion​(org.apache.datasketches.memory.WritableMemory srcMem, + long seed) +
      Wrap the given Memory and seed as an ArrayOfDoublesUnion
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketch.html new file mode 100644 index 000000000..af6410df0 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketch.html @@ -0,0 +1,264 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketchBuilder.html new file mode 100644 index 000000000..5e957f36f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/class-use/ArrayOfDoublesUpdatableSketchBuilder.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesUpdatableSketchBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-summary.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-summary.html new file mode 100644 index 000000000..7b9c8b661 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-summary.html @@ -0,0 +1,252 @@ + + + + + +org.apache.datasketches.tuple.arrayofdoubles (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.tuple.arrayofdoubles

+
+
+
+ + +
This package is for a concrete implementation of the Tuple sketch for an array of double values.
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-tree.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-tree.html new file mode 100644 index 000000000..86a03e9a7 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-tree.html @@ -0,0 +1,186 @@ + + + + + +org.apache.datasketches.tuple.arrayofdoubles Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.tuple.arrayofdoubles

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-use.html b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-use.html new file mode 100644 index 000000000..a344b9179 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/arrayofdoubles/package-use.html @@ -0,0 +1,243 @@ + + + + + +Uses of Package org.apache.datasketches.tuple.arrayofdoubles (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.tuple.arrayofdoubles

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/AnotB.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/AnotB.html new file mode 100644 index 000000000..507963360 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/AnotB.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.AnotB (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.AnotB

+
+
No usage of org.apache.datasketches.tuple.AnotB
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/CompactSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/CompactSketch.html new file mode 100644 index 000000000..01ca1ef17 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/CompactSketch.html @@ -0,0 +1,293 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.CompactSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.CompactSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/DeserializeResult.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/DeserializeResult.html new file mode 100644 index 000000000..653628e18 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/DeserializeResult.html @@ -0,0 +1,297 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.DeserializeResult (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.DeserializeResult

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/Filter.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Filter.html new file mode 100644 index 000000000..d4edf4b18 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Filter.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.Filter (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.Filter

+
+
No usage of org.apache.datasketches.tuple.Filter
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/Intersection.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Intersection.html new file mode 100644 index 000000000..4aa3ab65a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Intersection.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.Intersection (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.Intersection

+
+
No usage of org.apache.datasketches.tuple.Intersection
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/JaccardSimilarity.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/JaccardSimilarity.html new file mode 100644 index 000000000..df9cdff8a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/JaccardSimilarity.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.JaccardSimilarity (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.JaccardSimilarity

+
+
No usage of org.apache.datasketches.tuple.JaccardSimilarity
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.SketchType.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.SketchType.html new file mode 100644 index 000000000..c9a15b7fa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.SketchType.html @@ -0,0 +1,232 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.SerializerDeserializer.SketchType (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.SerializerDeserializer.SketchType

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.html new file mode 100644 index 000000000..1ec43b16f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SerializerDeserializer.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.SerializerDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.SerializerDeserializer

+
+
No usage of org.apache.datasketches.tuple.SerializerDeserializer
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketch.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketch.html new file mode 100644 index 000000000..6e33d15ad --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketch.html @@ -0,0 +1,596 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.Sketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.Sketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketches.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketches.html new file mode 100644 index 000000000..9b2606163 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Sketches.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.Sketches (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.Sketches

+
+
No usage of org.apache.datasketches.tuple.Sketches
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/Summary.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Summary.html new file mode 100644 index 000000000..753fb9d98 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Summary.html @@ -0,0 +1,630 @@ + + + + + +Uses of Interface org.apache.datasketches.tuple.Summary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.tuple.Summary

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryDeserializer.html new file mode 100644 index 000000000..356fda637 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryDeserializer.html @@ -0,0 +1,312 @@ + + + + + +Uses of Interface org.apache.datasketches.tuple.SummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.tuple.SummaryDeserializer

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryFactory.html new file mode 100644 index 000000000..e15f61dfa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummaryFactory.html @@ -0,0 +1,355 @@ + + + + + +Uses of Interface org.apache.datasketches.tuple.SummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.tuple.SummaryFactory

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummarySetOperations.html new file mode 100644 index 000000000..0ea5b51f9 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/SummarySetOperations.html @@ -0,0 +1,394 @@ + + + + + +Uses of Interface org.apache.datasketches.tuple.SummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.tuple.SummarySetOperations

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/TupleSketchIterator.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/TupleSketchIterator.html new file mode 100644 index 000000000..3d5a3d0ee --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/TupleSketchIterator.html @@ -0,0 +1,204 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.TupleSketchIterator (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.TupleSketchIterator

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/Union.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Union.html new file mode 100644 index 000000000..8510e441e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Union.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.Union (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.Union

+
+
No usage of org.apache.datasketches.tuple.Union
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketch.html new file mode 100644 index 000000000..a18dc283e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketch.html @@ -0,0 +1,342 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.UpdatableSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.UpdatableSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketchBuilder.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketchBuilder.html new file mode 100644 index 000000000..4e7a11e37 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSketchBuilder.html @@ -0,0 +1,213 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.UpdatableSketchBuilder (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.UpdatableSketchBuilder

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSummary.html new file mode 100644 index 000000000..25da7c6e4 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/UpdatableSummary.html @@ -0,0 +1,330 @@ + + + + + +Uses of Interface org.apache.datasketches.tuple.UpdatableSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.datasketches.tuple.UpdatableSummary

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/class-use/Util.html b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Util.html new file mode 100644 index 000000000..23abeec88 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/class-use/Util.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.Util (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.Util

+
+
No usage of org.apache.datasketches.tuple.Util
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/package-summary.html b/docs/5.0.X/org/apache/datasketches/tuple/package-summary.html new file mode 100644 index 000000000..da27e4212 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/package-summary.html @@ -0,0 +1,316 @@ + + + + + +org.apache.datasketches.tuple (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.tuple

+
+
+
+ + +
The tuple package contains a number of sketches based on the same + fundamental algorithms of the Theta Sketch Framework and extend these + concepts for whole new families of sketches.
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    Summary +
    Interface for user-defined Summary, which is associated with every hash in a tuple sketch
    +
    SummaryDeserializer<S extends Summary> +
    Interface for deserializing user-defined Summary
    +
    SummaryFactory<S extends Summary> +
    Interface for user-defined SummaryFactory
    +
    SummarySetOperations<S extends Summary> +
    This is to provide methods of producing unions and intersections of two Summary objects.
    +
    UpdatableSummary<U> +
    Interface for updating user-defined Summary
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AnotB<S extends Summary> +
    Computes a set difference, A-AND-NOT-B, of two generic tuple sketches.
    +
    CompactSketch<S extends Summary> +
    CompactSketches are never created directly.
    +
    DeserializeResult<T> +
    Returns an object and its size in bytes as a result of a deserialize operation
    +
    Filter<T extends Summary> +
    Class for filtering entries from a Sketch given a Summary
    +
    Intersection<S extends Summary> +
    Computes an intersection of two or more generic tuple sketches or generic tuple sketches + combined with theta sketches.
    +
    JaccardSimilarity +
    Jaccard similarity of two Tuple Sketches, or alternatively, of a Tuple and Theta Sketch.
    +
    SerializerDeserializer +
    Multipurpose serializer-deserializer for a collection of sketches defined by the enum.
    +
    Sketch<S extends Summary> +
    This is an equivalent to org.apache.datasketches.theta.Sketch with + addition of a user-defined Summary object associated with every unique entry + in the sketch.
    +
    Sketches +
    Convenient static methods to instantiate generic tuple sketches.
    +
    TupleSketchIterator<S extends Summary> +
    Iterator over a generic tuple sketch
    +
    Union<S extends Summary> +
    Compute the union of two or more generic tuple sketches or generic tuple sketches combined with + theta sketches.
    +
    UpdatableSketch<U,​S extends UpdatableSummary<U>> +
    An extension of QuickSelectSketch<S>, which can be updated with many types of keys.
    +
    UpdatableSketchBuilder<U,​S extends UpdatableSummary<U>> +
    For building a new generic tuple UpdatableSketch
    +
    Util +
    Common utility functions for Tuples
    +
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    SerializerDeserializer.SketchType +
    Defines the sketch classes that this SerializerDeserializer can handle.
    +
    +
  • +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/package-tree.html b/docs/5.0.X/org/apache/datasketches/tuple/package-tree.html new file mode 100644 index 000000000..0eea2131d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/package-tree.html @@ -0,0 +1,207 @@ + + + + + +org.apache.datasketches.tuple Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.tuple

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/package-use.html b/docs/5.0.X/org/apache/datasketches/tuple/package-use.html new file mode 100644 index 000000000..dcd39cecc --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/package-use.html @@ -0,0 +1,532 @@ + + + + + +Uses of Package org.apache.datasketches.tuple (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.tuple

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSketch.html new file mode 100644 index 000000000..6cad12af5 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSketch.html @@ -0,0 +1,771 @@ + + + + + +ArrayOfStringsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfStringsSketch

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfStringsSketch

        +
        public ArrayOfStringsSketch()
        +
        Constructs new sketch with default K = 4096 (lgK = 12), default ResizeFactor=X8, + and default p = 1.0.
        +
      • +
      + + + +
        +
      • +

        ArrayOfStringsSketch

        +
        public ArrayOfStringsSketch​(int lgK)
        +
        Constructs new sketch with default ResizeFactor=X8, default p = 1.0 and given lgK.
        +
        +
        Parameters:
        +
        lgK - Log_base2 of Nominal Entries. + See Nominal Entries
        +
        +
      • +
      + + + + + + + +
        +
      • +

        ArrayOfStringsSketch

        +
        @Deprecated
        +public ArrayOfStringsSketch​(org.apache.datasketches.memory.Memory mem)
        +
        Deprecated. +
        As of 3.0.0, heapifying an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Heapifying a CompactSketch is not deprecated.
        +
        +
        Constructs this sketch from a Memory image, which must be from an ArrayOfStringsSketch, and + usually with data.
        +
        +
        Parameters:
        +
        mem - the given Memory
        +
        +
      • +
      + + + +
        +
      • +

        ArrayOfStringsSketch

        +
        public ArrayOfStringsSketch​(ArrayOfStringsSketch sketch)
        +
        Copy Constructor
        +
        +
        Parameters:
        +
        sketch - the sketch to copy
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        update

        +
        public void update​(String[] strArrKey,
        +                   String[] strArr)
        +
        Updates the sketch with String arrays for both key and value.
        +
        +
        Parameters:
        +
        strArrKey - the given String array key
        +
        strArr - the given String array value
        +
        +
      • +
      + + + +
        +
      • +

        getRetainedEntries

        +
        public int getRetainedEntries()
        +
        +
        Specified by:
        +
        getRetainedEntries in class Sketch<S extends Summary>
        +
        Returns:
        +
        number of retained entries
        +
        +
      • +
      + + + +
        +
      • +

        getCountLessThanThetaLong

        +
        public int getCountLessThanThetaLong​(long thetaLong)
        +
        Description copied from class: Sketch
        +
        Gets the number of hash values less than the given theta expressed as a long.
        +
        +
        Specified by:
        +
        getCountLessThanThetaLong in class Sketch<S extends Summary>
        +
        Parameters:
        +
        thetaLong - the given theta as a long between zero and Long.MAX_VALUE.
        +
        Returns:
        +
        the number of hash values less than the given thetaLong.
        +
        +
      • +
      + + + +
        +
      • +

        getNominalEntries

        +
        public int getNominalEntries()
        +
        Get configured nominal number of entries
        +
        +
        Returns:
        +
        nominal number of entries
        +
        +
      • +
      + + + +
        +
      • +

        getLgK

        +
        public int getLgK()
        +
        Get log_base2 of Nominal Entries
        +
        +
        Returns:
        +
        log_base2 of Nominal Entries
        +
        +
      • +
      + + + +
        +
      • +

        getSamplingProbability

        +
        public float getSamplingProbability()
        +
        Get configured sampling probability
        +
        +
        Returns:
        +
        sampling probability
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentCapacity

        +
        public int getCurrentCapacity()
        +
        Get current capacity
        +
        +
        Returns:
        +
        current capacity
        +
        +
      • +
      + + + +
        +
      • +

        getResizeFactor

        +
        public ResizeFactor getResizeFactor()
        +
        Get configured resize factor
        +
        +
        Returns:
        +
        resize factor
        +
        +
      • +
      + + + +
        +
      • +

        trim

        +
        public void trim()
        +
        Rebuilds reducing the actual number of entries to the nominal number of entries if needed
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets this sketch an empty state.
        +
      • +
      + + + +
        +
      • +

        compact

        +
        public CompactSketch<S> compact()
        +
        Converts the current state of the sketch into a compact sketch
        +
        +
        Specified by:
        +
        compact in class Sketch<S extends Summary>
        +
        Returns:
        +
        compact sketch
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        @Deprecated
        +public byte[] toByteArray()
        +
        Deprecated. +
        As of 3.0.0, serializing an UpdatableSketch is deprecated. + This capability will be removed in a future release. + Serializing a CompactSketch is not deprecated.
        +
        +
        This serializes an UpdatableSketch (QuickSelectSketch).
        +
        +
        Specified by:
        +
        toByteArray in class Sketch<S extends Summary>
        +
        Returns:
        +
        serialized representation of an UpdatableSketch (QuickSelectSketch).
        +
        +
      • +
      + + + + + +
        +
      • +

        insertSummary

        +
        protected void insertSummary​(int index,
        +                             S summary)
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummary.html new file mode 100644 index 000000000..59d90eb10 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummary.html @@ -0,0 +1,396 @@ + + + + + +ArrayOfStringsSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfStringsSummary

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.strings.ArrayOfStringsSummary
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        copy

        +
        public ArrayOfStringsSummary copy()
        +
        Description copied from interface: Summary
        +
        Deep copy. + +

        Caution: This must implement a deep copy.

        +
        +
        Specified by:
        +
        copy in interface Summary
        +
        Returns:
        +
        deep copy of the Summary
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Description copied from interface: Summary
        +
        This is to serialize a Summary instance to a byte array. + +

        The user should encode in the byte array its total size, which is used during + deserialization, especially if the Summary has variable sized elements.

        +
        +
        Specified by:
        +
        toByteArray in interface Summary
        +
        Returns:
        +
        serialized representation of the Summary
        +
        +
      • +
      + + + + + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object summary)
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        getValue

        +
        public String[] getValue()
        +
        +
        Returns:
        +
        the nodes array for this summary.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryDeserializer.html new file mode 100644 index 000000000..48f41325e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryDeserializer.html @@ -0,0 +1,333 @@ + + + + + +ArrayOfStringsSummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfStringsSummaryDeserializer

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryDeserializer
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfStringsSummaryDeserializer

        +
        public ArrayOfStringsSummaryDeserializer()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        heapifySummary

        +
        public DeserializeResult<ArrayOfStringsSummary> heapifySummary​(org.apache.datasketches.memory.Memory mem)
        +
        Description copied from interface: SummaryDeserializer
        +
        This is to create an instance of a Summary given a serialized representation. + The user may assume that the start of the given Memory is the correct place to start + deserializing. However, the user must be able to determine the number of bytes required to + deserialize the summary as the capacity of the given Memory may + include multiple such summaries and may be much larger than required for a single summary.
        +
        +
        Specified by:
        +
        heapifySummary in interface SummaryDeserializer<ArrayOfStringsSummary>
        +
        Parameters:
        +
        mem - Memory object with serialized representation of a Summary
        +
        Returns:
        +
        DeserializedResult object, which contains a Summary object and number of bytes read + from the Memory
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryFactory.html new file mode 100644 index 000000000..d010b2d31 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummaryFactory.html @@ -0,0 +1,322 @@ + + + + + +ArrayOfStringsSummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfStringsSummaryFactory

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryFactory
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummarySetOperations.html new file mode 100644 index 000000000..718315564 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/ArrayOfStringsSummarySetOperations.html @@ -0,0 +1,370 @@ + + + + + +ArrayOfStringsSummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayOfStringsSummarySetOperations

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.datasketches.tuple.strings.ArrayOfStringsSummarySetOperations
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayOfStringsSummarySetOperations

        +
        public ArrayOfStringsSummarySetOperations()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        union

        +
        public ArrayOfStringsSummary union​(ArrayOfStringsSummary a,
        +                                   ArrayOfStringsSummary b)
        +
        Description copied from interface: SummarySetOperations
        +
        This is called by the union operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Specified by:
        +
        union in interface SummarySetOperations<ArrayOfStringsSummary>
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        union of Summary A and Summary B
        +
        +
      • +
      + + + +
        +
      • +

        intersection

        +
        public ArrayOfStringsSummary intersection​(ArrayOfStringsSummary a,
        +                                          ArrayOfStringsSummary b)
        +
        Description copied from interface: SummarySetOperations
        +
        This is called by the intersection operator when both sketches have the same hash value. + +

        Caution: Do not modify the input Summary objects. Also do not return them directly, + unless they are immutable (most Summary objects are not). For mutable Summary objects, it is + important to create a new Summary object with the correct contents to be returned. Do not + return null summaries.

        +
        +
        Specified by:
        +
        intersection in interface SummarySetOperations<ArrayOfStringsSummary>
        +
        Parameters:
        +
        a - Summary from sketch A
        +
        b - Summary from sketch B
        +
        Returns:
        +
        intersection of Summary A and Summary B
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSketch.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSketch.html new file mode 100644 index 000000000..72796953d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSketch.html @@ -0,0 +1,240 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.strings.ArrayOfStringsSketch (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.strings.ArrayOfStringsSketch

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummary.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummary.html new file mode 100644 index 000000000..f4bc55caa --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummary.html @@ -0,0 +1,254 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.strings.ArrayOfStringsSummary (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.strings.ArrayOfStringsSummary

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryDeserializer.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryDeserializer.html new file mode 100644 index 000000000..fc971dd9e --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryDeserializer.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryDeserializer (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryDeserializer

+
+
No usage of org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryDeserializer
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryFactory.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryFactory.html new file mode 100644 index 000000000..443ff697a --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummaryFactory.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryFactory (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryFactory

+
+
No usage of org.apache.datasketches.tuple.strings.ArrayOfStringsSummaryFactory
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummarySetOperations.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummarySetOperations.html new file mode 100644 index 000000000..2d85d60a6 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/class-use/ArrayOfStringsSummarySetOperations.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class org.apache.datasketches.tuple.strings.ArrayOfStringsSummarySetOperations (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.datasketches.tuple.strings.ArrayOfStringsSummarySetOperations

+
+
No usage of org.apache.datasketches.tuple.strings.ArrayOfStringsSummarySetOperations
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/package-summary.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/package-summary.html new file mode 100644 index 000000000..5f890e264 --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/package-summary.html @@ -0,0 +1,188 @@ + + + + + +org.apache.datasketches.tuple.strings (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.datasketches.tuple.strings

+
+
+
+ + +
This package is for a generic implementation of the Tuple sketch for single String value.
+
+ +
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/package-tree.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/package-tree.html new file mode 100644 index 000000000..3bd5d332d --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/package-tree.html @@ -0,0 +1,176 @@ + + + + + +org.apache.datasketches.tuple.strings Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.datasketches.tuple.strings

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/org/apache/datasketches/tuple/strings/package-use.html b/docs/5.0.X/org/apache/datasketches/tuple/strings/package-use.html new file mode 100644 index 000000000..d4371635f --- /dev/null +++ b/docs/5.0.X/org/apache/datasketches/tuple/strings/package-use.html @@ -0,0 +1,213 @@ + + + + + +Uses of Package org.apache.datasketches.tuple.strings (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.datasketches.tuple.strings

+
+
+ +
+
+ + + diff --git a/docs/5.0.X/overview-summary.html b/docs/5.0.X/overview-summary.html new file mode 100644 index 000000000..eaf65146d --- /dev/null +++ b/docs/5.0.X/overview-summary.html @@ -0,0 +1,23 @@ + + + + + +datasketches-java 5.0.2 API + + + + + + + +
+ +

index.html

+
+ + diff --git a/docs/5.0.X/overview-tree.html b/docs/5.0.X/overview-tree.html new file mode 100644 index 000000000..411a8f59b --- /dev/null +++ b/docs/5.0.X/overview-tree.html @@ -0,0 +1,455 @@ + + + + + +Class Hierarchy (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Annotation Type Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/docs/5.0.X/package-search-index.js b/docs/5.0.X/package-search-index.js new file mode 100644 index 000000000..5f351290a --- /dev/null +++ b/docs/5.0.X/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"org.apache.datasketches"},{"l":"org.apache.datasketches.common"},{"l":"org.apache.datasketches.cpc"},{"l":"org.apache.datasketches.fdt"},{"l":"org.apache.datasketches.frequencies"},{"l":"org.apache.datasketches.hash"},{"l":"org.apache.datasketches.hll"},{"l":"org.apache.datasketches.hllmap"},{"l":"org.apache.datasketches.kll"},{"l":"org.apache.datasketches.partitions"},{"l":"org.apache.datasketches.quantiles"},{"l":"org.apache.datasketches.quantilescommon"},{"l":"org.apache.datasketches.req"},{"l":"org.apache.datasketches.sampling"},{"l":"org.apache.datasketches.theta"},{"l":"org.apache.datasketches.thetacommon"},{"l":"org.apache.datasketches.tuple"},{"l":"org.apache.datasketches.tuple.adouble"},{"l":"org.apache.datasketches.tuple.aninteger"},{"l":"org.apache.datasketches.tuple.arrayofdoubles"},{"l":"org.apache.datasketches.tuple.strings"}] \ No newline at end of file diff --git a/docs/5.0.X/package-search-index.zip b/docs/5.0.X/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..e4a5da162cbb5fb3d6261f542780e0dbfa05c1d2 GIT binary patch literal 351 zcmWIWW@Zs#;Nak3=+JA5U_b(rKz2c5a&}^Rs%~*=Vo`F2Zf0IeYK2}_aeiL!MQgr8 z20RQGRxda+fq6qAbJ>xEsO_DvYGzpoaTJyZiEg|V{lrH7-<^AHXKu!H@P$i=&Dc0= zab_wvQ{ca&es+C7w)8R2JYRU;Gj-dAMrUg#=hz9qcY1v<^H5x(vDv00O)Aoi^?F<3 zhptO9A?nIP=^JJ;M5c5RnDVJmOwl^!f@W&v z9ixSQkrKhxFG{~mEIhX8>(T?-zQ5%^$$eXLYU%m4uYZdNc(Zf#eUP}k8|c4&W(I}; jZ$>5&21FPj%YniG72ph!0B=?{kWxk + + + + + +Sketch Library Dictionary + + +

Sketch Library Dictionary

+ +

Sketch Accuracy

+Refers to sketch accuracy... + +

Alpha TCF

+The Alpha Theta Choosing Function (TCF) and the theory behind it is fully described in the +Theta Sketch Framework paper. +The alpha algorithm is optimized for speed and accuracy in a real-time sketch +building / estimating environment. +

One of the properties of the Alpha Algorithm used for cache management within a sketch is that +the value of Theta Long is always up-to-date. There may be +dirty hash +values in the cache, but the Alpha Algorithm estimation function ignores them.

+ +

Default Nominal Entries

+In Theta Sketches, the default nominal entries of 4096 is provided as a convenience for those cases where the +number of entries is not provided. +A sketch of 4096 entries has a Relative Standard Error (RSE) of +/- 1.56% at a confidence of 68%; +or equivalently, a Relative Error of +/- 3.1% at a confidence of 95.4%. + +

Default Update Seed

+

In Theta Sketches, the default Update Hash Seed 9001 is a prime number that was chosen +very early on in experimental testing. +Choosing a seed is somewhat arbitrary, and this particular seed is not superior to other seeds. +

In performing set operations on two sketches it is critical that the same hash +function and seed was used for both sketches, otherwise the assumed 1:1 relationship +between the original source key value and the hashed bit string would be violated. +Once you have developed a history of stored sketches you are stuck with your chosen seed. +So don't change it! +Update Hash Seed + +

Degenerate Sketch

+A sketch is considered degenerate if it has never reached reached +Estimation Mode where the count of its retained hash values is +exact and less than Nominal Entries (or k entries) +and no estimation is needed. This is also referred to as Exact Mode. + +

Destination Memory

+The destination Memory for this object. If not required it may be null. If not null and large +enough the returned object will be backed by this Memory. +If null, the returned object will be on the Java heap. + +

Destination Ordered

+In Theta Sketches, this refers to the ordering of hash values in a returned CompactSketch. +If true, the internal hash values will be ordered. This will enable much higher +performance during union (merge) operations but at the cost of a sort, which may not be +desirable in some applications, especially real-time. + +

Dirty Hash

+For the Theta Alpha Sketch, a retained hash value is considered dirty if it is ≥ Theta Long or < 0. +See Valid Hash. + +

isEmpty()

+In Theta Sketches, the state isEmpty() for a sketch means that the sketch cache has zero hash values and that none of the +update methods have been called with valid data. In other words, the sketch has never seen any data. +This state is equivalent to "null" in the sense that it is safe to exclude empty sketches from union operations. However, an empty sketch +will impact intersections and difference set operations. + +

Note that isEmpty() does not always mean that theta is 1.0 because if p < 1.0, theta will be set +equal to p during construction. +Also, a cache of zero values (getRetainedEntries(true) = 0) does not mean that the sketch is Empty since +set intersection or difference operations can result in a sketch with zero values. +If the sourcing sketches had seen data then a resulting intersection or difference sketch will be not Empty +and have valid upper and lower bounds even if the cache has zero values. In other words, the resulting sketch represents +a valid distribution of data that just happens to have zero samples collected from it. + +

Note also that a virgin Intersection object will return isEmpty() == false. This is because a virgin Intersection object represents +the Universe Set, which is clearly not empty.

+ +

These are subtle distinctions and exist for mathematical correctness. Excluding sketches that just have getRetainedEntries(true) = 0 +from set operations them could result in impacting the accuracy of results. + +

Estimation Mode

+Once a Theta Sketch exceeds the configured Nominal Entries, or k, number of retained hash values, +the sketch transitions into estimation mode where it must now estimate the population of uniques that +the retained entries represent. A sketch can also be in estimation mode if the sketch was configured with a +Sampling Probability < 1.0. +Estimation Mode = (θ < 1.0) & NOT empty. + +

lgNomLongs

+For Theta Sketches, the Log base 2 of the number of Nominal Entries. + +

lgArrLongs

+For Theta Sketches, the Log base 2 of the size of the internal hash table in 64-bit longs. + +

Memory

+The backing Memory object which may be a source or destination. + +

Nominal Entries

+For Theta Sketches and depending on the specific sketch, the constructor data type is int or String. +Acceptable values for constructing new sketches are positive integers that are powers of two. +This parameter specifies the target nominal number of entries (a.k.a. k) that will be retained in the internal cache +and ultimately determines the accuracy of the sketch (see Sketch Accuracy). +Internally each entry is retained as a long of 8 bytes. + +

The reason it is called "nominal" is that depending on the specific algorithm of the sketch, the actual +number of entries retained by the sketch after the sketch goes into estimation mode +may differ from the configured value. For the AlphaSketch the number of retained entries statistically varies +but has a mean of k. For the QuickSelect sketches, the number of retained entries will statistically +vary from k to almost 2*k. + +

Each sketch type also has a minimum acceptable value for this value. For QuickSelect Sketches this value is 16 and for +Alpha Sketches this value is 512. Specifying a value less than this minimum value just results in the minimum value being used. + +

Number of Standard Deviations

+This is a positive number, which may be either an integer (1, 2, or 3) or a double ≤ 3.0. +This value is used in the getUpperBounds(int numStdDev) and +getLowerBounds(int numStdDev) methods and represents (theoretically) the +/- standard deviation from the center of the +Standard Normal Gaussian Distribution. For example: + +

getUpperBound(1) returns the estimated quantile(0.841) of the distribution.
+getLowerBound(1) returns the estimated quantile(0.158) of the distribution.
+getUpperBound(2) returns the estimated quantile(0.977) of the distribution.
+getLowerBound(2) returns the estimated quantile(0.023) of the distribution.
+getUpperBound(3) returns the estimated quantile(0.9986) of the distribution.
+getLowerBound(3) returns the estimated quantile(0.0013) of the distribution.
+

+ +

However, for sketches with small configured values of Nominal Entries < 4096 for Theta or lgConfigK < 12 for HLL, +the error distribution of the sketch becomes quite asymmetric and cannot be approximated with a Gaussian. In these cases the interpretation of +numStdDev is that of an index that returns the quantile of the sketch error distribution that corresponds to fractional normalized rank +of the standard normal distribution at the specified numStdDev. + +

Thus, getUpperBound(1) and getLowerBound(2) represent the 68.3% confidence bounds, +getUpperBound(2) and getLowerBound(2) represent the 95.4% confidence bounds, and +getUpperBound(3) and getLowerBound(3) represent the 99.7% confidence bounds. +
+ +

For some sketches where the error distribution is not Gaussian, special mathematical approximation methods are used. +See Sketch Accuracy.

+ + + +

Quick Select TCF

+The fundamental Theta Sketch QuickSelect algorithm is described in classic algorithm texts by Sedgewick and +is the Theta Choosing Function (TCF) for the QuickSelect Sketches. +When the internal hash table of the sketch reaches its internal +refresh threshold, +the quick select algorithm is used to select the (k+1)th order statistic +from the hash table with a complexity of O(n). +The value of the selected hash becomes the new +Theta Long +and immediately makes some number of entries in the table +dirty. +The rebuild() method is called that rebuilds the hash table removing the +dirty values. +Since the value of Theta Long +is only changed when the hash table needs to be rebuilt, +the values in the hash table are only ever dirty +briefly during the rebuild process. +Thus, all the values in the hash table are always +valid during normal updating of the sketch. +

One of the benefits of using the QuickSelect algorithm for the cache management of the sketch is +that the number of valid hashes ranges from +nominal entries +to the current REBUILD_THRESHOLD, which is nominally 15/16 * cacheSize. +This means that without the user forcing +a rebuild(), the sketch, on average, may be about 50% larger than +nominal entries, about 19% more accurate, and faster.

+ +

Resize Factor

+For Theta Sketches, the Resize Factor is a dynamic, speed performance vs. memory size tradeoff. +The sketches created on-heap and configured with a Resize Factor of > X1 start out with +an internal hash table size that is the smallest submultiple of the the target +Nominal Entries +and larger than the minimum required hash table size for that sketch. +When the sketch needs to be resized larger, then the Resize Factor is used as a multiplier of +the current sketch cache array size.
+"X1" means no resizing is allowed and the sketch will be intialized at full size.
+"X2" means the internal cache will start very small and double in size until the target size is reached.
+Similarly, "X4" is a factor of 4 and "X8 is a factor of 8. + +

Sampling Probability p

+For Theta Sketches, the uniform random pre-sketching sampling probability. +Depending on the specific sketch, the constructor data type is float or String. +Incoming hashed data values are sampled by this probability factor before being submitted to +the sketching algorithm. For example, if p were set to 0.25, then on average, only one +forth of the incoming values, selected uniformly and at random, would be evaluated by the +sketching algorithm to be retained by the sketch. +Its default value is 1.0 (no sampling). +Its value must be in the range: 0 < p ≤ 1.0. +

This mode is particularly useful when merging large numbers of +degenerate sketches. + +

Seed

+For Theta Sketches, the long (64-bit) seed is required by the Update Hash Function. +This seed value is intentionally not serialized along with this sketch in order to provide +some security and protection against "dictionary attacks". +

In order to provide some protection against accidental mixing +of sketches that were generated with different seeds a short, 16-bit, +Seed Hash is stored with the sketch image. +When heapifying or wrapping an UpdateSketch image, which can be either a byte array or a Memory object, +the user must provide the original seed either directly or indirectly by assuming the DEFAULT_UPDATE_SEED. +The provided seed will be hashed and validated against the internal short Seed Hash and an error will be thrown if the seed hashes do not match. +The Set Operations classes, Union, Intersection and AnotB also require the user to provide the seed either directly or indirectly. +

An internal check will be made to make sure that the provided seed does not hash to a 16-bit value of zero. +If it does produce zero, an error will be thrown and the user must provide a different seed value. +
+See also Default Update Seed. + +

Seed Hash

+For Theta and Tuple Sketches, a 16-bit hash of the Update Hash Seed used internally to validate +(1) that two sketches undergoing set operations were, in fact, created using matching Update Hash Seeds; +or (2) that when deserializing or wrapping a sketch image that the caller has the correct seed. + +

Snow Plow Effect

+When coordinated hash tables are merged and if the merging process does not update the target sketch with sufficient randomness, clustering +in the target hash table can be greatly exaggerated causing poor speed performance for both updates and searches. This is called the +"snowplow" effect because of the analogy of visualizing the clusters in a hash table as piles of snow that grow larger and larger. Since the +size of the clusters are only represented by their width (not height like piles of snow), the clusters push themselves out horizontally and +merge together as if they were pushed together with a snowplow. + +

Theta Choosing Function (TCF)

+For Theta Sketches, the Theta Choosing Function (TCF) and the theory behind it is fully described in the +Theta Sketch Framework paper. + +

Theta, θ

+For Theta Sketches, refers to the mathematical random variable θ that represents the current probability +that the next, non-duplicate unique input value presented to the sketch will change the state of the sketch. +Given N uniquified inputs to a sketch configured to retain at most k hashes of the inputs, +θ ≈ k/N, 0 < θ ≤ 1.0, and θ = (double) thetaLong / Long.MAX_VALUE;. +See thetaLong. + +

thetaLong

+For Theta Sketches, the 64-bit, positive long equivalent of theta where
+0 < thetaLongLong.MAX_VALUE, and thetaLong = θ * Long.MAX_VALUE. + +

Theta Sketch Framework

+This framework enables sketches with different algorithms and Theta Choosing Functions +to be arguments to the Union, Intersection and AnotB Set Operations. +This framework also enables the sketches to share estimation, upper and lower bounds algorithms and +a common serialization data structure. +The Theta Sketch Framework, Theta Choosing Functions and the theory behind them is fully described +in the Theta Sketch Framework paper. + +

Update Return State

+For Theta Sketches, this provides useful detail for sketch characterization and debugging. It is not required that any of +these values be monitored during normal operation. +The UpdateReturnState is defined as follows: +
    +
  • InsertedCountIncremented: Inserted, not full, retained_entries_count incremented.
  • +
  • InsertedCountNotIncremented: Inserted, not full, retained-entries-count not incremented +because a dirty value was overridden.
  • +
  • RejectedDuplicate: Rejected as duplicate.
  • +
  • RejectedNullOrEmpty: Rejected because input was null or empty. Only for update objects.
  • +
  • RejectedOverTheta: Rejected because the computed hash was over the current value of thetaLong.
  • +
+ + +

Valid Hash

+For Theta Sketches, a retained hash value is considered valid if it is greater than zero and less than +thetaLong. See Dirty Hash. + + + \ No newline at end of file diff --git a/docs/5.0.X/resources/glass.png b/docs/5.0.X/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/docs/5.0.X/script.js b/docs/5.0.X/script.js new file mode 100644 index 000000000..7dc93c48e --- /dev/null +++ b/docs/5.0.X/script.js @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("module-search-index.json").async("text").then(function(content){ + moduleSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("package-search-index.json").async("text").then(function(content){ + packageSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("type-search-index.json").async("text").then(function(content){ + typeSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("member-search-index.json").async("text").then(function(content){ + memberSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("tag-search-index.json").async("text").then(function(content){ + tagSearchIndex = JSON.parse(content); + }); + }); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/docs/5.0.X/search.js b/docs/5.0.X/search.js new file mode 100644 index 000000000..8492271e7 --- /dev/null +++ b/docs/5.0.X/search.js @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (item.m && ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + if (item.category === catSearchTags) { + if (item.d) { + div.html(label + " (" + item.h + ")
    " + + item.d + "
    "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search").focus(); + } + } + }); +}); diff --git a/docs/5.0.X/serialized-form.html b/docs/5.0.X/serialized-form.html new file mode 100644 index 000000000..f51a7a0b1 --- /dev/null +++ b/docs/5.0.X/serialized-form.html @@ -0,0 +1,211 @@ + + + + + +Serialized Form (datasketches-java 5.0.2 API) + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Serialized Form

    +
    +
    + +
    +
    + + + diff --git a/docs/5.0.X/stylesheet.css b/docs/5.0.X/stylesheet.css new file mode 100644 index 000000000..de945eda2 --- /dev/null +++ b/docs/5.0.X/stylesheet.css @@ -0,0 +1,910 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.constantsSummary caption a:link, .constantsSummary caption a:visited, +.useSummary caption a:link, .useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; + background-color: #FFFFFF; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/docs/5.0.X/type-search-index.js b/docs/5.0.X/type-search-index.js new file mode 100644 index 000000000..a1da34403 --- /dev/null +++ b/docs/5.0.X/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"org.apache.datasketches.theta","l":"AnotB"},{"p":"org.apache.datasketches.tuple","l":"AnotB"},{"p":"org.apache.datasketches.thetacommon","l":"SetOperationCornerCases.AnotbAction"},{"p":"org.apache.datasketches.common","l":"ArrayOfBooleansSerDe"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesAnotB"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesAnotBImpl"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesCombiner"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesCompactSketch"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesIntersection"},{"p":"org.apache.datasketches.common","l":"ArrayOfDoublesSerDe"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesSetOperationBuilder"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesSketch"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesSketches"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesSketchIterator"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesUnion"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesUpdatableSketch"},{"p":"org.apache.datasketches.tuple.arrayofdoubles","l":"ArrayOfDoublesUpdatableSketchBuilder"},{"p":"org.apache.datasketches.common","l":"ArrayOfItemsSerDe"},{"p":"org.apache.datasketches.common","l":"ArrayOfLongsSerDe"},{"p":"org.apache.datasketches.common","l":"ArrayOfNumbersSerDe"},{"p":"org.apache.datasketches.common","l":"ArrayOfStringsSerDe"},{"p":"org.apache.datasketches.tuple.strings","l":"ArrayOfStringsSketch"},{"p":"org.apache.datasketches.tuple.strings","l":"ArrayOfStringsSummary"},{"p":"org.apache.datasketches.tuple.strings","l":"ArrayOfStringsSummaryDeserializer"},{"p":"org.apache.datasketches.tuple.strings","l":"ArrayOfStringsSummaryFactory"},{"p":"org.apache.datasketches.tuple.strings","l":"ArrayOfStringsSummarySetOperations"},{"p":"org.apache.datasketches.common","l":"ArrayOfUtf16StringsSerDe"},{"p":"org.apache.datasketches.quantilescommon","l":"BinarySearch"},{"p":"org.apache.datasketches.thetacommon","l":"BinomialBoundsN"},{"p":"org.apache.datasketches.theta","l":"BitPacking"},{"p":"org.apache.datasketches.common","l":"BoundsOnBinomialProportions"},{"p":"org.apache.datasketches.common","l":"BoundsOnRatiosInSampledSets"},{"p":"org.apache.datasketches.thetacommon","l":"BoundsOnRatiosInThetaSketchedSets"},{"p":"org.apache.datasketches.thetacommon","l":"BoundsOnRatiosInTupleSketchedSets"},{"p":"org.apache.datasketches.partitions","l":"BoundsRule"},{"p":"org.apache.datasketches.common","l":"ByteArrayUtil"},{"p":"org.apache.datasketches.quantiles","l":"ClassicUtil"},{"p":"org.apache.datasketches.quantiles","l":"CompactDoublesSketch"},{"p":"org.apache.datasketches.theta","l":"CompactSketch"},{"p":"org.apache.datasketches.tuple","l":"CompactSketch"},{"p":"org.apache.datasketches.cpc","l":"CompressionCharacterization"},{"p":"org.apache.datasketches.thetacommon","l":"SetOperationCornerCases.CornerCase"},{"p":"org.apache.datasketches.cpc","l":"CpcSketch"},{"p":"org.apache.datasketches.cpc","l":"CpcUnion"},{"p":"org.apache.datasketches.cpc","l":"CpcWrapper"},{"p":"org.apache.datasketches.tuple","l":"DeserializeResult"},{"p":"org.apache.datasketches.tuple.adouble","l":"DoubleSketch"},{"p":"org.apache.datasketches.quantiles","l":"DoublesSketch"},{"p":"org.apache.datasketches.quantiles","l":"DoublesSketchBuilder"},{"p":"org.apache.datasketches.quantiles","l":"DoublesSketchIterator"},{"p":"org.apache.datasketches.quantiles","l":"DoublesSketchSortedView"},{"p":"org.apache.datasketches.quantilescommon","l":"DoublesSortedView"},{"p":"org.apache.datasketches.quantilescommon","l":"DoublesSortedViewIterator"},{"p":"org.apache.datasketches.tuple.adouble","l":"DoubleSummary"},{"p":"org.apache.datasketches.tuple.adouble","l":"DoubleSummaryDeserializer"},{"p":"org.apache.datasketches.tuple.adouble","l":"DoubleSummaryFactory"},{"p":"org.apache.datasketches.tuple.adouble","l":"DoubleSummarySetOperations"},{"p":"org.apache.datasketches.quantiles","l":"DoublesUnion"},{"p":"org.apache.datasketches.quantiles","l":"DoublesUnionBuilder"},{"p":"org.apache.datasketches.frequencies","l":"ErrorType"},{"p":"org.apache.datasketches.common","l":"Family"},{"p":"org.apache.datasketches.fdt","l":"FdtSketch"},{"p":"org.apache.datasketches.tuple","l":"Filter"},{"p":"org.apache.datasketches.quantilescommon","l":"FloatsSortedView"},{"p":"org.apache.datasketches.quantilescommon","l":"FloatsSortedViewIterator"},{"p":"org.apache.datasketches.quantilescommon","l":"GenericInequalitySearch"},{"p":"org.apache.datasketches.quantilescommon","l":"GenericPartitionBoundaries"},{"p":"org.apache.datasketches.quantilescommon","l":"GenericSortedView"},{"p":"org.apache.datasketches.quantilescommon","l":"GenericSortedViewIterator"},{"p":"org.apache.datasketches.fdt","l":"Group"},{"p":"org.apache.datasketches.theta","l":"HashIterator"},{"p":"org.apache.datasketches.thetacommon","l":"HashOperations"},{"p":"org.apache.datasketches.hll","l":"HllSketch"},{"p":"org.apache.datasketches.quantilescommon","l":"GenericInequalitySearch.Inequality"},{"p":"org.apache.datasketches.quantilescommon","l":"InequalitySearch"},{"p":"org.apache.datasketches.tuple.aninteger","l":"IntegerSketch"},{"p":"org.apache.datasketches.tuple.aninteger","l":"IntegerSummary"},{"p":"org.apache.datasketches.tuple.aninteger","l":"IntegerSummaryDeserializer"},{"p":"org.apache.datasketches.tuple.aninteger","l":"IntegerSummaryFactory"},{"p":"org.apache.datasketches.tuple.aninteger","l":"IntegerSummarySetOperations"},{"p":"org.apache.datasketches.thetacommon","l":"SetOperationCornerCases.IntersectAction"},{"p":"org.apache.datasketches.theta","l":"Intersection"},{"p":"org.apache.datasketches.tuple","l":"Intersection"},{"p":"org.apache.datasketches.frequencies","l":"ItemsSketch"},{"p":"org.apache.datasketches.quantiles","l":"ItemsSketch"},{"p":"org.apache.datasketches.quantiles","l":"ItemsSketchIterator"},{"p":"org.apache.datasketches.quantiles","l":"ItemsSketchSortedView"},{"p":"org.apache.datasketches.quantiles","l":"ItemsUnion"},{"p":"org.apache.datasketches.theta","l":"JaccardSimilarity"},{"p":"org.apache.datasketches.tuple","l":"JaccardSimilarity"},{"p":"org.apache.datasketches.kll","l":"KllDoublesSketch"},{"p":"org.apache.datasketches.kll","l":"KllDoublesSketchIterator"},{"p":"org.apache.datasketches.kll","l":"KllDoublesSketchSortedView"},{"p":"org.apache.datasketches.kll","l":"KllFloatsSketch"},{"p":"org.apache.datasketches.kll","l":"KllFloatsSketchIterator"},{"p":"org.apache.datasketches.kll","l":"KllFloatsSketchSortedView"},{"p":"org.apache.datasketches.kll","l":"KllItemsSketch"},{"p":"org.apache.datasketches.kll","l":"KllItemsSketchIterator"},{"p":"org.apache.datasketches.kll","l":"KllItemsSketchSortedView"},{"p":"org.apache.datasketches.kll","l":"KllSketch"},{"p":"org.apache.datasketches.kll","l":"KllSketchIterator"},{"p":"org.apache.datasketches.frequencies","l":"LongsSketch"},{"p":"org.apache.datasketches.cpc","l":"MergingValidation"},{"p":"org.apache.datasketches.tuple.adouble","l":"DoubleSummary.Mode"},{"p":"org.apache.datasketches.tuple.aninteger","l":"IntegerSummary.Mode"},{"p":"org.apache.datasketches.hash","l":"MurmurHash3"},{"p":"org.apache.datasketches.hash","l":"MurmurHash3Adaptor"},{"p":"org.apache.datasketches.quantilescommon","l":"PartitionBoundaries"},{"p":"org.apache.datasketches.partitions","l":"Partitioner.PartitionBoundsRow"},{"p":"org.apache.datasketches.partitions","l":"Partitioner"},{"p":"org.apache.datasketches.quantilescommon","l":"PartitioningFeature"},{"p":"org.apache.datasketches.fdt","l":"PostProcessor"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesAPI"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesDoublesAPI"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesDoublesSketchIterator"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantileSearchCriteria"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesFloatsAPI"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesFloatsSketchIterator"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesGenericAPI"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesGenericSketchIterator"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesSketchIterator"},{"p":"org.apache.datasketches.quantilescommon","l":"QuantilesUtil"},{"p":"org.apache.datasketches.cpc","l":"QuickMergingValidation"},{"p":"org.apache.datasketches.thetacommon","l":"QuickSelect"},{"p":"org.apache.datasketches.req","l":"ReqDebug"},{"p":"org.apache.datasketches.req","l":"ReqSketch"},{"p":"org.apache.datasketches.req","l":"ReqSketchBuilder"},{"p":"org.apache.datasketches.req","l":"ReqSketchIterator"},{"p":"org.apache.datasketches.req","l":"ReqSketchSortedView"},{"p":"org.apache.datasketches.sampling","l":"ReservoirItemsSketch"},{"p":"org.apache.datasketches.sampling","l":"ReservoirItemsUnion"},{"p":"org.apache.datasketches.sampling","l":"ReservoirLongsSketch"},{"p":"org.apache.datasketches.sampling","l":"ReservoirLongsUnion"},{"p":"org.apache.datasketches.common","l":"ResizeFactor"},{"p":"org.apache.datasketches.frequencies","l":"ItemsSketch.Row"},{"p":"org.apache.datasketches.frequencies","l":"LongsSketch.Row"},{"p":"org.apache.datasketches.sampling","l":"SampleSubsetSummary"},{"p":"org.apache.datasketches.tuple","l":"SerializerDeserializer"},{"p":"org.apache.datasketches.theta","l":"SetOperation"},{"p":"org.apache.datasketches.theta","l":"SetOperationBuilder"},{"p":"org.apache.datasketches.thetacommon","l":"SetOperationCornerCases"},{"p":"org.apache.datasketches.theta","l":"Sketch"},{"p":"org.apache.datasketches.tuple","l":"Sketch"},{"p":"org.apache.datasketches.theta","l":"Sketches"},{"p":"org.apache.datasketches.tuple","l":"Sketches"},{"p":"org.apache.datasketches.common","l":"SketchesArgumentException"},{"p":"org.apache.datasketches.common","l":"SketchesException"},{"p":"org.apache.datasketches.common","l":"SketchesReadOnlyException"},{"p":"org.apache.datasketches.common","l":"SketchesStateException"},{"p":"org.apache.datasketches.partitions","l":"SketchFillRequest"},{"p":"org.apache.datasketches.kll","l":"KllSketch.SketchStructure"},{"p":"org.apache.datasketches.kll","l":"KllSketch.SketchType"},{"p":"org.apache.datasketches.tuple","l":"SerializerDeserializer.SketchType"},{"p":"org.apache.datasketches.quantilescommon","l":"SortedView"},{"p":"org.apache.datasketches.quantilescommon","l":"SortedViewIterator"},{"p":"org.apache.datasketches.partitions","l":"Partitioner.StackElement"},{"p":"org.apache.datasketches.cpc","l":"StreamingValidation"},{"p":"org.apache.datasketches.tuple","l":"Summary"},{"p":"org.apache.datasketches.tuple","l":"SummaryDeserializer"},{"p":"org.apache.datasketches.tuple","l":"SummaryFactory"},{"p":"org.apache.datasketches.tuple","l":"SummarySetOperations"},{"p":"org.apache.datasketches.common","l":"SuppressFBWarnings"},{"p":"org.apache.datasketches.cpc","l":"TestUtil"},{"p":"org.apache.datasketches.hll","l":"TgtHllType"},{"p":"org.apache.datasketches.thetacommon","l":"ThetaUtil"},{"p":"org.apache.datasketches.tuple","l":"TupleSketchIterator"},{"p":"org.apache.datasketches.hll","l":"Union"},{"p":"org.apache.datasketches.theta","l":"Union"},{"p":"org.apache.datasketches.tuple","l":"Union"},{"p":"org.apache.datasketches.thetacommon","l":"SetOperationCornerCases.UnionAction"},{"p":"org.apache.datasketches.hllmap","l":"UniqueCountMap"},{"p":"org.apache.datasketches.tuple","l":"UpdatableSketch"},{"p":"org.apache.datasketches.tuple","l":"UpdatableSketchBuilder"},{"p":"org.apache.datasketches.tuple","l":"UpdatableSummary"},{"p":"org.apache.datasketches.quantiles","l":"UpdateDoublesSketch"},{"p":"org.apache.datasketches.theta","l":"UpdateReturnState"},{"p":"org.apache.datasketches.theta","l":"UpdateSketch"},{"p":"org.apache.datasketches.theta","l":"UpdateSketchBuilder"},{"p":"org.apache.datasketches.common","l":"Util"},{"p":"org.apache.datasketches.tuple","l":"Util"},{"p":"org.apache.datasketches.sampling","l":"VarOptItemsSamples.VarOptItemsIterator"},{"p":"org.apache.datasketches.sampling","l":"VarOptItemsSamples"},{"p":"org.apache.datasketches.sampling","l":"VarOptItemsSketch"},{"p":"org.apache.datasketches.sampling","l":"VarOptItemsUnion"},{"p":"org.apache.datasketches.sampling","l":"VarOptItemsSamples.WeightedSample"},{"p":"org.apache.datasketches.hash","l":"XxHash"}] \ No newline at end of file diff --git a/docs/5.0.X/type-search-index.zip b/docs/5.0.X/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..834a354cb3018baf3948c16df55ab039d003408e GIT binary patch literal 1606 zcmZvcYd8}M7{@2K4M~W|C1q^6mkqh(64DxLJJ#G=n$V0;3At=qN(i~_!jei!IWDa^ zCn>ifbE}Bagi_`(bIRSRPp9)d=l6bi|IhP(pZDVrg^-j|1pt9SK)NXz2lxfGA363? z6u~5hfR7FiH3=h~Cd8SB$3&8?E~)pPsyYX%H=%X#VahxB0N!;UqLe(JsB1@csaM-d0|i>L;TGuI#@6%i>}>!qPu# z=Xfeth5K`7BRaR%I#<@iuhU_aE3(obNE$n`-F^Jh5Wzzuvja!Zb`*CylT58ih7v}s z73jNV&w@{}OQsL6N;R{-JkC=c*EXK=HMEroVdQTYz>QPIeSt<@$hP$WfAMP}-fH&= z&P@^H9%F=x&n%*ghSk)15B#+ji09w9kC4||qm7gqwhRHMGrY`Ck#F!EmV$g|4Vw;q z?oi|v9&!rJbbP|9iNrdsT!Lh2>UZX)6|?l8G|9Ssti)E5v z)h<4=G-)|=@?9YVY9zqbO=F$&XYeu;y`CMi&peyPjF^?ytH+cLjPO>*@l@?zW7P8* zENpIUCo_Bk-$@PiTapOJaar-=oeav6R{x_`Jw0F>23S6oRsU5 zcAW<4xhyO>&2QStyEemZw|SR-yF}C9E3?yXvKg=o30F|+n|xJl-NY2=nZp^S3dtRu z>n*ljcP)nb&+oR-Vp^5;+GoG3j>ssjo?bT6Gnu;ebPxio9msBlZe4%Fo_2_?P}tLe z6@Y+eGQ8s`M7kT|mL^#vH54lgGW4rzrocxmLL4-i_x0^X*9d8k8!$Y1>v3z{a$*V^ zU8!sUAx}tpor*4ctKkJAEbC+ix?nb3cS$nFS>9<*%B5xIM~*y_r})?PrwkU%sn}2Q z-`VSyhq37C9!;eD2UN?Xh6sa4Y+Q_WVog~WS*yoJah2k_{lGa0i|_2~J}EJHHg-{* zaC8-Ols4wD&6U1kC;f84B)1_hLD=NF646AM4>$x~>XBH-&Z&Phkt;o~QpiWb-Z~Zz zyMKtPRS(|;)a$z`O1Ak@1a9rqW(JgesrFcas9$Jc8nthNCRVt8JZm8{ zjm|@>~YSiJ=e`FTCd)wZaG+;TyL&=dp|dI zfcqH&d7FGw(#HFuivp0fy~>vxW{*yRMp61@Tcb{;eBJ9;G`FAR5wMcbJiPd^u8|*h zkzX>nE4|T+9Ki`Qy6t82`%Ru-^$BzZ>*?{Y_Yt){DvyOzXIn5U=gX)edlI{R5-TT1 z4%2$~cZsyLEqp}&ASk;P`noOSs8^xNoA-k>JLhX1Vyz0$#uEN+_223%9hBhgYoe1g zfRd~dGq9O+;cmMoCEJT5=dOPR-IHIf7&g7kU0OYk)o1@ zrncv-j*cbeDyx5I9u67V+zqbFi`)T|C^8fBfA*5w~-bwtJ!#}q0$8P}OA9OtH A>;M1& literal 0 HcmV?d00001