datasketches 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf7f5b6898a9f014d14fc5fcfa3a6a5da1dd5fc70d1b07bbbdf07a446126d9cd
4
- data.tar.gz: 15d5fbb2ee6e0c1a6e7f25a145329eb73da9d7933f5f1475596b9e9c998b31f7
3
+ metadata.gz: 1d74bd4504918fd8217f9cf7d8c24442b5c196b2d874a042f6a2f30a24ae51db
4
+ data.tar.gz: 7521194ca0d05808b234c6cb1bb5150874c28f7e9536820f728b33b0aec8c52a
5
5
  SHA512:
6
- metadata.gz: e3b412132bdaf7e45f85e1da48690ecccd3c510cc17fd5259f0244cb580f712dc58290fca50a547a9e0952cf7c0548124ed33be9224ba3b83d6dd461d70c2aab
7
- data.tar.gz: 5f6d9932824961e11d6f8bd390dbf20e487b6ca8aef6b6440e5f6a11296227382be5261ebaf1da416d5f2354c7c99a97e34871b0964facc724ba33f2b88e96f6
6
+ metadata.gz: db41c21f18a51bf285e32556c52e06453810448d1d75d11cd1022576a98d5069977d65fe6bab7e5bd6425468531414fdd801a1bde1bfdf82fc05f455d97b80fd
7
+ data.tar.gz: 892e9f2c4b891194cfc1af8387494e78eb2e703b4a56f7c91e1b4784f0bd2439f35f8e25f92e954be44418d2964e804f892ab687df2acf8e9b64d43e0049cca0
@@ -1,3 +1,7 @@
1
+ ## 0.1.2 (2021-01-21)
2
+
3
+ - Added `CpcUnion` and `UpdateThetaSketch`
4
+
1
5
  ## 0.1.1 (2021-01-20)
2
6
 
3
7
  - Added more sketches
data/README.md CHANGED
@@ -18,6 +18,7 @@ Distinct counting
18
18
 
19
19
  - [CPC sketch](#cpc-sketch)
20
20
  - [HyperLogLog sketch](#hyperloglog-sketch)
21
+ - [Theta sketch](#theta-sketch)
21
22
 
22
23
  Most frequent
23
24
 
@@ -36,7 +37,7 @@ Sampling
36
37
  Create a sketch
37
38
 
38
39
  ```ruby
39
- sketch = DataSketches::CpcSketch.new(14)
40
+ sketch = DataSketches::CpcSketch.new
40
41
  ```
41
42
 
42
43
  Add data
@@ -65,6 +66,15 @@ Load a sketch
65
66
  sketch = DataSketches::CpcSketch.deserialize(data)
66
67
  ```
67
68
 
69
+ Get the union
70
+
71
+ ```ruby
72
+ u = DataSketches::CpcUnion.new(14)
73
+ u.update(sketch1)
74
+ u.update(sketch2)
75
+ u.result
76
+ ```
77
+
68
78
  ## HyperLogLog Sketch
69
79
 
70
80
  Create a sketch
@@ -107,7 +117,66 @@ Get the union
107
117
  u = DataSketches::HllUnion.new(14)
108
118
  u.update(sketch1)
109
119
  u.update(sketch2)
110
- u.estimate
120
+ u.result
121
+ ```
122
+
123
+ ## Theta Sketch
124
+
125
+ Create a sketch
126
+
127
+ ```ruby
128
+ sketch = DataSketches::UpdateThetaSketch.new
129
+ ```
130
+
131
+ Add data
132
+
133
+ ```ruby
134
+ sketch.update(1)
135
+ sketch.update(2.0)
136
+ sketch.update("three")
137
+ ```
138
+
139
+ Estimate the count
140
+
141
+ ```ruby
142
+ sketch.estimate
143
+ ```
144
+
145
+ Save a sketch
146
+
147
+ ```ruby
148
+ data = sketch.serialize
149
+ ```
150
+
151
+ Load a sketch
152
+
153
+ ```ruby
154
+ sketch = DataSketches::UpdateThetaSketch.deserialize(data)
155
+ ```
156
+
157
+ Get the union
158
+
159
+ ```ruby
160
+ u = DataSketches::ThetaUnion.new
161
+ u.update(sketch1)
162
+ u.update(sketch2)
163
+ u.result
164
+ ```
165
+
166
+ Get the intersection
167
+
168
+ ```ruby
169
+ i = DataSketches::ThetaIntersection.new
170
+ i.update(sketch1)
171
+ i.update(sketch2)
172
+ i.result
173
+ ```
174
+
175
+ Compute A not B
176
+
177
+ ```ruby
178
+ d = DataSketches::ThetaANotB.new
179
+ d.compute(a, b)
111
180
  ```
112
181
 
113
182
  ## Frequent Item Sketch
@@ -149,9 +218,9 @@ sketch = DataSketches::FrequentStringsSketch.deserialize(data)
149
218
  Create a sketch
150
219
 
151
220
  ```ruby
152
- sketch = DataSketches::KllIntsSketch.new(200)
221
+ sketch = DataSketches::KllIntsSketch.new
153
222
  # or
154
- sketch = DataSketches::KllFloatsSketch.new(200)
223
+ sketch = DataSketches::KllFloatsSketch.new
155
224
  ```
156
225
 
157
226
  Add data
@@ -167,6 +236,7 @@ Get quantiles
167
236
  ```ruby
168
237
  sketch.quantile(0.5)
169
238
  sketch.quantiles([0.25, 0.5, 0.75])
239
+ sketch.quantiles(3)
170
240
  ```
171
241
 
172
242
  Get the minimum and maximum values from the stream
@@ -210,6 +280,12 @@ sketch.update(2.0)
210
280
  sketch.update("three")
211
281
  ```
212
282
 
283
+ Sample data
284
+
285
+ ```ruby
286
+ sketch.samples
287
+ ```
288
+
213
289
  ## Credits
214
290
 
215
291
  This library is modeled after the DataSketches [Python API](https://github.com/apache/datasketches-cpp/tree/master/python).
@@ -1,20 +1,29 @@
1
1
  #include <sstream>
2
2
 
3
3
  #include <cpc_sketch.hpp>
4
+ #include <cpc_union.hpp>
4
5
 
5
6
  #include <rice/Constructor.hpp>
6
7
  #include <rice/Module.hpp>
7
8
 
9
+ using datasketches::cpc_sketch;
10
+ using datasketches::cpc_union;
11
+
12
+ using datasketches::CPC_DEFAULT_LG_K;
13
+ using datasketches::DEFAULT_SEED;
14
+
15
+ using Rice::Arg;
16
+
8
17
  void init_cpc(Rice::Module& m) {
9
- Rice::define_class_under<datasketches::cpc_sketch>(m, "CpcSketch")
10
- .define_constructor(Rice::Constructor<datasketches::cpc_sketch, uint8_t>())
11
- .define_method("lg_k", &datasketches::cpc_sketch::get_lg_k)
12
- .define_method("empty?", &datasketches::cpc_sketch::is_empty)
13
- .define_method("lower_bound", &datasketches::cpc_sketch::get_lower_bound)
14
- .define_method("upper_bound", &datasketches::cpc_sketch::get_upper_bound)
18
+ Rice::define_class_under<cpc_sketch>(m, "CpcSketch")
19
+ .define_constructor(Rice::Constructor<cpc_sketch, uint8_t, uint64_t>(), (Rice::Arg("lg_k")=CPC_DEFAULT_LG_K, Rice::Arg("seed")=DEFAULT_SEED))
20
+ .define_method("lg_k", &cpc_sketch::get_lg_k)
21
+ .define_method("empty?", &cpc_sketch::is_empty)
22
+ .define_method("lower_bound", &cpc_sketch::get_lower_bound)
23
+ .define_method("upper_bound", &cpc_sketch::get_upper_bound)
15
24
  .define_method(
16
25
  "update",
17
- *[](datasketches::cpc_sketch& self, Rice::Object datum) {
26
+ *[](cpc_sketch& self, Rice::Object datum) {
18
27
  if (FIXNUM_P(datum.value())) {
19
28
  return self.update(from_ruby<int64_t>(datum));
20
29
  } else if (datum.is_a(rb_cNumeric)) {
@@ -25,12 +34,12 @@ void init_cpc(Rice::Module& m) {
25
34
  })
26
35
  .define_method(
27
36
  "estimate",
28
- *[](datasketches::cpc_sketch& self) {
37
+ *[](cpc_sketch& self) {
29
38
  return self.get_estimate();
30
39
  })
31
40
  .define_method(
32
41
  "serialize",
33
- *[](datasketches::cpc_sketch& self) {
42
+ *[](cpc_sketch& self) {
34
43
  std::ostringstream oss;
35
44
  self.serialize(oss);
36
45
  return oss.str();
@@ -38,13 +47,22 @@ void init_cpc(Rice::Module& m) {
38
47
  // TODO change to summary?
39
48
  .define_method(
40
49
  "to_string",
41
- *[](datasketches::cpc_sketch& self) {
50
+ *[](cpc_sketch& self) {
42
51
  return self.to_string();
43
52
  })
44
53
  .define_singleton_method(
45
54
  "deserialize",
46
55
  *[](std::string& is) {
47
56
  std::istringstream iss(is);
48
- return datasketches::cpc_sketch::deserialize(iss);
57
+ return cpc_sketch::deserialize(iss);
58
+ });
59
+
60
+ Rice::define_class_under<cpc_union>(m, "CpcUnion")
61
+ .define_constructor(Rice::Constructor<cpc_union, uint8_t, uint64_t>(), (Rice::Arg("lg_k"), Rice::Arg("seed")=DEFAULT_SEED))
62
+ .define_method("result", &cpc_union::get_result)
63
+ .define_method(
64
+ "update",
65
+ *[](cpc_union& self, cpc_sketch& sketch) {
66
+ self.update(sketch);
49
67
  });
50
68
  }
@@ -5,15 +5,19 @@
5
5
  #include <rice/Constructor.hpp>
6
6
  #include <rice/Module.hpp>
7
7
 
8
+ using datasketches::hll_sketch;
9
+ using datasketches::hll_union;
10
+
8
11
  void init_hll(Rice::Module& m) {
9
- Rice::define_class_under<datasketches::hll_sketch>(m, "HllSketch")
10
- .define_constructor(Rice::Constructor<datasketches::hll_sketch, int>())
11
- .define_method("lg_config_k", &datasketches::hll_sketch::get_lg_config_k)
12
- .define_method("compact?", &datasketches::hll_sketch::is_compact)
13
- .define_method("empty?", &datasketches::hll_sketch::is_empty)
12
+ Rice::define_class_under<hll_sketch>(m, "HllSketch")
13
+ .define_constructor(Rice::Constructor<hll_sketch, int>())
14
+ .define_method("lg_config_k", &hll_sketch::get_lg_config_k)
15
+ .define_method("compact?", &hll_sketch::is_compact)
16
+ .define_method("empty?", &hll_sketch::is_empty)
17
+ .define_method("composite_estimate", &hll_sketch::get_composite_estimate)
14
18
  .define_method(
15
19
  "update",
16
- *[](datasketches::hll_sketch& self, Rice::Object datum) {
20
+ *[](hll_sketch& self, Rice::Object datum) {
17
21
  if (FIXNUM_P(datum.value())) {
18
22
  return self.update(from_ruby<int64_t>(datum));
19
23
  } else if (datum.is_a(rb_cNumeric)) {
@@ -24,19 +28,19 @@ void init_hll(Rice::Module& m) {
24
28
  })
25
29
  .define_method(
26
30
  "estimate",
27
- *[](datasketches::hll_sketch& self) {
31
+ *[](hll_sketch& self) {
28
32
  return self.get_estimate();
29
33
  })
30
34
  .define_method(
31
35
  "serialize_compact",
32
- *[](datasketches::hll_sketch& self) {
36
+ *[](hll_sketch& self) {
33
37
  std::ostringstream oss;
34
38
  self.serialize_compact(oss);
35
39
  return oss.str();
36
40
  })
37
41
  .define_method(
38
42
  "serialize_updatable",
39
- *[](datasketches::hll_sketch& self) {
43
+ *[](hll_sketch& self) {
40
44
  std::ostringstream oss;
41
45
  self.serialize_updatable(oss);
42
46
  return oss.str();
@@ -44,26 +48,31 @@ void init_hll(Rice::Module& m) {
44
48
  // TODO change to summary?
45
49
  .define_method(
46
50
  "to_string",
47
- *[](datasketches::hll_sketch& self) {
51
+ *[](hll_sketch& self) {
48
52
  return self.to_string();
49
53
  })
50
54
  .define_singleton_method(
51
55
  "deserialize",
52
56
  *[](std::string& is) {
53
57
  std::istringstream iss(is);
54
- return datasketches::hll_sketch::deserialize(iss);
58
+ return hll_sketch::deserialize(iss);
55
59
  });
56
60
 
57
- Rice::define_class_under<datasketches::hll_union>(m, "HllUnion")
58
- .define_constructor(Rice::Constructor<datasketches::hll_union, int>())
61
+ Rice::define_class_under<hll_union>(m, "HllUnion")
62
+ .define_constructor(Rice::Constructor<hll_union, int>())
59
63
  .define_method(
60
64
  "update",
61
- *[](datasketches::hll_union& self, datasketches::hll_sketch& datum) {
62
- self.update(datum);
65
+ *[](hll_union& self, hll_sketch& sketch) {
66
+ self.update(sketch);
63
67
  })
64
68
  .define_method(
65
69
  "estimate",
66
- *[](datasketches::hll_union& self) {
70
+ *[](hll_union& self) {
67
71
  return self.get_estimate();
72
+ })
73
+ .define_method(
74
+ "result",
75
+ *[](hll_union& self) {
76
+ return self.get_result();
68
77
  });
69
78
  }
@@ -6,12 +6,36 @@
6
6
  #include <rice/Constructor.hpp>
7
7
  #include <rice/Module.hpp>
8
8
 
9
+ using datasketches::kll_sketch;
10
+
11
+ template<>
12
+ std::vector<int> from_ruby<std::vector<int>>(Rice::Object x)
13
+ {
14
+ auto a = Rice::Array(x);
15
+ std::vector<int> vec(a.size());
16
+ for (long i = 0; i < a.size(); i++) {
17
+ vec[i] = from_ruby<int>(a[i]);
18
+ }
19
+ return vec;
20
+ }
21
+
22
+ template<>
23
+ std::vector<float> from_ruby<std::vector<float>>(Rice::Object x)
24
+ {
25
+ auto a = Rice::Array(x);
26
+ std::vector<float> vec(a.size());
27
+ for (long i = 0; i < a.size(); i++) {
28
+ vec[i] = from_ruby<float>(a[i]);
29
+ }
30
+ return vec;
31
+ }
32
+
9
33
  template<>
10
34
  std::vector<double> from_ruby<std::vector<double>>(Rice::Object x)
11
35
  {
12
36
  auto a = Rice::Array(x);
13
37
  std::vector<double> vec(a.size());
14
- for (size_t i = 0; i < a.size(); i++) {
38
+ for (long i = 0; i < a.size(); i++) {
15
39
  vec[i] = from_ruby<double>(a[i]);
16
40
  }
17
41
  return vec;
@@ -37,32 +61,65 @@ Rice::Object to_ruby<std::vector<float>>(std::vector<float> const & x)
37
61
  return a;
38
62
  }
39
63
 
64
+ template<>
65
+ Rice::Object to_ruby<std::vector<double>>(std::vector<double> const & x)
66
+ {
67
+ auto a = Rice::Array();
68
+ for (size_t i = 0; i < x.size(); i++) {
69
+ a.push(x[i]);
70
+ }
71
+ return a;
72
+ }
73
+
40
74
  template<typename T>
41
75
  void bind_kll_sketch(Rice::Module& m, const char* name) {
42
- Rice::define_class_under<datasketches::kll_sketch<T>>(m, name)
43
- .define_constructor(Rice::Constructor<datasketches::kll_sketch<T>, uint16_t>())
44
- .define_method("empty?", &datasketches::kll_sketch<T>::is_empty)
45
- .define_method("min_value", &datasketches::kll_sketch<T>::get_min_value)
46
- .define_method("max_value", &datasketches::kll_sketch<T>::get_max_value)
47
- .define_method("quantile", &datasketches::kll_sketch<T>::get_quantile)
76
+ Rice::define_class_under<kll_sketch<T>>(m, name)
77
+ .define_constructor(Rice::Constructor<kll_sketch<T>, uint16_t>(), (Rice::Arg("k")=kll_sketch<T>::DEFAULT_K))
78
+ .define_method("empty?", &kll_sketch<T>::is_empty)
79
+ .define_method("n", &kll_sketch<T>::get_n)
80
+ .define_method("num_retained", &kll_sketch<T>::get_num_retained)
81
+ .define_method("estimation_mode?", &kll_sketch<T>::is_estimation_mode)
82
+ .define_method("min_value", &kll_sketch<T>::get_min_value)
83
+ .define_method("max_value", &kll_sketch<T>::get_max_value)
84
+ .define_method("quantile", &kll_sketch<T>::get_quantile)
48
85
  .define_method(
49
86
  "quantiles",
50
- *[](datasketches::kll_sketch<T>& self, std::vector<double> fractions) {
51
- return self.get_quantiles(&fractions[0], fractions.size());
87
+ *[](kll_sketch<T>& self, Rice::Object obj) {
88
+ if (obj.is_a(rb_cArray)) {
89
+ auto fractions = from_ruby<std::vector<double>>(obj);
90
+ return self.get_quantiles(&fractions[0], fractions.size());
91
+ } else {
92
+ return self.get_quantiles(from_ruby<size_t>(obj));
93
+ }
94
+ })
95
+ .define_method(
96
+ "rank",
97
+ *[](kll_sketch<T>& self, const T item) {
98
+ return self.get_rank(item);
99
+ })
100
+ .define_method(
101
+ "pmf",
102
+ *[](kll_sketch<T>& self, std::vector<T> split_points) {
103
+ return self.get_PMF(&split_points[0], split_points.size());
104
+ })
105
+ .define_method(
106
+ "cdf",
107
+ *[](kll_sketch<T>& self, std::vector<T> split_points) {
108
+ return self.get_CDF(&split_points[0], split_points.size());
52
109
  })
53
110
  .define_method(
54
111
  "merge",
55
- *[](datasketches::kll_sketch<T>& self, const datasketches::kll_sketch<T>& other) {
112
+ *[](kll_sketch<T>& self, const kll_sketch<T>& other) {
56
113
  self.merge(other);
57
114
  })
58
115
  .define_method(
59
116
  "update",
60
- *[](datasketches::kll_sketch<T>& self, const T item) {
117
+ *[](kll_sketch<T>& self, const T item) {
61
118
  self.update(item);
62
119
  })
63
120
  .define_method(
64
121
  "serialize",
65
- *[](datasketches::kll_sketch<T>& self) {
122
+ *[](kll_sketch<T>& self) {
66
123
  std::ostringstream oss;
67
124
  self.serialize(oss);
68
125
  return oss.str();
@@ -70,14 +127,14 @@ void bind_kll_sketch(Rice::Module& m, const char* name) {
70
127
  // TODO change to summary?
71
128
  .define_method(
72
129
  "to_string",
73
- *[](datasketches::kll_sketch<T>& self) {
130
+ *[](kll_sketch<T>& self) {
74
131
  return self.to_string();
75
132
  })
76
133
  .define_singleton_method(
77
134
  "deserialize",
78
135
  *[](std::string& is) {
79
136
  std::istringstream iss(is);
80
- return datasketches::kll_sketch<T>::deserialize(iss);
137
+ return kll_sketch<T>::deserialize(iss);
81
138
  });
82
139
  }
83
140
 
@@ -1,12 +1,102 @@
1
1
  #include <sstream>
2
2
 
3
3
  #include <theta_sketch.hpp>
4
+ #include <theta_union.hpp>
5
+ #include <theta_intersection.hpp>
6
+ #include <theta_a_not_b.hpp>
4
7
 
5
8
  #include <rice/Constructor.hpp>
6
9
  #include <rice/Module.hpp>
7
10
 
11
+ using datasketches::theta_sketch;
12
+ using datasketches::update_theta_sketch;
13
+ using datasketches::compact_theta_sketch;
14
+ using datasketches::theta_union;
15
+ using datasketches::theta_intersection;
16
+ using datasketches::theta_a_not_b;
17
+
18
+ using datasketches::DEFAULT_SEED;
19
+
20
+ using Rice::Arg;
21
+
8
22
  void init_theta(Rice::Module& m) {
9
- Rice::define_class_under<datasketches::theta_sketch>(m, "ThetaSketch")
10
- .define_method("empty?", &datasketches::theta_sketch::is_empty)
11
- .define_method("estimate", &datasketches::theta_sketch::get_estimate);
23
+ Rice::define_class_under<theta_sketch>(m, "ThetaSketch")
24
+ .define_method("empty?", &theta_sketch::is_empty)
25
+ .define_method("estimate", &theta_sketch::get_estimate)
26
+ .define_method("lower_bound", &theta_sketch::get_lower_bound)
27
+ .define_method("upper_bound", &theta_sketch::get_upper_bound)
28
+ .define_method(
29
+ "serialize",
30
+ *[](theta_sketch& self) {
31
+ std::ostringstream oss;
32
+ self.serialize(oss);
33
+ return oss.str();
34
+ });
35
+
36
+ Rice::define_class_under<update_theta_sketch, theta_sketch>(m, "UpdateThetaSketch")
37
+ .define_singleton_method(
38
+ "new",
39
+ *[](uint8_t lg_k, double p, uint64_t seed) {
40
+ update_theta_sketch::builder builder;
41
+ builder.set_lg_k(lg_k);
42
+ builder.set_p(p);
43
+ builder.set_seed(seed);
44
+ return builder.build();
45
+ },
46
+ (Arg("lg_k")=update_theta_sketch::builder::DEFAULT_LG_K, Arg("p")=1.0, Arg("seed")=DEFAULT_SEED))
47
+ .define_method("compact", &update_theta_sketch::compact, (Arg("ordered")=true))
48
+ .define_method(
49
+ "update",
50
+ *[](update_theta_sketch& self, Rice::Object datum) {
51
+ if (FIXNUM_P(datum.value())) {
52
+ return self.update(from_ruby<int64_t>(datum));
53
+ } else if (datum.is_a(rb_cNumeric)) {
54
+ return self.update(from_ruby<double>(datum));
55
+ } else {
56
+ return self.update(datum.to_s().str());
57
+ }
58
+ })
59
+ .define_method(
60
+ "estimate",
61
+ *[](update_theta_sketch& self) {
62
+ return self.get_estimate();
63
+ })
64
+ .define_singleton_method(
65
+ "deserialize",
66
+ *[](std::string& is) {
67
+ std::istringstream iss(is);
68
+ return update_theta_sketch::deserialize(iss);
69
+ });
70
+
71
+ Rice::define_class_under<compact_theta_sketch, theta_sketch>(m, "CompactThetaSketch")
72
+ .define_singleton_method(
73
+ "deserialize",
74
+ *[](std::string& is) {
75
+ std::istringstream iss(is);
76
+ return compact_theta_sketch::deserialize(iss);
77
+ });
78
+
79
+ Rice::define_class_under<theta_union>(m, "ThetaUnion")
80
+ .define_singleton_method(
81
+ "new",
82
+ *[](uint8_t lg_k, double p, uint64_t seed) {
83
+ theta_union::builder builder;
84
+ builder.set_lg_k(lg_k);
85
+ builder.set_p(p);
86
+ builder.set_seed(seed);
87
+ return builder.build();
88
+ },
89
+ (Arg("lg_k")=update_theta_sketch::builder::DEFAULT_LG_K, Arg("p")=1.0, Arg("seed")=DEFAULT_SEED))
90
+ .define_method("update", &theta_union::update)
91
+ .define_method("result", &theta_union::get_result, (Arg("ordered")=true));
92
+
93
+ Rice::define_class_under<theta_intersection>(m, "ThetaIntersection")
94
+ .define_constructor(Rice::Constructor<theta_intersection, uint64_t>(), (Arg("seed")=DEFAULT_SEED))
95
+ .define_method("update", &theta_intersection::update)
96
+ .define_method("result", &theta_intersection::get_result, (Arg("ordered")=true))
97
+ .define_method("result?", &theta_intersection::has_result);
98
+
99
+ Rice::define_class_under<theta_a_not_b>(m, "ThetaANotB")
100
+ .define_constructor(Rice::Constructor<theta_a_not_b, uint64_t>(), (Arg("seed")=DEFAULT_SEED))
101
+ .define_method("compute", &theta_a_not_b::compute, (Arg("a"), Arg("b"), Arg("ordered")=true));
12
102
  }
@@ -6,18 +6,20 @@
6
6
  #include <rice/Constructor.hpp>
7
7
  #include <rice/Module.hpp>
8
8
 
9
+ using datasketches::var_opt_sketch;
10
+
9
11
  template<typename T>
10
12
  void bind_vo_sketch(Rice::Module &m, const char* name) {
11
- Rice::define_class_under<datasketches::var_opt_sketch<T>>(m, "VarOptSketch")
12
- .define_constructor(Rice::Constructor<datasketches::var_opt_sketch<T>, uint32_t>())
13
- .define_method("k", &datasketches::var_opt_sketch<T>::get_k)
14
- .define_method("n", &datasketches::var_opt_sketch<T>::get_n)
15
- .define_method("num_samples", &datasketches::var_opt_sketch<T>::get_num_samples)
16
- .define_method("empty?", &datasketches::var_opt_sketch<T>::is_empty)
17
- .define_method("reset", &datasketches::var_opt_sketch<T>::reset)
13
+ Rice::define_class_under<var_opt_sketch<T>>(m, "VarOptSketch")
14
+ .define_constructor(Rice::Constructor<var_opt_sketch<T>, uint32_t>())
15
+ .define_method("k", &var_opt_sketch<T>::get_k)
16
+ .define_method("n", &var_opt_sketch<T>::get_n)
17
+ .define_method("num_samples", &var_opt_sketch<T>::get_num_samples)
18
+ .define_method("empty?", &var_opt_sketch<T>::is_empty)
19
+ .define_method("reset", &var_opt_sketch<T>::reset)
18
20
  .define_method(
19
21
  "samples",
20
- *[](datasketches::var_opt_sketch<T>& self) {
22
+ *[](var_opt_sketch<T>& self) {
21
23
  auto a = Rice::Array();
22
24
  for (auto item : self) {
23
25
  auto t = Rice::Array();
@@ -29,7 +31,7 @@ void bind_vo_sketch(Rice::Module &m, const char* name) {
29
31
  })
30
32
  .define_method(
31
33
  "update",
32
- *[](datasketches::var_opt_sketch<T>& self, const T item) {
34
+ *[](var_opt_sketch<T>& self, const T item) {
33
35
  self.update(item);
34
36
  });
35
37
  }
@@ -1,3 +1,3 @@
1
1
  module DataSketches
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datasketches
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-20 00:00:00.000000000 Z
11
+ date: 2021-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice