Commit 62245e00 authored by Jan Oravec's avatar Jan Oravec Committed by Facebook Github Bot

Revert D8360404: [folly] Support constructing TDigest from centroids and...

Revert D8360404: [folly] Support constructing TDigest from centroids and getting centroids from TDigest

Differential Revision:
D8360404

Original commit changeset: b0f42e892f66

fbshipit-source-id: 985ba55bb443aafe7c324f15caeca0abb34d200a
parent e9ed24ce
main v2022.02.14.00 v2022.02.07.00 v2022.01.31.00 v2022.01.24.00 v2022.01.17.00 v2022.01.10.00 v2022.01.03.00 v2021.12.27.00 v2021.12.20.00 v2021.12.13.00 v2021.12.06.00 v2021.11.29.00 v2021.11.15.00 v2021.11.08.00 v2021.11.01.00 v2021.10.25.00 v2021.10.18.00 v2021.10.11.00 v2021.10.04.00 v2021.09.27.00 v2021.09.20.00 v2021.09.13.00 v2021.09.06.00 v2021.08.30.00 v2021.08.23.00 v2021.08.02.00 v2021.07.22.00 v2021.07.20.01 v2021.07.20.00 v2021.06.28.00 v2021.06.14.00 v2021.06.07.00 v2021.05.31.00 v2021.05.24.00 v2021.05.17.00 v2021.05.10.00 v2021.05.03.00 v2021.04.26.00 v2021.04.19.00 v2021.04.12.00 v2021.04.05.00 v2021.03.29.00 v2021.03.22.00 v2021.03.15.00 v2021.03.08.00 v2021.03.01.00 v2021.02.22.00 v2021.02.15.00 v2021.02.08.00 v2021.02.01.00 v2021.01.25.00 v2021.01.18.01 v2021.01.18.00 v2021.01.11.00 v2021.01.04.00 v2020.12.28.00 v2020.12.21.00 v2020.12.14.00 v2020.12.07.00 v2020.11.30.00 v2020.11.23.00 v2020.11.16.00 v2020.11.09.00 v2020.11.02.00 v2020.10.26.00 v2020.10.19.00 v2020.10.12.00 v2020.10.05.00 v2020.09.28.00 v2020.09.21.00 v2020.09.14.00 v2020.09.07.00 v2020.08.31.00 v2020.08.24.00 v2020.08.17.00 v2020.08.10.00 v2020.08.03.00 v2020.07.27.00 v2020.07.20.00 v2020.07.13.00 v2020.07.06.00 v2020.06.29.00 v2020.06.15.00 v2020.06.08.00 v2020.06.01.00 v2020.05.25.00 v2020.05.18.00 v2020.05.11.00 v2020.05.04.00 v2020.04.27.00 v2020.04.20.00 v2020.04.13.00 v2020.04.06.00 v2020.03.30.00 v2020.03.23.00 v2020.03.16.00 v2020.03.09.00 v2020.03.02.00 v2020.02.24.00 v2020.02.17.00 v2020.02.10.00 v2020.02.03.00 v2020.01.27.00 v2020.01.20.00 v2020.01.13.00 v2020.01.06.00 v2019.12.30.00 v2019.12.23.00 v2019.12.16.00 v2019.12.09.00 v2019.12.06.00 v2019.12.02.00 v2019.11.11.00 v2019.11.04.00 v2019.10.28.00 v2019.10.21.00 v2019.10.14.00 v2019.10.07.00 v2019.09.30.00 v2019.09.23.00 v2019.09.16.00 v2019.09.09.00 v2019.09.02.00 v2019.08.26.00 v2019.08.19.00 v2019.08.12.00 v2019.08.05.00 v2019.07.29.00 v2019.07.22.00 v2019.06.17.00 v2019.06.10.00 v2019.06.03.00 v2019.05.27.00 v2019.05.20.00 v2019.05.13.00 v2019.05.06.00 v2019.04.29.00 v2019.04.22.00 v2019.04.15.00 v2019.04.08.00 v2019.04.01.00 v2019.03.25.00 v2019.03.18.00 v2019.03.04.00 v2019.02.25.00 v2019.02.18.00 v2019.02.11.00 v2019.02.04.00 v2019.01.28.00 v2019.01.21.00 v2019.01.14.00 v2019.01.07.00 v2018.12.31.00 v2018.12.24.00 v2018.12.17.00 v2018.12.10.00 v2018.12.03.00 v2018.11.26.00 v2018.11.19.00 v2018.11.12.00 v2018.11.05.00 v2018.10.29.00 v2018.10.22.00 v2018.10.15.00 v2018.10.08.00 v2018.10.01.00 v2018.09.24.00 v2018.09.17.00 v2018.09.10.01 v2018.09.10.00 v2018.09.03.01 v2018.09.03.00 v2018.08.27.00 v2018.08.20.00 v2018.08.13.00 v2018.08.09.00 v2018.08.06.00 v2018.07.30.00 v2018.07.23.00 v2018.07.16.00 v2018.07.09.00 v2018.07.02.00 v2018.06.25.00 v2018.06.18.00
No related merge requests found
...@@ -75,31 +75,6 @@ static double clamp(double v, double lo, double hi) { ...@@ -75,31 +75,6 @@ static double clamp(double v, double lo, double hi) {
return v; return v;
} }
TDigest::TDigest(
Range<const Centroid*> centroids,
double sum,
double count,
double max_val,
double min_val,
size_t maxSize)
: maxSize_(maxSize),
sum_(sum),
count_(count),
max_(max_val),
min_(min_val) {
if (centroids.size() <= maxSize) {
centroids_.assign(centroids.begin(), centroids.end());
} else {
// Number of centroids is greater than maxSize, we need to compress them
// When merging, resulting digest takes the maxSize of the first digest
std::array<TDigest, 2> digests{
TDigest(maxSize),
TDigest(centroids, sum, count, max_val, min_val, centroids.size()),
};
*this = this->merge(digests);
}
}
TDigest TDigest::merge(Range<const double*> sortedValues) const { TDigest TDigest::merge(Range<const double*> sortedValues) const {
if (sortedValues.empty()) { if (sortedValues.empty()) {
return *this; return *this;
......
...@@ -48,44 +48,9 @@ namespace folly { ...@@ -48,44 +48,9 @@ namespace folly {
*/ */
class TDigest { class TDigest {
public: public:
struct Centroid {
public:
explicit Centroid(double mean = 0.0, double weight = 1.0)
: mean_(mean), weight_(weight) {}
inline double mean() const {
return mean_;
}
inline double weight() const {
return weight_;
}
/*
* Adds the sum/weight to this centroid, and returns the new sum.
*/
inline double add(double sum, double weight);
inline bool operator<(const Centroid& other) const {
return mean() < other.mean();
}
private:
double mean_;
double weight_;
};
explicit TDigest(size_t maxSize = 100) explicit TDigest(size_t maxSize = 100)
: maxSize_(maxSize), sum_(0.0), count_(0.0), max_(NAN), min_(NAN) {} : maxSize_(maxSize), sum_(0.0), count_(0.0), max_(NAN), min_(NAN) {}
explicit TDigest(
Range<const Centroid*> centroids,
double sum,
double count,
double max_val,
double min_val,
size_t maxSize = 100);
/* /*
* Returns a new TDigest constructed with values merged from the current * Returns a new TDigest constructed with values merged from the current
* digest and the given sortedValues. * digest and the given sortedValues.
...@@ -127,11 +92,34 @@ class TDigest { ...@@ -127,11 +92,34 @@ class TDigest {
return centroids_.empty(); return centroids_.empty();
} }
const std::vector<Centroid>& getCentroids() { private:
return centroids_; struct Centroid {
public:
explicit Centroid(double mean = 0.0, double weight = 1.0)
: mean_(mean), weight_(weight) {}
inline double mean() const {
return mean_;
}
inline double weight() const {
return weight_;
}
/*
* Adds the sum/weight to this centroid, and returns the new sum.
*/
inline double add(double sum, double weight);
inline bool operator<(const Centroid& other) const {
return mean() < other.mean();
} }
private: private:
double mean_;
double weight_;
};
std::vector<Centroid> centroids_; std::vector<Centroid> centroids_;
size_t maxSize_; size_t maxSize_;
double sum_; double sum_;
......
...@@ -219,46 +219,6 @@ TEST(TDigest, NegativeValuesMergeDigests) { ...@@ -219,46 +219,6 @@ TEST(TDigest, NegativeValuesMergeDigests) {
EXPECT_EQ(100, digest.estimateQuantile(1.0)); EXPECT_EQ(100, digest.estimateQuantile(1.0));
} }
TEST(TDigest, ConstructFromCentroids) {
std::vector<TDigest::Centroid> centroids{};
TDigest digest(100);
std::vector<double> values;
for (int i = 1; i <= 100; ++i) {
values.push_back(i);
}
auto digest1 = digest.merge(values);
size_t centroid_count = digest1.getCentroids().size();
TDigest digest2(
digest1.getCentroids(),
digest1.sum(),
digest1.count(),
digest1.max(),
digest1.min(),
100);
EXPECT_EQ(digest1.sum(), digest2.sum());
EXPECT_EQ(digest1.count(), digest2.count());
EXPECT_EQ(digest1.min(), digest2.min());
EXPECT_EQ(digest1.max(), digest2.max());
EXPECT_EQ(digest1.getCentroids().size(), digest2.getCentroids().size());
TDigest digest3(
digest1.getCentroids(),
digest1.sum(),
digest1.count(),
digest1.max(),
digest1.min(),
centroid_count - 1);
EXPECT_EQ(digest1.sum(), digest3.sum());
EXPECT_EQ(digest1.count(), digest3.count());
EXPECT_EQ(digest1.min(), digest3.min());
EXPECT_EQ(digest1.max(), digest3.max());
EXPECT_NE(digest1.getCentroids().size(), digest3.getCentroids().size());
}
class DistributionTest class DistributionTest
: public ::testing::TestWithParam< : public ::testing::TestWithParam<
std::tuple<std::pair<bool, size_t>, double, bool>> {}; std::tuple<std::pair<bool, size_t>, double, bool>> {};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment