You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by al...@apache.org on 2022/01/26 01:08:03 UTC
[datasketches-cpp] 01/02: adjusted python wrapper
This is an automated email from the ASF dual-hosted git repository.
alsay pushed a commit to branch quantile_sketch_sorted_view
in repository https://gitbox.apache.org/repos/asf/datasketches-cpp.git
commit a9c8d075510fbba7e181792dc40f10487d13014c
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Tue Jan 25 17:03:53 2022 -0800
adjusted python wrapper
---
python/src/kll_wrapper.cpp | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/python/src/kll_wrapper.cpp b/python/src/kll_wrapper.cpp
index ab12818..3362c1d 100644
--- a/python/src/kll_wrapper.cpp
+++ b/python/src/kll_wrapper.cpp
@@ -59,10 +59,23 @@ double kll_sketch_get_rank(const kll_sketch<T>& sk, const T& item, bool inclusiv
}
template<typename T>
+T kll_sketch_get_quantile(const kll_sketch<T>& sk,
+ double rank,
+ bool inclusive) {
+ if (inclusive)
+ return T(sk.template get_quantile<true>(rank));
+ else
+ return T(sk.template get_quantile<false>(rank));
+}
+
+template<typename T>
py::list kll_sketch_get_quantiles(const kll_sketch<T>& sk,
- std::vector<double>& fractions) {
+ std::vector<double>& fractions,
+ bool inclusive) {
size_t nQuantiles = fractions.size();
- auto result = sk.get_quantiles(&fractions[0], nQuantiles);
+ auto result = inclusive ?
+ sk.template get_quantiles<true>(fractions.data(), nQuantiles)
+ : sk.template get_quantiles<false>(fractions.data(), nQuantiles);
// returning as std::vector<> would copy values to a list anyway
py::list list(nQuantiles);
@@ -79,8 +92,8 @@ py::list kll_sketch_get_pmf(const kll_sketch<T>& sk,
bool inclusive) {
size_t nPoints = split_points.size();
auto result = inclusive ?
- sk.template get_PMF<true>(&split_points[0], nPoints)
- : sk.template get_PMF<false>(&split_points[0], nPoints);
+ sk.template get_PMF<true>(split_points.data(), nPoints)
+ : sk.template get_PMF<false>(split_points.data(), nPoints);
py::list list(nPoints + 1);
for (size_t i = 0; i <= nPoints; ++i) {
@@ -96,8 +109,8 @@ py::list kll_sketch_get_cdf(const kll_sketch<T>& sk,
bool inclusive) {
size_t nPoints = split_points.size();
auto result = inclusive ?
- sk.template get_CDF<true>(&split_points[0], nPoints)
- : sk.template get_CDF<false>(&split_points[0], nPoints);
+ sk.template get_CDF<true>(split_points.data(), nPoints)
+ : sk.template get_CDF<false>(split_points.data(), nPoints);
py::list list(nPoints + 1);
for (size_t i = 0; i <= nPoints; ++i) {
@@ -156,7 +169,7 @@ void bind_kll_sketch(py::module &m, const char* name) {
"Returns the minimum value from the stream. If empty, kll_floats_sketch retursn nan; kll_ints_sketch throws a RuntimeError")
.def("get_max_value", &kll_sketch<T>::get_max_value,
"Returns the maximum value from the stream. If empty, kll_floats_sketch retursn nan; kll_ints_sketch throws a RuntimeError")
- .def("get_quantile", &kll_sketch<T>::get_quantile, py::arg("fraction"),
+ .def("get_quantile", &dspy::kll_sketch_get_quantile<T>, py::arg("fraction"), py::arg("inclusive")=false,
"Returns an approximation to the value of the data item "
"that would be preceded by the given fraction of a hypothetical sorted "
"version of the input stream so far.\n"
@@ -165,7 +178,7 @@ void bind_kll_sketch(py::module &m, const char* name) {
"sketch. Instead use get_quantiles(), which pays the overhead only once.\n"
"For kll_floats_sketch: if the sketch is empty this returns nan. "
"For kll_ints_sketch: if the sketch is empty this throws a RuntimeError.")
- .def("get_quantiles", &dspy::kll_sketch_get_quantiles<T>, py::arg("fractions"),
+ .def("get_quantiles", &dspy::kll_sketch_get_quantiles<T>, py::arg("fractions"), py::arg("inclusive")=false,
"This is a more efficient multiple-query version of get_quantile().\n"
"This returns an array that could have been generated by using get_quantile() for each "
"fractional rank separately, but would be very inefficient. "
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org