úÎir`d˜      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–— SafeúSafe&';=>?Aý4Affine containers, i.e. containing at most 1 elementThis class doesn't have ˜% analogie as it would require using Pointed which is disputed type class. 8traverseAff :: Pointed f => (a -> f b) -> t a -> f (t b) Like ™ *Types from which we can extract histogram. Histogram bin lower bound upper boundoriginal value:  (mi + ma) / 2weight ("area" of the bar)(weight from the right, excludes this binHistogram from centroidsQuantile from the histogram.Mean from the histogram.Variance from the histogram.!Cumulative distribution function.Validate that list of  is a valid "histogram".Composition of  containers is  total weight    š›œ  Safe$ Median, i.e. % 0.5.%'Calculate quantile of a specific value.&Mean./mean (Tree.tdigest [1..100] :: Tree.TDigest 10) Just 50.5Note:2 if you only need the mean, calculate it directly.' Variance.(,Standard deviation, square root of variance.)!Cumulative distribution function.Note:Q if this is the only thing you need, it's more efficient to count this directly.* An alias for %. $%&'()* $%&'()* None->?FV6Q++ is a tree of centroids. compression is a 1/´. The greater the value of  compression, the less likely value merging will happen., Tree node- Empty tree/Total count of samples.+totalWeight (tdigest [1..100] :: TDigest 5)100.01OCenter of left-most centroid. Note: may be different than min element inserted.,minimumValue (tdigest [1..100] :: TDigest 3)1.02PCenter of right-most centroid. Note: may be different than max element inserted.,maximumValue (tdigest [1..100] :: TDigest 3)99.063Constructor which calculates size and total weight.7Balance after right insertion.8Balance after left insertion.9 Alias to ,:Create singular node.; Add two weighted means together.<9Calculate the threshold, i.e. maximum weight of centroid.= Compress +.kReinsert the centroids in "better" order (in original paper: in random) so they have opportunity to merge.;Compression will happen only if size is both: bigger than @ * comp and bigger than A.>BPerform compression, even if current size says it's not necessary.@.Relative size parameter. Hard-coded value: 25.A0Absolute size parameter. Hard-coded value: 1000.D Output the + tree.E ž . FF Check various invariants in the + tree.GInsert single value into +.H$Insert single value, don't compress + even if needed.2For sensibly bounded input, it makes sense to let +I grow (it might grow linearly in size), and after that compress it once.IMake a + of a single data point.JStrict Ÿ over   structure.L+G isn't compressed after de-serialisation, but it can be still smaller.M+ has only strict fields.OBoth ¡ and ¢ are G< total weightquantilecompression (1/´)?t-Digest@return also a "space left in the centroid" value for "shuffling"GelementHelement +-,./0123456789:;<=>?@ABCDEFGHIJ&+,-PONMLK./0123456789:;<=>?@ABCDEFGHIJ+,-None->?FV8` Alias of \.RSTUVWXYZ[\]^_`abRbSTUVWZXY[\]^_a`R£¤ None8äRSTUVWXYZ[\]^_`abNone?1i Median, i.e. j 0.5.j'Calculate quantile of a specific value.kMean.%mean (tdigest [1..100] :: TDigest 10) Just 50.5Note:2 if you only need the mean, calculate it directly.l Variance.m,Standard deviation, square root of variance.n!Cumulative distribution function.Note:Q if this is the only thing you need, it's more efficient to count this directly.o An alias for jijklmnoijklmno NoneV?±+012=>DEFGHIJijklmno+JIGH=>12ijklmno0EFD None@‰+012=>DEFGHIJijklmnoNone->?FVWüpp7 is a vector of centroids plus not yet merged elements.%The size of structure is dictated by  compression, *Öÿ*. And is *O(Öÿ)*.rsum of vector and buffer sizes?actual data. *Invariants:* sorted by mean; length <= 2 Öÿ (soft)uDaddition buffer, elements with weight 1. *Invariants:* length 2 <= ÖÿvDdirection is a hack, so we merge from left and right. *TODO* remove?wSize of structureyOCenter of left-most centroid. Note: may be different than min element inserted.,minimumValue (tdigest [1..100] :: TDigest 3)1.0zPCenter of right-most centroid. Note: may be different than max element inserted.,maximumValue (tdigest [1..100] :: TDigest 3)100.0{OMapping from quantile *q* to notional index *k* with compression parameter *Öÿ*. ksize 42 00.0 ksize 42 142.0q@ is clamped.: ksize 42 242.0} Inverse of {. ksizeInv 42 00.0ksizeInv 42 421.0ksizeInv 42 (ksize 42 0.3)0.3Flush insertion buffer… ž . †† Check various invariants in the p structure.‡Insert single value into p.ˆ$Insert single value, don't compress p even if needed.5This may violate the insertion buffer size invariant.2For sensibly bounded input, it makes sense to let pI grow (it might grow linearly in size), and after that compress it once.‰Make a p of a single data point.ŠStrict Ÿ over   structure.Both ¡ and ¢ are ‡{compression parameter, Öÿ quantile, qnotional index, k}compression parameter, Öÿnotional index, k quantile, q‡elementˆelementpqvutsrwxyz{|}~€‚ƒ„…†‡ˆ‰Š pqrstuvŽŒ‹wxyz{|}~€‚ƒ„…†‡ˆ‰Špqrstuv SafeY=None_F‘ Median, i.e. ’ 0.5.’'Calculate quantile of a specific value.“Mean.%mean (tdigest [1..100] :: TDigest 10) Just 50.5Note:2 if you only need the mean, calculate it directly.” Variance.•,Standard deviation, square root of variance.–!Cumulative distribution function.Note:Q if this is the only thing you need, it's more efficient to count this directly.— An alias for ’‘’“”•–—‘’“”•–— NoneV_Æpwyz‚ƒ…†‡ˆ‰Š‘’“”•–—pЉ‡ˆƒ‚yz‘’“”•–—w…†¥ !"#$%&'()*+,-./01#$%2&3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY4QOPEF9:1#$%23&RZTWXYU1#$%2&344[\]^_89:`abc;deFEfMNOPQRSUWVXY1#$%2&3ghigjkllmgnogjpgjqrstrsu4vw"tdigest-0.2-3slEWxuqoJiDXfJ4YCehw0Data.TDigest.Internal!Data.TDigest.Postprocess.InternalData.TDigest.PostprocessData.TDigest.Tree.InternalData.TDigest.Tree.NonEmptyData.TDigest.Tree.PostprocessData.TDigest.Vector.InternalData.TDigest.Vector.PostprocessData.TDigest.NonEmptyData.TDigest.Tree Data.TDigestData.TDigest.Vector.NonEmptyData.TDigest.VectorSizeCentroidWeightMeanasserteqnegInfposInfAffineaffine fromAffine HasHistogram histogram totalWeightHistBinhbMinhbMaxhbValuehbWeight hbCumWeighthistogramFromCentroidsquantilemeanvariancecdfvalidateHistogram$fSemigroupMean'$fSemigroupVariance$fAffineCompose $fAffineProxy $fAffineMaybe$fAffineIdentity$fHasHistogram[]Maybe$fHasHistogramNonEmptyIdentity $fShowHistBinmedianstddevicdfTDigestNodeNil getCentroidssize minimumValue maximumValue emptyTDigest combineDigestinsertCentroidnodebalanceRbalanceLnode'singNodecombinedCentroid thresholdcompress forceCompress toMVector relMaxSize absMaxSizebalOmegabalAlpha debugPrintvalidvalidateinsertinsert' singletontdigest$fHasHistogramTDigestMaybe$fBinaryTDigest$fNFDataTDigest$fMonoidTDigest$fReducerDoubleTDigest$fSemigroupTDigest $fShowTDigest$fHasHistogramTDigestIdentitytdigestTotalWeight tdigestDatatdigestBufferSize tdigestBuffertdigestDirectionksizeclampksizeInvmergecombineTDigestfinalizesizeCoefficientbaseData.Traversabletraverse Data.FoldablefoldMapVarianceMean' Data.EitherisRightfoldl'Foldable%reducers-3.12.2-I9xH7Apoj90wo6pY6NNV4Data.Semigroup.ReducerconssnocunEmpty