mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-11-14 06:46:56 +00:00
chore: merge feat/narthex-classic-histogram into feat/narthex-histogram-arith
Signed-off-by: Dennis Zhuang <killme2008@gmail.com> # Conflicts: # src/promql/src/histogram_eval.rs # src/promql/src/histogram_eval/native.rs
This commit is contained in:
@@ -18,7 +18,6 @@
|
||||
//! `histogram_stddev` and `histogram_stdvar` over native histograms.
|
||||
|
||||
mod aggregate;
|
||||
mod bounds;
|
||||
mod classic;
|
||||
// `sub`, `copy_to_schema`, `detect_reset` and `equals` are for the native histogram range
|
||||
// functions and binary operators, which build on other branches.
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//! Prometheus `exponentialBounds` (`model/histogram/generic.go`): the bucket bounds in [0.5, 1)
|
||||
//! of exponential schemas 0 to 8, which `getBoundExponential` scales by a power of two.
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub(super) const EXPONENTIAL_BOUNDS: [&[f64]; 9] = [
|
||||
&[
|
||||
0.5,
|
||||
],
|
||||
&[
|
||||
0.5, 0.7071067811865475,
|
||||
],
|
||||
&[
|
||||
0.5, 0.5946035575013605, 0.7071067811865475, 0.8408964152537144,
|
||||
],
|
||||
&[
|
||||
0.5, 0.5452538663326288, 0.5946035575013605, 0.6484197773255048,
|
||||
0.7071067811865475, 0.7711054127039704, 0.8408964152537144, 0.9170040432046711,
|
||||
],
|
||||
&[
|
||||
0.5, 0.5221368912137069, 0.5452538663326288, 0.5693943173783458,
|
||||
0.5946035575013605, 0.620928906036742, 0.6484197773255048, 0.6771277734684463,
|
||||
0.7071067811865475, 0.7384130729697496, 0.7711054127039704, 0.805245165974627,
|
||||
0.8408964152537144, 0.8781260801866495, 0.9170040432046711, 0.9576032806985735,
|
||||
],
|
||||
&[
|
||||
0.5, 0.5109485743270583, 0.5221368912137069, 0.5335702003384117,
|
||||
0.5452538663326288, 0.5571933712979462, 0.5693943173783458, 0.5818624293887887,
|
||||
0.5946035575013605, 0.6076236799902344, 0.620928906036742, 0.6345254785958666,
|
||||
0.6484197773255048, 0.6626183215798706, 0.6771277734684463, 0.6919549409819159,
|
||||
0.7071067811865475, 0.7225904034885232, 0.7384130729697496, 0.7545822137967112,
|
||||
0.7711054127039704, 0.7879904225539431, 0.805245165974627, 0.8228777390769823,
|
||||
0.8408964152537144, 0.8593096490612387, 0.8781260801866495, 0.8973545375015533,
|
||||
0.9170040432046711, 0.9370838170551498, 0.9576032806985735, 0.9785720620876999,
|
||||
],
|
||||
&[
|
||||
0.5, 0.5054446430258502, 0.5109485743270583, 0.5165124395106142,
|
||||
0.5221368912137069, 0.5278225891802786, 0.5335702003384117, 0.5393803988785598,
|
||||
0.5452538663326288, 0.5511912916539204, 0.5571933712979462, 0.5632608093041209,
|
||||
0.5693943173783458, 0.5755946149764913, 0.5818624293887887, 0.5881984958251406,
|
||||
0.5946035575013605, 0.6010783657263515, 0.6076236799902344, 0.6142402680534349,
|
||||
0.620928906036742, 0.6276903785123455, 0.6345254785958666, 0.6414350080393891,
|
||||
0.6484197773255048, 0.6554806057623822, 0.6626183215798706, 0.6698337620266515,
|
||||
0.6771277734684463, 0.6845012114872953, 0.6919549409819159, 0.6994898362691555,
|
||||
0.7071067811865475, 0.7148066691959849, 0.7225904034885232, 0.7304588970903234,
|
||||
0.7384130729697496, 0.7464538641456323, 0.7545822137967112, 0.762799075372269,
|
||||
0.7711054127039704, 0.7795022001189185, 0.7879904225539431, 0.7965710756711334,
|
||||
0.805245165974627, 0.8140137109286738, 0.8228777390769823, 0.8318382901633681,
|
||||
0.8408964152537144, 0.8500531768592616, 0.8593096490612387, 0.8686669176368529,
|
||||
0.8781260801866495, 0.8876882462632604, 0.8973545375015533, 0.9071260877501991,
|
||||
0.9170040432046711, 0.9269895625416926, 0.9370838170551498, 0.9472879907934827,
|
||||
0.9576032806985735, 0.9680308967461471, 0.9785720620876999, 0.9892280131939752,
|
||||
],
|
||||
&[
|
||||
0.5, 0.5027149505564014, 0.5054446430258502, 0.5081891574554764,
|
||||
0.5109485743270583, 0.5137229745593818, 0.5165124395106142, 0.5193170509806894,
|
||||
0.5221368912137069, 0.5249720429003435, 0.5278225891802786, 0.5306886136446309,
|
||||
0.5335702003384117, 0.5364674337629877, 0.5393803988785598, 0.5423091811066545,
|
||||
0.5452538663326288, 0.5482145409081883, 0.5511912916539204, 0.5541842058618393,
|
||||
0.5571933712979462, 0.5602188762048033, 0.5632608093041209, 0.5663192597993595,
|
||||
0.5693943173783458, 0.572486072215902, 0.5755946149764913, 0.5787200368168754,
|
||||
0.5818624293887887, 0.585021884841625, 0.5881984958251406, 0.5913923554921704,
|
||||
0.5946035575013605, 0.5978321960199137, 0.6010783657263515, 0.6043421618132907,
|
||||
0.6076236799902344, 0.6109230164863786, 0.6142402680534349, 0.6175755319684665,
|
||||
0.620928906036742, 0.6243004885946023, 0.6276903785123455, 0.6310986751971253,
|
||||
0.6345254785958666, 0.637970889198196, 0.6414350080393891, 0.6449179367033329,
|
||||
0.6484197773255048, 0.6519406325959679, 0.6554806057623822, 0.659039800633032,
|
||||
0.6626183215798706, 0.6662162735415805, 0.6698337620266515, 0.6734708931164728,
|
||||
0.6771277734684463, 0.6808045103191123, 0.6845012114872953, 0.688217985377265,
|
||||
0.6919549409819159, 0.6957121878859629, 0.6994898362691555, 0.7032879969095076,
|
||||
0.7071067811865475, 0.7109463010845827, 0.7148066691959849, 0.718687998724491,
|
||||
0.7225904034885232, 0.7265139979245261, 0.7304588970903234, 0.7344252166684908,
|
||||
0.7384130729697496, 0.7424225829363761, 0.7464538641456323, 0.7505070348132126,
|
||||
0.7545822137967112, 0.7586795205991071, 0.762799075372269, 0.7669409989204777,
|
||||
0.7711054127039704, 0.7752924388424999, 0.7795022001189185, 0.7837348199827764,
|
||||
0.7879904225539431, 0.7922691326262467, 0.7965710756711334, 0.8008963778413465,
|
||||
0.805245165974627, 0.8096175675974316, 0.8140137109286738, 0.8184337248834821,
|
||||
0.8228777390769823, 0.8273458838280969, 0.8318382901633681, 0.8363550898207981,
|
||||
0.8408964152537144, 0.8454623996346523, 0.8500531768592616, 0.8546688815502312,
|
||||
0.8593096490612387, 0.8639756154809185, 0.8686669176368529, 0.8733836930995842,
|
||||
0.8781260801866495, 0.8828942179666361, 0.8876882462632604, 0.8925083056594671,
|
||||
0.8973545375015533, 0.9022270839033115, 0.9071260877501991, 0.9120516927035263,
|
||||
0.9170040432046711, 0.9219832844793128, 0.9269895625416926, 0.9320230241988943,
|
||||
0.9370838170551498, 0.9421720895161669, 0.9472879907934827, 0.9524316709088368,
|
||||
0.9576032806985735, 0.9628029718180622, 0.9680308967461471, 0.9732872087896164,
|
||||
0.9785720620876999, 0.9838856116165875, 0.9892280131939752, 0.9945994234836328,
|
||||
],
|
||||
&[
|
||||
0.5, 0.5013556375251013, 0.5027149505564014, 0.5040779490592088,
|
||||
0.5054446430258502, 0.5068150424757447, 0.5081891574554764, 0.509566998038869,
|
||||
0.5109485743270583, 0.5123338964485679, 0.5137229745593818, 0.5151158188430205,
|
||||
0.5165124395106142, 0.5179128468009786, 0.5193170509806894, 0.520725062344158,
|
||||
0.5221368912137069, 0.5235525479396449, 0.5249720429003435, 0.526395386502313,
|
||||
0.5278225891802786, 0.5292536613972564, 0.5306886136446309, 0.5321274564422321,
|
||||
0.5335702003384117, 0.5350168559101208, 0.5364674337629877, 0.5379219445313954,
|
||||
0.5393803988785598, 0.5408428074966075, 0.5423091811066545, 0.5437795304588847,
|
||||
0.5452538663326288, 0.5467321995364429, 0.5482145409081883, 0.549700901315111,
|
||||
0.5511912916539204, 0.5526857228508706, 0.5541842058618393, 0.5556867516724088,
|
||||
0.5571933712979462, 0.5587040757836845, 0.5602188762048033, 0.5617377836665098,
|
||||
0.5632608093041209, 0.564787964283144, 0.5663192597993595, 0.5678547070789026,
|
||||
0.5693943173783458, 0.5709381019847808, 0.572486072215902, 0.5740382394200894,
|
||||
0.5755946149764913, 0.5771552102951081, 0.5787200368168754, 0.5802891060137493,
|
||||
0.5818624293887887, 0.5834400184762408, 0.585021884841625, 0.5866080400818185,
|
||||
0.5881984958251406, 0.5897932637314379, 0.5913923554921704, 0.5929957828304968,
|
||||
0.5946035575013605, 0.5962156912915756, 0.5978321960199137, 0.5994530835371903,
|
||||
0.6010783657263515, 0.6027080545025619, 0.6043421618132907, 0.6059806996384005,
|
||||
0.6076236799902344, 0.6092711149137041, 0.6109230164863786, 0.6125793968185725,
|
||||
0.6142402680534349, 0.6159056423670379, 0.6175755319684665, 0.6192499490999082,
|
||||
0.620928906036742, 0.622612415087629, 0.6243004885946023, 0.6259931389331581,
|
||||
0.6276903785123455, 0.6293922197748583, 0.6310986751971253, 0.6328097572894031,
|
||||
0.6345254785958666, 0.6362458516947014, 0.637970889198196, 0.6397006037528346,
|
||||
0.6414350080393891, 0.6431741147730128, 0.6449179367033329, 0.6466664866145447,
|
||||
0.6484197773255048, 0.6501778216898253, 0.6519406325959679, 0.6537082229673385,
|
||||
0.6554806057623822, 0.6572577939746774, 0.659039800633032, 0.6608266388015788,
|
||||
0.6626183215798706, 0.6644148621029772, 0.6662162735415805, 0.6680225691020727,
|
||||
0.6698337620266515, 0.6716498655934177, 0.6734708931164728, 0.6752968579460171,
|
||||
0.6771277734684463, 0.6789636531064505, 0.6808045103191123, 0.6826503586020058,
|
||||
0.6845012114872953, 0.6863570825438342, 0.688217985377265, 0.690083933630119,
|
||||
0.6919549409819159, 0.6938310211492645, 0.6957121878859629, 0.6975984549830999,
|
||||
0.6994898362691555, 0.7013863456101023, 0.7032879969095076, 0.7051948041086352,
|
||||
0.7071067811865475, 0.7090239421602076, 0.7109463010845827, 0.7128738720527471,
|
||||
0.7148066691959849, 0.7167447066838943, 0.718687998724491, 0.7206365595643126,
|
||||
0.7225904034885232, 0.7245495448210174, 0.7265139979245261, 0.7284837772007218,
|
||||
0.7304588970903234, 0.7324393720732029, 0.7344252166684908, 0.7364164454346837,
|
||||
0.7384130729697496, 0.7404151139112358, 0.7424225829363761, 0.7444354947621984,
|
||||
0.7464538641456323, 0.7484777058836176, 0.7505070348132126, 0.7525418658117031,
|
||||
0.7545822137967112, 0.7566280937263048, 0.7586795205991071, 0.7607365094544071,
|
||||
0.762799075372269, 0.7648672334736434, 0.7669409989204777, 0.7690203869158282,
|
||||
0.7711054127039704, 0.7731960915705107, 0.7752924388424999, 0.7773944698885442,
|
||||
0.7795022001189185, 0.7816156449856788, 0.7837348199827764, 0.7858597406461707,
|
||||
0.7879904225539431, 0.7901268813264122, 0.7922691326262467, 0.7944171921585818,
|
||||
0.7965710756711334, 0.7987307989543135, 0.8008963778413465, 0.8030678282083853,
|
||||
0.805245165974627, 0.8074284071024302, 0.8096175675974316, 0.8118126635086642,
|
||||
0.8140137109286738, 0.8162207259936375, 0.8184337248834821, 0.820652723822003,
|
||||
0.8228777390769823, 0.8251087869603088, 0.8273458838280969, 0.8295890460808079,
|
||||
0.8318382901633681, 0.8340936325652911, 0.8363550898207981, 0.8386226785089391,
|
||||
0.8408964152537144, 0.8431763167241966, 0.8454623996346523, 0.8477546807446661,
|
||||
0.8500531768592616, 0.8523579048290255, 0.8546688815502312, 0.8569861239649629,
|
||||
0.8593096490612387, 0.8616394738731368, 0.8639756154809185, 0.8663180910111553,
|
||||
0.8686669176368529, 0.871022112577578, 0.8733836930995842, 0.8757516765159389,
|
||||
0.8781260801866495, 0.8805069215187917, 0.8828942179666361, 0.8852879870317771,
|
||||
0.8876882462632604, 0.890095013257712, 0.8925083056594671, 0.8949281411607002,
|
||||
0.8973545375015533, 0.8997875124702672, 0.9022270839033115, 0.9046732696855155,
|
||||
0.9071260877501991, 0.909585556079304, 0.9120516927035263, 0.9145245157024483,
|
||||
0.9170040432046711, 0.9194902933879467, 0.9219832844793128, 0.9244830347552253,
|
||||
0.9269895625416926, 0.92950288621441, 0.9320230241988943, 0.9345499949706191,
|
||||
0.9370838170551498, 0.93962450902828, 0.9421720895161669, 0.9447265771954693,
|
||||
0.9472879907934827, 0.9498563490882775, 0.9524316709088368, 0.9550139751351947,
|
||||
0.9576032806985735, 0.9601996065815236, 0.9628029718180622, 0.9654133954938133,
|
||||
0.9680308967461471, 0.9706554947643201, 0.9732872087896164, 0.9759260581154889,
|
||||
0.9785720620876999, 0.9812252401044634, 0.9838856116165875, 0.9865531961276168,
|
||||
0.9892280131939752, 0.9919100824251095, 0.9945994234836328, 0.9972960560854698,
|
||||
],
|
||||
];
|
||||
@@ -1,404 +0,0 @@
|
||||
# Generated by promql-compat cmd/narthex-golden-log2exp2 built for amd64: Go math.Log2 and
|
||||
# math.Exp2, which Prometheus uses for native histogram bucket interpolation, as
|
||||
# `<function> <argument bits> <result bits>`. Most arguments are ones where the platform
|
||||
# log2/exp2 differ from Go.
|
||||
log2 4062d9b2bb9a2a77 401cf232d0a9d4ee
|
||||
log2 4097055ed082a8e2 40250cbcb4fc0e2a
|
||||
log2 3b351cb06f8b1b4f c052e666776b22b2
|
||||
log2 3ff54e48fa949ad9 3fda7172fff5e488
|
||||
log2 3fe71cf463d46014 bfde0a02354d87a0
|
||||
log2 3fd971a63b78ce33 bff54ac027a3c7a2
|
||||
log2 3fe1ae8e6496ef48 bfeb62ba8b44eced
|
||||
log2 3fc090819294da9b c007998eb771b372
|
||||
log2 3f6a05b848c34bb5 c02098bd88aa33f6
|
||||
log2 3ba9bd3d28a2033d c051141a4729fa90
|
||||
log2 3fe56caea1b0b215 bfe28597b8ffd8a8
|
||||
log2 3ff24b06c4df98cc 3fc8bb9cb6128c9c
|
||||
log2 3fb233b520432393 c00e8306032af27c
|
||||
log2 3fe8cede481dfc2f bfd78137e92c127e
|
||||
log2 4083a90c5dc716a5 4022982cca875fce
|
||||
log2 3ffb0131917a1d94 3fe82a1444df431c
|
||||
log2 3fd4af472a91b780 bffa12785553d168
|
||||
log2 3fe86def706fda98 bfd8ecc5a538e6c5
|
||||
log2 40f6ac7746ebc3ce 403080c12cc29aa2
|
||||
log2 45b536a01d2d0b48 40571a0ab166e0c2
|
||||
log2 42b7eeedff46587c 40464a5c85e1b894
|
||||
log2 3febcf267156203a bfc9ebdebb21e9bf
|
||||
log2 4274665712e5c9b3 40442cdc8d463be0
|
||||
log2 4015f5a747a75da6 4003a77ba502db44
|
||||
log2 407659264d3f08e4 4020f6d46a952748
|
||||
log2 3c0167d2175cdacc c04f70737e0674e2
|
||||
log2 3fe0fdbd021da93c bfed39a5e1b55cd1
|
||||
log2 3e400b26e5e86ce8 c03afefeed977c44
|
||||
log2 3ff9cce94525b194 3fe60ef00e89ab0c
|
||||
log2 40373d613b790854 40122772b8f10cb6
|
||||
log2 3f120f358ef981aa c02ba6907b9114ca
|
||||
log2 44775a044cb8beca 405222e8ac4c0460
|
||||
log2 3fa0ae8423d69078 c013c25c4f430928
|
||||
log2 3fd63f7823860a45 bff863f24bfd1944
|
||||
log2 4188ec8e4728ed61 4039a3b411907836
|
||||
log2 3ff02cc003871c42 3f900d79bfc7e280
|
||||
log2 3fe780592ae4667d bfdc803f6d9ca8da
|
||||
log2 3ff1b9dd6366ecb2 3fc2eb0abbc32e04
|
||||
log2 3ff4d6456e6badc4 3fd8638a57b71ee2
|
||||
log2 3ff47ecb35f979ca 3fd6dcb2d983c182
|
||||
log2 40a650f5fd5fe402 4026f5c591199cae
|
||||
log2 40731fab11fc2b52 402083bb8688e904
|
||||
log2 3ff4335ea5482ac7 3fd586715785e6f6
|
||||
log2 3ff02b3615189049 3f8f01cef9f1a4c0
|
||||
log2 4005d018a58414de 3ff7275ad2b29138
|
||||
log2 3a3515999797e3ce c056e6857dbfa126
|
||||
log2 3fe4667af0840d40 bfe4c88b8402e752
|
||||
log2 3ff23cfb94fb9d3d 3fc82da17a368fbc
|
||||
log2 3ff36b191d34b376 3fd1e0da096a6f08
|
||||
log2 41d6fe74310b8d2b 403e85ef535eb744
|
||||
log2 44f4c9e22f653b24 4054182c95a3596a
|
||||
log2 4243bea97ddd4f60 4042a6d5c6b1e22c
|
||||
log2 41e6255fbe2f20c7 403f780ea9899f5e
|
||||
log2 4062ffea0c53c242 401cfdda0aee0a4e
|
||||
log2 3eb72adc7fef9bea c033774a13b79e7c
|
||||
log2 3fe1553473a4bba4 bfec4e5a4d479436
|
||||
log2 3e8e019579337076 c03617c2855238ec
|
||||
log2 3feb86c7d282ca06 bfcbcee5104571eb
|
||||
log2 3fd29ed10842466e bffc7fc0aecf7b94
|
||||
log2 3e011d709a4b9dcc c03ee71e997645f8
|
||||
log2 4031b6a21c6602cf 4010964aea84604c
|
||||
log2 40069a528673e30c 3ff7f992c4aaff76
|
||||
log2 405c3e8a886ac4ec 401b4790b23256f6
|
||||
log2 3f97e8dabb2b1f9c c015ae9301aef50a
|
||||
log2 3e31c7ea106088e0 c03bd905a3f06c9c
|
||||
log2 3f7a2e54f9545428 c01d288078994e20
|
||||
log2 4281f79abe8b23f4 40449569e48c1d70
|
||||
log2 4072435aec892dbd 402061b86f4e1c22
|
||||
log2 3a4a69ca0a0c9792 c05691b7441b1c0a
|
||||
log2 3d0266eb4c6db02c c047662ba6dd3f9a
|
||||
log2 3ff21cb6e4aeb341 3fc6e5c641353068
|
||||
log2 3ff2b447490017e6 3fccd658b82dc718
|
||||
log2 400880d340d59430 3ff9d6a10333ed84
|
||||
log2 446395deba3354f8 4051d2ab5bbc6614
|
||||
log2 414c21ce3bf5307e 4035d06babfefd28
|
||||
log2 3fd89cd81bc9094e bff60f08e3063e6c
|
||||
log2 3b712a09bb543986 c051f983c850820e
|
||||
log2 3fd14fd344a39674 bffe2e58566e8972
|
||||
log2 3ff1965d7adaff0f 3fc177c321a39670
|
||||
log2 3ff730113c8da565 3fe1211c24f2a3d0
|
||||
log2 3ff1aa320cc62bc2 3fc24785650535c0
|
||||
log2 3f957df3e07c6a27 c0164c0df514b04e
|
||||
log2 4063b545060ce27d 401d33eecdfd2dd0
|
||||
log2 3ff392448867c7a1 3fd29a5ea13e0bf4
|
||||
log2 3f95b562da3742ba c0163d3ea16ded40
|
||||
log2 400693b81d39cbf2 3ff7f2d37375bd1e
|
||||
log2 3fb5a507b927b534 c00c8332ac153c24
|
||||
log2 3ff6fb0f9567b805 3fe0b719f7639516
|
||||
log2 3ff0861b91d9da57 3fa7cc0da4336e90
|
||||
log2 3ff12c6a29fd041b 3fba23ff1bf450d8
|
||||
log2 3fc1282feacd9f22 c00731b7b57789b6
|
||||
log2 4011d99d3719224e 4001434a55ea52fe
|
||||
log2 3ff653c755af76de 3fdec459ef0506b8
|
||||
log2 3fd1a8923f432de4 bffdb92ec3ac94de
|
||||
log2 3deb201412f5005c c0401e84f493c656
|
||||
log2 3ff2b407f890cce8 3fccd3e79baa94ac
|
||||
log2 3ff250587edde416 3fc8f14745956554
|
||||
log2 41d0e2706c292f95 403e13df8e411c18
|
||||
log2 3ff37ce209cdbe55 3fd2354423dee76c
|
||||
log2 40914e2952474e67 402439edf381fa72
|
||||
log2 4004b98db54e53fe 3ff5f8fc61cef240
|
||||
log2 3f2bb35e4c11112c c0286a92db5c1eac
|
||||
log2 3ff2de1e252c6f42 3fce71a0b9139ed4
|
||||
log2 3ff9ba49e4d44ec7 3fe5ed9175d46388
|
||||
log2 3f75d2eeba04f64f c01e3569409d57ac
|
||||
log2 3ff35ede53c378fc 3fd1a6a1172febac
|
||||
log2 4023caa993c4fe82 400a745e0a0fce9e
|
||||
log2 3f6338323a6f21fd c0217893704d36f6
|
||||
log2 42a17c032967ca92 404590623f9407cc
|
||||
log2 40125fd452d69072 400198d2615151b2
|
||||
log2 3ff2701c51b03704 3fca307ec52cf878
|
||||
log2 3f259b7716233ff6 c02922135f0e17b0
|
||||
log2 3ff607659d47c909 3fdd865a07c3fca6
|
||||
log2 3fe92985e63fbb87 bfd63232d107f742
|
||||
log2 3fe65995e9a11a35 bfe091d2c90feab9
|
||||
log2 3ff049c57c53c512 3f9a5ee2df8ad220
|
||||
log2 40c30182793c3ad1 402a7f2b096dcdb8
|
||||
log2 3fe389fa5c2a5378 bfe6c662c1652118
|
||||
log2 3fe75f4757ce5f95 bfdd0287d404afcc
|
||||
log2 3ffad491d6669c49 3fe7dd8b595109ee
|
||||
log2 4053f1074de3e4e4 4019455404295cd8
|
||||
log2 3fd4c4e568fdb24a bff9fa64f3d33d88
|
||||
log2 4070f58d50e69ae4 40202b0169a9a912
|
||||
log2 40628b19fb87512c 401cd9f06ab5edd0
|
||||
log2 4004c63b3f519830 3ff60716ec447106
|
||||
log2 3fe1693c056a36e3 bfec191fae40dcb2
|
||||
log2 406322bc97696354 401d0864042197f8
|
||||
log2 3f8220ef0bd858b0 c01b4779cf4a8efc
|
||||
log2 40f0ba47daec2c00 4030106d0757b0c2
|
||||
log2 3fc1d64f953acc87 c006bed8a26a918a
|
||||
log2 4008658041ac0a7e 3ff9bcd505b2d576
|
||||
log2 4022d8d0f0bb999e 4009e3db5f04d412
|
||||
log2 3ff90bee40cf6b9c 3fe4b07b2e5bbd6a
|
||||
log2 3ffa0726bb1b2514 3fe676b1806c0c92
|
||||
log2 3f860dadf07037da c01a25f548c11548
|
||||
log2 3e6b1bf96ceecd70 c0383d41ceb1dc78
|
||||
log2 3ffab2f048e2ecfa 3fe7a388be2cd652
|
||||
log2 3f0b1c09e7ecd1b4 c02c7a81dc5747a8
|
||||
log2 3d6001845a0a837f c0447fee7ea51cc4
|
||||
log2 3fe2d79c98d6fda6 bfe87385e852d799
|
||||
log2 3ff0717d4ac61b05 3fa4301bdab4e4f0
|
||||
log2 3ff507805b621520 3fd93cb00bfe1556
|
||||
log2 4025e1466a85aae1 400b9cc0c60837a6
|
||||
log2 3fd3b1ba9c3093ba bffb346acacc2434
|
||||
log2 3e8315b69c491e0e c036bee2b06c0ce0
|
||||
log2 3b8e98ec17bca87e c051842379006ee2
|
||||
log2 3fe680092344c809 bfe042aa8bd46d38
|
||||
log2 3d7101b69c702691 c043f4bb68f8a4ce
|
||||
log2 3f947e082fd2a5c8 c016926bbcf12fb6
|
||||
log2 406642e2c6efa0a0 401de7e639d4a886
|
||||
log2 3d6be95325f3c4b4 c044193e60c0181f
|
||||
log2 3e49f2e76d400ce1 c03a4d6a31c27fcb
|
||||
log2 3c2f06db8e4521ae c04e05b40ffb8825
|
||||
log2 436eefd00249816f 404bf9c2941c14fe
|
||||
log2 44d54ea3ec367566 40539a72fd1bc612
|
||||
log2 425ea542150e4a3b 40437803727f47a4
|
||||
log2 3fd589b167d89bb5 bff9239f3b3db8f8
|
||||
log2 3f7416bc91f70fb7 c01eafccbcebd1a3
|
||||
log2 3ced771325e5c09e c0480f3d74b25cb8
|
||||
log2 3a2152b71c842fd0 c05738a9f8afc062
|
||||
log2 446415ac346c16f5 4051d4fe50369fa4
|
||||
log2 446cea52d182b5f2 4051f6a40b5ae3df
|
||||
log2 420cd3cde21179b3 4040ecb80d62be06
|
||||
log2 3b5481244fc9da0c c0526918b9c2e920
|
||||
log2 4518f61084e7fb4e 4054a91037750221
|
||||
log2 408f137ce43eae6b 4023ea5c337e61e5
|
||||
log2 3bd187a0db387bd9 c05077919cf0abce
|
||||
log2 3c50a163080d8f4f c04cf8dd1a63f44a
|
||||
log2 43996f4f5206d19c 404d5599033f298e
|
||||
log2 44d27ab70c262882 40538d4d4ace9f27
|
||||
log2 43837191bf1ef3ec 404ca3ff341968d8
|
||||
log2 43af5c0783ce93dc 404dfc4429c9635f
|
||||
log2 3ebef344999e52ec c0330c5199a3ed98
|
||||
log2 3f9d0d25a585f195 c0148ed048bfa237
|
||||
log2 42e02366ae09abb2 40478196d40b3ad2
|
||||
log2 45b86db96aeef2b8 405727126e2c79c0
|
||||
log2 442b39ccf9f07e8e 4050f114eace9258
|
||||
log2 3c98443af7f8504e c04ab315da47e868
|
||||
log2 414855226bc02c44 40359ad538a4426e
|
||||
log2 40085a145a3d4e99 3ff9b203fde76257
|
||||
log2 3ea4ca7b6cae5f8a c0349f43072731ed
|
||||
log2 440b300b82d6dcb8 405070f3cf10cd21
|
||||
log2 458cc4345692df17 4056762a020b9760
|
||||
log2 3be7259ff9a8c475 c0501de765dfe4dd
|
||||
log2 4525b07b2478a4ea 4054dc1736aac9de
|
||||
log2 3f57db651a4e65bf c022d8e9c6df0380
|
||||
log2 4388f87eabfa8da6 404cd23268c6b43d
|
||||
log2 460d5613b6fecf98 405877f9a48d8fbd
|
||||
log2 39f4a738aa6f388c c057e86ddef47593
|
||||
log2 45f0ac70a167907c 405803cebc731150
|
||||
log2 44639d8e20e618ef 4051d2cf8fa4cadb
|
||||
log2 3f131f2dd07c0ed0 c02b7c575fc2536f
|
||||
log2 3e497522426af4ec c03a547971c6cb41
|
||||
log2 3a01317dcaf2da19 c057b95bb8dc8588
|
||||
log2 4077d22ac7b153ef 402125f84bac4f40
|
||||
log2 3b320ef236b7ed8e c052f4d367c506da
|
||||
log2 4199ac42339391f4 403aaea2ecb20431
|
||||
log2 3ac2ab8898477f8a c054b1c008ef785f
|
||||
log2 3b69c6f49d39614b c05213f772a96bad
|
||||
log2 4049fc3bbd67c773 4016cc69fd069df2
|
||||
exp2 4040dc06137f2ddd 420a55e183c906f4
|
||||
exp2 c04dd779fd44b39f 3c33ed16e588f4e8
|
||||
exp2 40512a7804cea123 44395813df2a6012
|
||||
exp2 c04c3396c6b800d6 3c68334fd1397654
|
||||
exp2 c04cea8e044b215d 3c51f864470cae7a
|
||||
exp2 40560d3c3cbec781 4572774d8acd14d2
|
||||
exp2 403693486fb7606a 4157d716ec29414e
|
||||
exp2 40516680a2c24299 4448474511f12dce
|
||||
exp2 4052aa93af672f38 44995fad16e538f6
|
||||
exp2 401150f6547705db 40341963cd27acaa
|
||||
exp2 404be86564dd0b90 436c290de62dd7b4
|
||||
exp2 c050a55f3ec3b34e 3bc559363976f5b3
|
||||
exp2 401ed93deaa6c307 406a363f5985840c
|
||||
exp2 c02735b231d08dfd 3f350a78c138e68c
|
||||
exp2 4055722a88372b05 454b8c248818ac32
|
||||
exp2 4040bab44f41a461 4205fcdcb87bc516
|
||||
exp2 c0559e73b1a5fb9e 3a87028edcc3ee80
|
||||
exp2 c0346118e7b8edd4 3ea89a27e16e3670
|
||||
exp2 c047c38d18a32ee2 3cf6324a1375b23c
|
||||
exp2 404d37edd6f97533 4395a8e6770c75b4
|
||||
exp2 401c8e96106926fb 40619f0a356744f8
|
||||
exp2 c046a700175eaf9e 3d19e85fd28a7b9e
|
||||
exp2 c057dd30154e4f64 39f753c24ed83284
|
||||
exp2 40576e77de7f2a4a 45ca774955cf912e
|
||||
exp2 c0533044f10e93a3 3b22f8ce542e3d1e
|
||||
exp2 c052194d09b88264 3b6854845745960a
|
||||
exp2 c05891d483ed3473 39ca616d593f4364
|
||||
exp2 c0582672591e73f6 39e519f91e1b6d26
|
||||
exp2 4055a573c2a30d0b 455800f888a50eee
|
||||
exp2 4005d78b23ebec36 401a8af18ed2558c
|
||||
exp2 c0526348cdaec84f 3b55d63077f0415c
|
||||
exp2 4053460ff702d872 44c115f5d7f8dc36
|
||||
exp2 c0529df245c80d58 3b4722e63bdd63aa
|
||||
exp2 c051a62e2ecb17c9 3b852992ee815230
|
||||
exp2 c04989bb91b806f4 3cbe5b6ca80b7a9a
|
||||
exp2 4055578cb781c6a8 4544a602c7a686f4
|
||||
exp2 c04f07146f78b801 3c0ecbdf8adbaa76
|
||||
exp2 c04dc9f8886493f0 3c3570251e2c21fc
|
||||
exp2 c04b1c0fc05650a7 3c8b7d1e9b1ab4d0
|
||||
exp2 c04197a12ab7fc8a 3dbc280dca42a47e
|
||||
exp2 c0221bcd0e1afec9 3f5ed1683b67f5f2
|
||||
exp2 403c48e3971d802e 41b37da643a40e64
|
||||
exp2 40329b09e64b1294 4118589b24b42e3e
|
||||
exp2 4057e5b6f77888df 45e81277a92d3cc4
|
||||
exp2 404a44151fc230ef 4337221b32183828
|
||||
exp2 4038ba06e6ae6f5a 417a7a1cb8f425c8
|
||||
exp2 c03d3f8434b36ee0 3e1af1a614705d1e
|
||||
exp2 c04bd017a8cc6f41 3c74bd327211c6b2
|
||||
exp2 c0075893fdd119a5 3fc0eecc3b8f933c
|
||||
exp2 c04999ce36c77313 3cbbd39e17e29698
|
||||
exp2 c032712320c826b3 3ec78e7b89b4567c
|
||||
exp2 c05152ea4b426fca 3b9a1286d86b1848
|
||||
exp2 c0463ece8d53ea7f 3d26c62aca8d6e0e
|
||||
exp2 c0463327e906d42e 3d2841db9df8faca
|
||||
exp2 c04067557f49c762 3de24954f6038d3a
|
||||
exp2 c04da577aa425646 3c3a1fa8c05f9386
|
||||
exp2 404167aa7d73ce98 421c0c9bd7c2d7b0
|
||||
exp2 c053220a3274542e 3b26220ccd3bf610
|
||||
exp2 40403f3eb2fe1250 41f688fb4519698e
|
||||
exp2 c045f9673505fc63 3d3094f7bca5b2a4
|
||||
exp2 c040e4d847637ed7 3dd288dc10d1b340
|
||||
exp2 c03f68e62d48f32c 3df81681c65d7a06
|
||||
exp2 c04f9e6a68548599 3bfb23faa67ceddc
|
||||
exp2 4046c57aa7ce9c6b 42c74f1081089b06
|
||||
exp2 4045505f9272244d 4298b9add488fb2a
|
||||
exp2 40567138b5bf7ec7 458b445cdec2973a
|
||||
exp2 402d24707bf67a2c 40d7c58b71e76452
|
||||
exp2 4058ba00c10ffd05 461dfcd5e717f6c2
|
||||
exp2 c0558dec590bf26c 3a8b8551dc53e984
|
||||
exp2 40531e29052f5804 44b62e5732dfaefc
|
||||
exp2 c0345f5835245c1c 3ea8b81dabfb429e
|
||||
exp2 c0502841f111eb17 3be4b10e84a9bc40
|
||||
exp2 400c01437a495b94 4026a318b8221088
|
||||
exp2 c0476356301eee5e 3d02afc5119a6ce2
|
||||
exp2 c05725390e478a9c 3a25620c80db6282
|
||||
exp2 c04e4e1a17b3ea88 3c24f6bbf3793d8c
|
||||
exp2 c0586d7ebbc1ea5f 39d38cf3145a9e84
|
||||
exp2 403588f01559d7a2 41472e82c0a64266
|
||||
exp2 c033279fcd67c0b1 3ebcbe9c8d261320
|
||||
exp2 c047dad450aa9f3f 3cf3914ee53bdb48
|
||||
exp2 40120b4fc0a3f7e1 4036cd245202152c
|
||||
exp2 4056574a7f28e990 45849739005738c8
|
||||
exp2 c0550ed29881c6bf 3aab41065c8e12de
|
||||
exp2 4056e26984361ae1 45a739f1b83414fe
|
||||
exp2 4051a4a618d2eea5 4457cbbc781f28d4
|
||||
exp2 c043cef24761c122 3d74de3f7d350d5a
|
||||
exp2 404eb1a9eb6e3525 43c4efedb12d2a9c
|
||||
exp2 4040ecaad6011899 420cd1bdca31be40
|
||||
exp2 c033463bc4057cb7 3eba7555a76628aa
|
||||
exp2 c0360c35115a50f2 3e8ef5a8cccc3252
|
||||
exp2 404649b987c6ccef 42b7d9d770541f72
|
||||
exp2 4054a41537267266 4517a682fc96221e
|
||||
exp2 40532ce3862aac84 44ba045f24e3def6
|
||||
exp2 c01d34e60d8ef7c0 3f79f6533fbd9314
|
||||
exp2 4032564083a02592 4114357d3d82db18
|
||||
exp2 403867f9313a5016 417533c74969a394
|
||||
exp2 404c210094f747cc 437321806b00d312
|
||||
exp2 c053e888d9c8c80b 3af4a1309b501e46
|
||||
exp2 403c9d546ba90209 41b87f63b52ff66e
|
||||
exp2 c01e9c8ac350a8e9 3f745a36c7f95b7a
|
||||
exp2 c04f1e79d6dd5011 3c0b21b620c04c74
|
||||
exp2 4042c6ec34a4b9cc 42477de48b3744c8
|
||||
exp2 c0562d36af0ad0bf 3a639c3a8aed5233
|
||||
exp2 40307142757554ad 40f5bdfb32a334da
|
||||
exp2 c045b83a068dab0f 3d3799a8df0b15ea
|
||||
exp2 c048bf754664862e 3cd6b1a45ab04982
|
||||
exp2 c047493dd3394fb7 3d0585dcf18aa742
|
||||
exp2 c03b77eaf42f3616 3e3720c7441da498
|
||||
exp2 c049655934e9eb90 3cc27befda49e4d2
|
||||
exp2 4054b2337fbde4dd 451b8ed1885fdce6
|
||||
exp2 405761e5a40bdda9 45c718dcf4e7df20
|
||||
exp2 c040bac24d7d939b 3dd74760093fb12a
|
||||
exp2 403c9c81eed24f26 41b8717181f5ee30
|
||||
exp2 4047549df610eb57 42d94cd2ad38f9e8
|
||||
exp2 40158ca962fa50a2 4044ed93a8ba989a
|
||||
exp2 40511f8fcb76626b 4436852fb7671e5c
|
||||
exp2 4051aebef7f0abb4 445a8bb26872d0b8
|
||||
exp2 c05716827c9ba767 3a2913ae233f10e8
|
||||
exp2 c05602f430abea1a 3a6efe127e34c8f2
|
||||
exp2 4039cb2a9ae64d7a 418bbc1394e854ee
|
||||
exp2 404cc98ce1f80ae4 4387d413e2acccc4
|
||||
exp2 403d443940a5ddd7 41c33f043d0caaf4
|
||||
exp2 4030590b1efb921e 40f45cbd36bbb8bc
|
||||
exp2 c00cecbbcf39910a 3fb4e29ae791e13c
|
||||
exp2 404da18e398ac9e1 43a3303290444a8a
|
||||
exp2 c02ca61738979e54 3f098e6635467cf6
|
||||
exp2 40264e6dc3547f6c 40a1cad438f1e7c6
|
||||
exp2 c02adf93e41f42a2 3f17a48a09c309bc
|
||||
exp2 3fdedd87f3b46910 3ff659dee69e00f2
|
||||
exp2 4053a29735facb89 44d74573272b946e
|
||||
exp2 4055611d55ba0022 4546e6f7cc7c4158
|
||||
exp2 c040ade4f26b09eb 3dd8f5565b062df6
|
||||
exp2 403c863f8b3780c5 41b703734457c16c
|
||||
exp2 c04bcd8f21bbf206 3c7506885f4efab8
|
||||
exp2 c047d969c426d4b4 3cf3b7df5fbba402
|
||||
exp2 4053051248694848 44b0e744b6e51652
|
||||
exp2 4042513f5aed801d 4238d7b6876d690e
|
||||
exp2 405232297c19f7be 447b8bd48a9d48d4
|
||||
exp2 404031ce3a0782ce 41f4f40be9eec12e
|
||||
exp2 4043b1ceade5a557 4264f4190f9c4a72
|
||||
exp2 c04eb96d64d5a3d6 3c1772815d244300
|
||||
exp2 40472bd0374ad3d2 42d448c802925a4a
|
||||
exp2 c03a6165874c4b9e 3e48950dc1fca25c
|
||||
exp2 c029d8e56cfa38f2 3f20deae03bd48e8
|
||||
exp2 c04848972e06dd07 3ce59951ed2cb5f2
|
||||
exp2 4056f121b15b42e8 45ab3d919d0d553c
|
||||
exp2 40157178c16459a9 40448bdf72ba47a0
|
||||
exp2 c04c8df8efb89a1b 3c5dab08827e2694
|
||||
exp2 404b64c0c7674dc7 435b9c3ab93414ea
|
||||
exp2 40552f7d068fcca4 453ac28f0dc5231a
|
||||
exp2 c0439c33023463e6 3d7b77df8a1e3068
|
||||
exp2 c045e79cbb10379b 3d32424885d1eb92
|
||||
exp2 c0471f70e6a143c3 3d0afd81c374d1e5
|
||||
exp2 4056c3d7bd0b8bc1 45a0ae10e0e2f2bd
|
||||
exp2 4044ab79e9385126 42843f4f53bc3b98
|
||||
exp2 c04b4b44f62dce09 3c8549b029d8664e
|
||||
exp2 4056869fc9e3e333 459130a7cf7495a1
|
||||
exp2 404ad116020be133 4348d2272ffd5006
|
||||
exp2 4045f62afe91f763 42ae573e7b79848d
|
||||
exp2 bfe488227547f64c 3fe4830526318d5e
|
||||
exp2 c002672edd8548f2 3fc9fc3557502b86
|
||||
exp2 c056d0961c564780 3a3abd03d1b54c40
|
||||
exp2 c05566233300c8b8 3a952c178996313a
|
||||
exp2 c02856333e594df1 3f2c79aec1b28c03
|
||||
exp2 403f4eb05197864f 41e3cc9f46980448
|
||||
exp2 404d150254ac13e8 4391ed8a0fe9a2f4
|
||||
exp2 404824fcd702e8cd 42f38c58c90566ed
|
||||
exp2 c041fb6ed54f43d8 3db066904a46659d
|
||||
exp2 4047830b5101c8b1 42e044150e5a32a8
|
||||
exp2 c038b3662aecdec2 3e63b00cc49aafd3
|
||||
exp2 c04b6fb7d74431f0 3c81798af8822cd6
|
||||
exp2 c050d7bf9ca2150d 3bb8be205b7974d4
|
||||
exp2 405516591a8eed13 453461aa1b9db25c
|
||||
exp2 4048ceadd9eee528 43087fdf5d78bd1a
|
||||
exp2 405098c551e440f3 4414ec6216e1f4cf
|
||||
exp2 c05485a1cf7d4736 3ace1b3dceeeed37
|
||||
exp2 c035ace0aa188f9c 3e9409d5edc75e68
|
||||
exp2 403383ca0deb9b92 4126dc5b2d263172
|
||||
exp2 c052d7a71739ccc2 3b38c4b36918aec3
|
||||
exp2 c0227aee989ac54c 3f5b180c94ff9863
|
||||
exp2 40481720b353229b 42f2227f60bf2009
|
||||
exp2 c052fb83030bc63a 3b30cc05e4b7a448
|
||||
exp2 404dac009273df89 43a44e187ad2135d
|
||||
exp2 c0492d64dc58abcc 3cc906ac1956d283
|
||||
exp2 c0234c0c53a9d0c6 3f5469eab68074e5
|
||||
exp2 403bff3ef2b78dd4 41afef4a573add59
|
||||
exp2 405783e785d81ffc 45d0b0eb18a0c5e6
|
||||
exp2 40506b73a3fc44d9 44099d836fa45256
|
||||
exp2 c051ba3ec8242190 3b810769aca80765
|
||||
exp2 c0036d0eff778dad 3fc7c7fbc7c72c05
|
||||
exp2 401b4093f45420d9 405c1c6c7344b277
|
||||
exp2 403f6d0fbc1c6ea4 41e57f124a5a114f
|
||||
exp2 c052984d0cabc324 3b489856867e5ad2
|
||||
exp2 c031ddd5175bc871 3ed18d0319c52d65
|
||||
exp2 c047cd5f79ae85c2 3cf50bf62456785d
|
||||
exp2 c03d0814f8846e79 3e1f4eaf3a69f2cd
|
||||
exp2 c04f93cf727b4d6c 3bfcbeaea4658b32
|
||||
exp2 40103e2c8ddc0da4 4030b00fd8a398a8
|
||||
exp2 c046dc1e552045b0 3d136e75dd02c0bc
|
||||
exp2 4053f91334fee51e 44edb012573b1061
|
||||
@@ -13,14 +13,11 @@
|
||||
// limitations under the License.
|
||||
|
||||
//! Prometheus `HistogramQuantile`, `HistogramFraction` and the `histogramVariance` estimate over
|
||||
//! one native histogram, with the bucket iteration of `model/histogram` and the Go `math`
|
||||
//! functions they call, so results match Prometheus on amd64 bit for bit.
|
||||
//! one native histogram, with the bucket iteration of `model/histogram`.
|
||||
|
||||
use datafusion::error::{DataFusionError, Result};
|
||||
use datatypes::series::histogram::{BucketSideView, HistogramView};
|
||||
|
||||
use super::bounds::EXPONENTIAL_BOUNDS;
|
||||
|
||||
pub(super) const CUSTOM_BUCKETS_SCHEMA: i32 = -53;
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
@@ -128,25 +125,17 @@ pub(super) fn bound(idx: i32, schema: i32, custom_values: &[f64]) -> Result<f64>
|
||||
_ => Err(invalid_layout()),
|
||||
};
|
||||
}
|
||||
if schema < 0 {
|
||||
if schema < -4 {
|
||||
return Err(invalid_layout());
|
||||
}
|
||||
let exp = i64::from(idx) << -schema;
|
||||
if exp == 1024 {
|
||||
return Ok(f64::MAX);
|
||||
}
|
||||
return Ok(ldexp(1.0, exp));
|
||||
if !(-4..=8).contains(&schema) {
|
||||
return Err(invalid_layout());
|
||||
}
|
||||
let bounds = EXPONENTIAL_BOUNDS
|
||||
.get(schema as usize)
|
||||
.ok_or_else(invalid_layout)?;
|
||||
let frac = bounds[(idx & ((1 << schema) - 1)) as usize];
|
||||
let exp = i64::from(idx >> schema) + 1;
|
||||
if frac == 0.5 && exp == 1025 {
|
||||
// The upper bound of bucket `idx` is 2^(idx / 2^schema).
|
||||
let exponent = f64::from(idx) * 2f64.powi(-schema);
|
||||
if exponent == 1024.0 {
|
||||
// The last bucket of finite values; its computed bound would overflow to +Inf, which
|
||||
// Go reserves for the bucket of infinite observations.
|
||||
return Ok(f64::MAX);
|
||||
}
|
||||
Ok(ldexp(frac, exp))
|
||||
Ok(exponent.exp2())
|
||||
}
|
||||
|
||||
fn invalid_layout() -> DataFusionError {
|
||||
@@ -237,14 +226,12 @@ pub(super) fn quantile(
|
||||
if custom || (bucket.lower <= 0.0 && bucket.upper >= 0.0) {
|
||||
return Ok(bucket.lower + (bucket.upper - bucket.lower) * fraction);
|
||||
}
|
||||
let log_lower = log2(bucket.lower.abs());
|
||||
let log_upper = log2(bucket.upper.abs());
|
||||
let log_lower = bucket.lower.abs().log2();
|
||||
let log_upper = bucket.upper.abs().log2();
|
||||
if bucket.lower > 0.0 {
|
||||
return Ok(exp2(log_lower + (log_upper - log_lower) * fraction));
|
||||
return Ok((log_lower + (log_upper - log_lower) * fraction).exp2());
|
||||
}
|
||||
Ok(-exp2(
|
||||
log_upper + (log_lower - log_upper) * (1.0 - fraction),
|
||||
))
|
||||
Ok(-(log_upper + (log_lower - log_upper) * (1.0 - fraction)).exp2())
|
||||
}
|
||||
|
||||
/// Prometheus `HistogramFraction`.
|
||||
@@ -331,9 +318,9 @@ pub(super) fn fraction(
|
||||
|
||||
/// Go `Bucket.FractionBelow` with exponential interpolation.
|
||||
fn fraction_below_exponential(b: NativeBucket, v: f64) -> f64 {
|
||||
let log_lower = log2(b.lower.abs());
|
||||
let log_upper = log2(b.upper.abs());
|
||||
let log_v = log2(v.abs());
|
||||
let log_lower = b.lower.abs().log2();
|
||||
let log_upper = b.upper.abs().log2();
|
||||
let log_v = v.abs().log2();
|
||||
if v > 0.0 {
|
||||
(log_v - log_lower) / (log_upper - log_lower)
|
||||
} else {
|
||||
@@ -376,148 +363,16 @@ pub(super) fn kahan_inc(inc: f64, sum: f64, c: f64) -> (f64, f64) {
|
||||
(t, c)
|
||||
}
|
||||
|
||||
/// Go `math.Ldexp` for a positive normal `frac`.
|
||||
fn ldexp(frac: f64, exp: i64) -> f64 {
|
||||
let bits = frac.to_bits();
|
||||
let exp = exp + ((bits >> 52) & 0x7FF) as i64 - 1023;
|
||||
if exp < -1075 {
|
||||
return 0.0;
|
||||
}
|
||||
if exp > 1023 {
|
||||
return f64::INFINITY;
|
||||
}
|
||||
let (exp, scale) = if exp < -1022 {
|
||||
(exp + 53, 1.0 / (1u64 << 53) as f64)
|
||||
} else {
|
||||
(exp, 1.0)
|
||||
};
|
||||
scale * f64::from_bits((bits & !(0x7FF << 52)) | (((exp + 1023) as u64) << 52))
|
||||
}
|
||||
|
||||
/// Go `math.Frexp`.
|
||||
fn frexp(x: f64) -> (f64, i64) {
|
||||
if x == 0.0 || x.is_infinite() || x.is_nan() {
|
||||
return (x, 0);
|
||||
}
|
||||
let (x, mut exp) = if x.abs() < f64::MIN_POSITIVE {
|
||||
(x * (1u64 << 52) as f64, -52)
|
||||
} else {
|
||||
(x, 0)
|
||||
};
|
||||
let bits = x.to_bits();
|
||||
exp += ((bits >> 52) & 0x7FF) as i64 - 1023 + 1;
|
||||
(f64::from_bits((bits & !(0x7FF << 52)) | (1022 << 52)), exp)
|
||||
}
|
||||
|
||||
/// Go `math.Log`, whose amd64 assembly performs the same operations for normal inputs.
|
||||
// Constants are copied verbatim from Go's `math` package.
|
||||
#[allow(clippy::excessive_precision)]
|
||||
fn log(x: f64) -> f64 {
|
||||
const LN2_HI: f64 = 6.93147180369123816490e-01;
|
||||
const LN2_LO: f64 = 1.90821492927058770002e-10;
|
||||
const L1: f64 = 6.666666666666735130e-01;
|
||||
const L2: f64 = 3.999999999940941908e-01;
|
||||
const L3: f64 = 2.857142874366239149e-01;
|
||||
const L4: f64 = 2.222219843214978396e-01;
|
||||
const L5: f64 = 1.818357216161805012e-01;
|
||||
const L6: f64 = 1.531383769920937332e-01;
|
||||
const L7: f64 = 1.479819860511658591e-01;
|
||||
if x.is_nan() || x == f64::INFINITY {
|
||||
return x;
|
||||
}
|
||||
if x < 0.0 {
|
||||
return f64::NAN;
|
||||
}
|
||||
if x == 0.0 {
|
||||
return f64::NEG_INFINITY;
|
||||
}
|
||||
let (mut f1, mut ki) = frexp(x);
|
||||
if f1 < std::f64::consts::SQRT_2 / 2.0 {
|
||||
f1 *= 2.0;
|
||||
ki -= 1;
|
||||
}
|
||||
let f = f1 - 1.0;
|
||||
let k = ki as f64;
|
||||
let s = f / (2.0 + f);
|
||||
let s2 = s * s;
|
||||
let s4 = s2 * s2;
|
||||
let t1 = s2 * (L1 + s4 * (L3 + s4 * (L5 + s4 * L7)));
|
||||
let t2 = s4 * (L2 + s4 * (L4 + s4 * L6));
|
||||
let r = t1 + t2;
|
||||
let hfsq = 0.5 * f * f;
|
||||
k * LN2_HI - ((hfsq - (s * (hfsq + r) + k * LN2_LO)) - f)
|
||||
}
|
||||
|
||||
/// Go `math.Log2`.
|
||||
fn log2(x: f64) -> f64 {
|
||||
let (frac, exp) = frexp(x);
|
||||
if frac == 0.5 {
|
||||
return (exp - 1) as f64;
|
||||
}
|
||||
log(frac) * std::f64::consts::LOG2_E + exp as f64
|
||||
}
|
||||
|
||||
/// Go `math.Exp2`, which is not assembly on amd64.
|
||||
// Constants are copied verbatim from Go's `math` package.
|
||||
#[allow(clippy::excessive_precision)]
|
||||
fn exp2(x: f64) -> f64 {
|
||||
const LN2_HI: f64 = 6.93147180369123816490e-01;
|
||||
const LN2_LO: f64 = 1.90821492927058770002e-10;
|
||||
const OVERFLOW: f64 = 1.0239999999999999e+03;
|
||||
const UNDERFLOW: f64 = -1.0740e+03;
|
||||
const P1: f64 = 1.66666666666666657415e-01;
|
||||
const P2: f64 = -2.77777777770155933842e-03;
|
||||
const P3: f64 = 6.61375632143793436117e-05;
|
||||
const P4: f64 = -1.65339022054652515390e-06;
|
||||
const P5: f64 = 4.13813679705723846039e-08;
|
||||
if x.is_nan() || x == f64::INFINITY {
|
||||
return x;
|
||||
}
|
||||
if x == f64::NEG_INFINITY || x < UNDERFLOW {
|
||||
return 0.0;
|
||||
}
|
||||
if x > OVERFLOW {
|
||||
return f64::INFINITY;
|
||||
}
|
||||
let k = if x > 0.0 {
|
||||
(x + 0.5) as i64
|
||||
} else if x < 0.0 {
|
||||
(x - 0.5) as i64
|
||||
} else {
|
||||
0
|
||||
};
|
||||
let t = x - k as f64;
|
||||
let hi = t * LN2_HI;
|
||||
let lo = -t * LN2_LO;
|
||||
let r = hi - lo;
|
||||
let t = r * r;
|
||||
let c = r - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
|
||||
let y = 1.0 - ((lo - (r * c) / (2.0 - c)) - hi);
|
||||
ldexp(y, k)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
/// The bucket interpolation goes through Go's `math.Log2` and `math.Exp2`, which differ from
|
||||
/// the platform functions in the last bit on some arguments.
|
||||
/// The last bucket of finite values ends at `f64::MAX`; only the next one, which counts
|
||||
/// infinite observations, ends at +Inf.
|
||||
#[test]
|
||||
fn log2_and_exp2_match_go() {
|
||||
let mut checked = 0;
|
||||
for line in include_str!("go_math_cases.txt").lines() {
|
||||
if line.starts_with('#') {
|
||||
continue;
|
||||
}
|
||||
let fields: Vec<&str> = line.split(' ').collect();
|
||||
let bits = |field: &str| u64::from_str_radix(field, 16).unwrap();
|
||||
let argument = f64::from_bits(bits(fields[1]));
|
||||
let actual = match fields[0] {
|
||||
"log2" => super::log2(argument),
|
||||
"exp2" => super::exp2(argument),
|
||||
function => panic!("unknown function {function}"),
|
||||
};
|
||||
assert_eq!(actual.to_bits(), bits(fields[2]), "{line}");
|
||||
checked += 1;
|
||||
fn last_finite_bucket_ends_at_max() {
|
||||
for schema in [-4, 0, 3, 8] {
|
||||
let last = 1024i32 << schema.max(0) >> (-schema).max(0);
|
||||
assert_eq!(super::bound(last, schema, &[]).unwrap(), f64::MAX);
|
||||
assert_eq!(super::bound(last + 1, schema, &[]).unwrap(), f64::INFINITY);
|
||||
}
|
||||
assert_eq!(checked, 400);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,7 +186,30 @@ fn assert_outcome(
|
||||
(labels.clone(), points)
|
||||
})
|
||||
.collect();
|
||||
assert_eq!(actual, expected, "case {:?}", case.spec);
|
||||
let keys = |series: &BTreeMap<Labels, Points>| {
|
||||
series
|
||||
.iter()
|
||||
.map(|(labels, points)| (labels.clone(), points.keys().copied().collect()))
|
||||
.collect::<Vec<(Labels, Vec<usize>)>>()
|
||||
};
|
||||
assert_eq!(keys(&actual), keys(&expected), "case {:?}", case.spec);
|
||||
// promql-compat's tolerance for ill-conditioned evaluation covers the variance.
|
||||
let epsilon = if case.spec[0].contains("stddev") || case.spec[0].contains("stdvar") {
|
||||
1e-6
|
||||
} else {
|
||||
1e-10
|
||||
};
|
||||
for (labels, points) in &actual {
|
||||
for (point, &bits) in points {
|
||||
let got = f64::from_bits(bits);
|
||||
let want = f64::from_bits(expected[labels][point]);
|
||||
assert!(
|
||||
close(got, want, epsilon),
|
||||
"case {:?}: {labels:?} at {point}: {got} vs {want}",
|
||||
case.spec
|
||||
);
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
(Err(actual), Err(expected)) => {
|
||||
@@ -535,3 +558,21 @@ fn histogram_functions_drop_metadata_labels() {
|
||||
expected.remove("__name__");
|
||||
assert_eq!(labels_of(&count.metric), expected);
|
||||
}
|
||||
|
||||
/// Prometheus `almost.Equal`, treating results below 1e-10 as equal and any NaN as equal to NaN,
|
||||
/// as promql-compat compares engines.
|
||||
fn close(a: f64, b: f64, epsilon: f64) -> bool {
|
||||
if a.is_nan() || b.is_nan() {
|
||||
return a.is_nan() && b.is_nan();
|
||||
}
|
||||
if a == b {
|
||||
return true;
|
||||
}
|
||||
let (diff, sum) = ((a - b).abs(), a.abs() + b.abs());
|
||||
let equal = if a == 0.0 || b == 0.0 || sum < f64::MIN_POSITIVE {
|
||||
diff < epsilon * f64::MIN_POSITIVE
|
||||
} else {
|
||||
diff / sum.min(f64::MAX) < epsilon
|
||||
};
|
||||
equal || (a.abs() < 1e-10 && b.abs() < 1e-10)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user