datasketches 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/datasketches/version.rb +1 -1
  4. data/vendor/datasketches-cpp/CMakeLists.txt +7 -0
  5. data/vendor/datasketches-cpp/common/include/MurmurHash3.h +11 -7
  6. data/vendor/datasketches-cpp/common/include/binomial_bounds.hpp +8 -8
  7. data/vendor/datasketches-cpp/common/include/bounds_binomial_proportions.hpp +12 -15
  8. data/vendor/datasketches-cpp/common/include/common_defs.hpp +24 -0
  9. data/vendor/datasketches-cpp/common/include/conditional_forward.hpp +20 -8
  10. data/vendor/datasketches-cpp/common/include/count_zeros.hpp +2 -2
  11. data/vendor/datasketches-cpp/common/include/serde.hpp +7 -7
  12. data/vendor/datasketches-cpp/cpc/include/cpc_compressor.hpp +19 -19
  13. data/vendor/datasketches-cpp/cpc/include/cpc_compressor_impl.hpp +91 -89
  14. data/vendor/datasketches-cpp/cpc/include/cpc_sketch.hpp +14 -1
  15. data/vendor/datasketches-cpp/cpc/include/cpc_sketch_impl.hpp +121 -87
  16. data/vendor/datasketches-cpp/cpc/include/cpc_union_impl.hpp +14 -14
  17. data/vendor/datasketches-cpp/cpc/include/cpc_util.hpp +10 -10
  18. data/vendor/datasketches-cpp/cpc/include/icon_estimator.hpp +4 -4
  19. data/vendor/datasketches-cpp/cpc/include/u32_table.hpp +8 -8
  20. data/vendor/datasketches-cpp/cpc/include/u32_table_impl.hpp +14 -14
  21. data/vendor/datasketches-cpp/cpc/test/compression_test.cpp +10 -10
  22. data/vendor/datasketches-cpp/cpc/test/cpc_sketch_test.cpp +25 -0
  23. data/vendor/datasketches-cpp/cpc/test/cpc_union_test.cpp +1 -1
  24. data/vendor/datasketches-cpp/fi/include/frequent_items_sketch_impl.hpp +65 -80
  25. data/vendor/datasketches-cpp/fi/include/reverse_purge_hash_map_impl.hpp +10 -10
  26. data/vendor/datasketches-cpp/fi/test/reverse_purge_hash_map_test.cpp +2 -2
  27. data/vendor/datasketches-cpp/hll/include/AuxHashMap-internal.hpp +60 -63
  28. data/vendor/datasketches-cpp/hll/include/AuxHashMap.hpp +19 -19
  29. data/vendor/datasketches-cpp/hll/include/CompositeInterpolationXTable-internal.hpp +15 -15
  30. data/vendor/datasketches-cpp/hll/include/CompositeInterpolationXTable.hpp +3 -3
  31. data/vendor/datasketches-cpp/hll/include/CouponHashSet-internal.hpp +74 -76
  32. data/vendor/datasketches-cpp/hll/include/CouponHashSet.hpp +6 -6
  33. data/vendor/datasketches-cpp/hll/include/CouponList-internal.hpp +110 -113
  34. data/vendor/datasketches-cpp/hll/include/CouponList.hpp +13 -13
  35. data/vendor/datasketches-cpp/hll/include/CubicInterpolation-internal.hpp +2 -4
  36. data/vendor/datasketches-cpp/hll/include/HarmonicNumbers-internal.hpp +1 -1
  37. data/vendor/datasketches-cpp/hll/include/Hll4Array-internal.hpp +80 -76
  38. data/vendor/datasketches-cpp/hll/include/Hll4Array.hpp +9 -9
  39. data/vendor/datasketches-cpp/hll/include/Hll6Array-internal.hpp +26 -26
  40. data/vendor/datasketches-cpp/hll/include/Hll6Array.hpp +6 -6
  41. data/vendor/datasketches-cpp/hll/include/Hll8Array-internal.hpp +33 -33
  42. data/vendor/datasketches-cpp/hll/include/Hll8Array.hpp +6 -6
  43. data/vendor/datasketches-cpp/hll/include/HllArray-internal.hpp +205 -209
  44. data/vendor/datasketches-cpp/hll/include/HllArray.hpp +36 -36
  45. data/vendor/datasketches-cpp/hll/include/HllSketch-internal.hpp +28 -28
  46. data/vendor/datasketches-cpp/hll/include/HllSketchImpl-internal.hpp +22 -22
  47. data/vendor/datasketches-cpp/hll/include/HllSketchImpl.hpp +13 -13
  48. data/vendor/datasketches-cpp/hll/include/HllSketchImplFactory.hpp +15 -15
  49. data/vendor/datasketches-cpp/hll/include/HllUnion-internal.hpp +61 -61
  50. data/vendor/datasketches-cpp/hll/include/HllUtil.hpp +120 -127
  51. data/vendor/datasketches-cpp/hll/include/coupon_iterator-internal.hpp +9 -9
  52. data/vendor/datasketches-cpp/hll/include/coupon_iterator.hpp +5 -5
  53. data/vendor/datasketches-cpp/hll/include/hll.hpp +21 -21
  54. data/vendor/datasketches-cpp/hll/test/AuxHashMapTest.cpp +1 -1
  55. data/vendor/datasketches-cpp/hll/test/CouponHashSetTest.cpp +34 -34
  56. data/vendor/datasketches-cpp/hll/test/CouponListTest.cpp +25 -25
  57. data/vendor/datasketches-cpp/hll/test/CrossCountingTest.cpp +2 -2
  58. data/vendor/datasketches-cpp/hll/test/HllArrayTest.cpp +35 -35
  59. data/vendor/datasketches-cpp/hll/test/HllSketchTest.cpp +15 -15
  60. data/vendor/datasketches-cpp/hll/test/HllUnionTest.cpp +10 -14
  61. data/vendor/datasketches-cpp/hll/test/IsomorphicTest.cpp +3 -3
  62. data/vendor/datasketches-cpp/hll/test/ToFromByteArrayTest.cpp +4 -4
  63. data/vendor/datasketches-cpp/kll/include/kll_helper.hpp +5 -4
  64. data/vendor/datasketches-cpp/kll/include/kll_helper_impl.hpp +6 -6
  65. data/vendor/datasketches-cpp/kll/include/kll_quantile_calculator.hpp +14 -6
  66. data/vendor/datasketches-cpp/kll/include/kll_quantile_calculator_impl.hpp +39 -24
  67. data/vendor/datasketches-cpp/kll/include/kll_sketch.hpp +34 -2
  68. data/vendor/datasketches-cpp/kll/include/kll_sketch_impl.hpp +72 -62
  69. data/vendor/datasketches-cpp/kll/include/kolmogorov_smirnov.hpp +67 -0
  70. data/vendor/datasketches-cpp/kll/include/kolmogorov_smirnov_impl.hpp +78 -0
  71. data/vendor/datasketches-cpp/kll/test/CMakeLists.txt +1 -0
  72. data/vendor/datasketches-cpp/kll/test/kll_sketch_test.cpp +68 -45
  73. data/vendor/datasketches-cpp/kll/test/kolmogorov_smirnov_test.cpp +111 -0
  74. data/vendor/datasketches-cpp/python/src/hll_wrapper.cpp +4 -4
  75. data/vendor/datasketches-cpp/python/src/theta_wrapper.cpp +6 -6
  76. data/vendor/datasketches-cpp/python/src/vo_wrapper.cpp +2 -2
  77. data/vendor/datasketches-cpp/python/tests/hll_test.py +1 -1
  78. data/vendor/datasketches-cpp/python/tests/vo_test.py +3 -3
  79. data/vendor/datasketches-cpp/req/include/req_common.hpp +2 -1
  80. data/vendor/datasketches-cpp/req/include/req_compactor.hpp +4 -4
  81. data/vendor/datasketches-cpp/req/include/req_compactor_impl.hpp +26 -39
  82. data/vendor/datasketches-cpp/req/include/req_sketch.hpp +1 -1
  83. data/vendor/datasketches-cpp/req/include/req_sketch_impl.hpp +9 -9
  84. data/vendor/datasketches-cpp/req/test/req_sketch_test.cpp +52 -52
  85. data/vendor/datasketches-cpp/sampling/include/var_opt_sketch_impl.hpp +47 -56
  86. data/vendor/datasketches-cpp/sampling/include/var_opt_union_impl.hpp +34 -42
  87. data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_test.cpp +6 -6
  88. data/vendor/datasketches-cpp/sampling/test/var_opt_union_test.cpp +13 -13
  89. data/vendor/datasketches-cpp/setup.py +1 -1
  90. data/vendor/datasketches-cpp/theta/include/bounds_on_ratios_in_sampled_sets.hpp +1 -1
  91. data/vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser.hpp +67 -0
  92. data/vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser_impl.hpp +70 -0
  93. data/vendor/datasketches-cpp/theta/include/theta_intersection.hpp +9 -4
  94. data/vendor/datasketches-cpp/theta/include/theta_intersection_impl.hpp +1 -1
  95. data/vendor/datasketches-cpp/theta/include/theta_jaccard_similarity_base.hpp +18 -14
  96. data/vendor/datasketches-cpp/theta/include/theta_sketch.hpp +42 -1
  97. data/vendor/datasketches-cpp/theta/include/theta_sketch_impl.hpp +107 -58
  98. data/vendor/datasketches-cpp/theta/include/theta_union.hpp +4 -4
  99. data/vendor/datasketches-cpp/theta/include/theta_union_base_impl.hpp +1 -1
  100. data/vendor/datasketches-cpp/theta/include/theta_union_impl.hpp +1 -1
  101. data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base.hpp +2 -0
  102. data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base_impl.hpp +33 -28
  103. data/vendor/datasketches-cpp/theta/test/theta_a_not_b_test.cpp +23 -1
  104. data/vendor/datasketches-cpp/theta/test/theta_intersection_test.cpp +21 -1
  105. data/vendor/datasketches-cpp/theta/test/theta_jaccard_similarity_test.cpp +58 -2
  106. data/vendor/datasketches-cpp/theta/test/theta_sketch_test.cpp +37 -1
  107. data/vendor/datasketches-cpp/theta/test/theta_union_test.cpp +22 -2
  108. data/vendor/datasketches-cpp/tuple/include/array_of_doubles_sketch_impl.hpp +47 -60
  109. data/vendor/datasketches-cpp/tuple/include/tuple_sketch_impl.hpp +51 -64
  110. data/vendor/datasketches-cpp/tuple/test/array_of_doubles_sketch_test.cpp +1 -1
  111. data/vendor/datasketches-cpp/tuple/test/tuple_a_not_b_test.cpp +17 -17
  112. data/vendor/datasketches-cpp/tuple/test/tuple_intersection_test.cpp +12 -12
  113. data/vendor/datasketches-cpp/tuple/test/tuple_jaccard_similarity_test.cpp +5 -5
  114. data/vendor/datasketches-cpp/tuple/test/tuple_sketch_allocation_test.cpp +1 -1
  115. data/vendor/datasketches-cpp/tuple/test/tuple_sketch_test.cpp +20 -20
  116. data/vendor/datasketches-cpp/tuple/test/tuple_union_test.cpp +12 -12
  117. metadata +8 -3
@@ -64,7 +64,7 @@ TEST_CASE("tuple sketch with test allocator: estimation mode", "[tuple_sketch]")
64
64
  REQUIRE(count == update_sketch.get_num_retained());
65
65
 
66
66
  update_sketch.trim();
67
- REQUIRE(update_sketch.get_num_retained() == (1 << update_sketch.get_lg_k()));
67
+ REQUIRE(update_sketch.get_num_retained() == (1U << update_sketch.get_lg_k()));
68
68
 
69
69
  auto compact_sketch = update_sketch.compact();
70
70
  REQUIRE(!compact_sketch.is_empty());
@@ -40,7 +40,7 @@ namespace datasketches {
40
40
 
41
41
  TEST_CASE("tuple sketch float: builder", "[tuple_sketch]") {
42
42
  auto builder = update_tuple_sketch<float>::builder();
43
- builder.set_lg_k(10).set_p(0.5).set_resize_factor(theta_constants::resize_factor::X2).set_seed(123);
43
+ builder.set_lg_k(10).set_p(0.5f).set_resize_factor(theta_constants::resize_factor::X2).set_seed(123);
44
44
  auto sketch = builder.build();
45
45
  REQUIRE(sketch.get_lg_k() == 10);
46
46
  REQUIRE(sketch.get_theta() == 0.5);
@@ -74,9 +74,9 @@ TEST_CASE("tuple sketch float: empty", "[tuple_sketch]") {
74
74
 
75
75
  TEST_CASE("tuple sketch float: exact mode", "[tuple_sketch]") {
76
76
  auto update_sketch = update_tuple_sketch<float>::builder().build();
77
- update_sketch.update(1, 1);
78
- update_sketch.update(2, 2);
79
- update_sketch.update(1, 1);
77
+ update_sketch.update(1, 1.0f);
78
+ update_sketch.update(2, 2.0f);
79
+ update_sketch.update(1, 1.0f);
80
80
  // std::cout << update_sketch.to_string(true);
81
81
  REQUIRE(!update_sketch.is_empty());
82
82
  REQUIRE(!update_sketch.is_estimation_mode());
@@ -167,11 +167,11 @@ using max_float_update_tuple_sketch = update_tuple_sketch<float, float, max_valu
167
167
 
168
168
  TEST_CASE("tuple sketch: float, custom policy", "[tuple_sketch]") {
169
169
  auto update_sketch = max_float_update_tuple_sketch::builder(max_value_policy<float>(5)).build();
170
- update_sketch.update(1, 1);
171
- update_sketch.update(1, 2);
172
- update_sketch.update(2, 10);
173
- update_sketch.update(3, 3);
174
- update_sketch.update(3, 7);
170
+ update_sketch.update(1, 1.0f);
171
+ update_sketch.update(1, 2.0f);
172
+ update_sketch.update(2, 10.0f);
173
+ update_sketch.update(3, 3.0f);
174
+ update_sketch.update(3, 7.0f);
175
175
  // std::cout << update_sketch.to_string(true);
176
176
  int count = 0;
177
177
  float sum = 0;
@@ -212,37 +212,37 @@ TEST_CASE("tuple sketch: tuple of doubles", "[tuple_sketch]") {
212
212
  TEST_CASE("tuple sketch: float, update with different types of keys", "[tuple_sketch]") {
213
213
  auto sketch = update_tuple_sketch<float>::builder().build();
214
214
 
215
- sketch.update(static_cast<uint64_t>(1), 1);
215
+ sketch.update(static_cast<uint64_t>(1), 1.0f);
216
216
  REQUIRE(sketch.get_num_retained() == 1);
217
217
 
218
- sketch.update(static_cast<int64_t>(1), 1);
218
+ sketch.update(static_cast<int64_t>(1), 1.0f);
219
219
  REQUIRE(sketch.get_num_retained() == 1);
220
220
 
221
- sketch.update(static_cast<uint32_t>(1), 1);
221
+ sketch.update(static_cast<uint32_t>(1), 1.0f);
222
222
  REQUIRE(sketch.get_num_retained() == 1);
223
223
 
224
- sketch.update(static_cast<int32_t>(1), 1);
224
+ sketch.update(static_cast<int32_t>(1), 1.0f);
225
225
  REQUIRE(sketch.get_num_retained() == 1);
226
226
 
227
- sketch.update(static_cast<uint16_t>(1), 1);
227
+ sketch.update(static_cast<uint16_t>(1), 1.0f);
228
228
  REQUIRE(sketch.get_num_retained() == 1);
229
229
 
230
- sketch.update(static_cast<int16_t>(1), 1);
230
+ sketch.update(static_cast<int16_t>(1), 1.0f);
231
231
  REQUIRE(sketch.get_num_retained() == 1);
232
232
 
233
- sketch.update(static_cast<uint8_t>(1), 1);
233
+ sketch.update(static_cast<uint8_t>(1), 1.0f);
234
234
  REQUIRE(sketch.get_num_retained() == 1);
235
235
 
236
- sketch.update(static_cast<int8_t>(1), 1);
236
+ sketch.update(static_cast<int8_t>(1), 1.0f);
237
237
  REQUIRE(sketch.get_num_retained() == 1);
238
238
 
239
- sketch.update(1.0, 1);
239
+ sketch.update(1.0, 1.0f);
240
240
  REQUIRE(sketch.get_num_retained() == 2);
241
241
 
242
- sketch.update(static_cast<float>(1), 1);
242
+ sketch.update(static_cast<float>(1), 1.0f);
243
243
  REQUIRE(sketch.get_num_retained() == 2);
244
244
 
245
- sketch.update("a", 1);
245
+ sketch.update("a", 1.0f);
246
246
  REQUIRE(sketch.get_num_retained() == 3);
247
247
  }
248
248
 
@@ -51,9 +51,9 @@ TEST_CASE("tupe_union float: empty theta sketch", "[tuple union]") {
51
51
  }
52
52
 
53
53
  TEST_CASE("tuple_union float: non-empty no retained entries", "[tuple union]") {
54
- auto update_sketch = update_tuple_sketch<float>::builder().set_p(0.001).build();
54
+ auto update_sketch = update_tuple_sketch<float>::builder().set_p(0.001f).build();
55
55
  // std::cout << update_sketch.to_string();
56
- update_sketch.update(1, 1);
56
+ update_sketch.update(1, 1.0f);
57
57
  REQUIRE(!update_sketch.is_empty());
58
58
  REQUIRE(update_sketch.get_num_retained() == 0);
59
59
  auto u = tuple_union<float>::builder().build();
@@ -69,12 +69,12 @@ TEST_CASE("tuple_union float: non-empty no retained entries", "[tuple union]") {
69
69
 
70
70
  TEST_CASE("tuple_union float: simple case", "[tuple union]") {
71
71
  auto update_sketch1 = update_tuple_sketch<float>::builder().build();
72
- update_sketch1.update(1, 1);
73
- update_sketch1.update(2, 1);
72
+ update_sketch1.update(1, 1.0f);
73
+ update_sketch1.update(2, 1.0f);
74
74
 
75
75
  auto update_sketch2 = update_tuple_sketch<float>::builder().build();
76
- update_sketch2.update(1, 1);
77
- update_sketch2.update(3, 1);
76
+ update_sketch2.update(1, 1.0f);
77
+ update_sketch2.update(3, 1.0f);
78
78
 
79
79
  auto u = tuple_union<float>::builder().build();
80
80
  u.update(update_sketch1);
@@ -86,11 +86,11 @@ TEST_CASE("tuple_union float: simple case", "[tuple union]") {
86
86
  TEST_CASE("tuple_union float: exact mode half overlap", "[tuple union]") {
87
87
  auto update_sketch1 = update_tuple_sketch<float>::builder().build();
88
88
  int value = 0;
89
- for (int i = 0; i < 1000; ++i) update_sketch1.update(value++, 1);
89
+ for (int i = 0; i < 1000; ++i) update_sketch1.update(value++, 1.0f);
90
90
 
91
91
  auto update_sketch2 = update_tuple_sketch<float>::builder().build();
92
92
  value = 500;
93
- for (int i = 0; i < 1000; ++i) update_sketch2.update(value++, 1);
93
+ for (int i = 0; i < 1000; ++i) update_sketch2.update(value++, 1.0f);
94
94
 
95
95
  { // unordered
96
96
  auto u = tuple_union<float>::builder().build();
@@ -115,11 +115,11 @@ TEST_CASE("tuple_union float: exact mode half overlap", "[tuple union]") {
115
115
  TEST_CASE("tuple_union float: estimation mode half overlap", "[tuple union]") {
116
116
  auto update_sketch1 = update_tuple_sketch<float>::builder().build();
117
117
  int value = 0;
118
- for (int i = 0; i < 10000; ++i) update_sketch1.update(value++, 1);
118
+ for (int i = 0; i < 10000; ++i) update_sketch1.update(value++, 1.0f);
119
119
 
120
120
  auto update_sketch2 = update_tuple_sketch<float>::builder().build();
121
121
  value = 5000;
122
- for (int i = 0; i < 10000; ++i) update_sketch2.update(value++, 1);
122
+ for (int i = 0; i < 10000; ++i) update_sketch2.update(value++, 1.0f);
123
123
 
124
124
  { // unordered
125
125
  auto u = tuple_union<float>::builder().build();
@@ -143,7 +143,7 @@ TEST_CASE("tuple_union float: estimation mode half overlap", "[tuple union]") {
143
143
 
144
144
  TEST_CASE("tuple_union float: seed mismatch", "[tuple union]") {
145
145
  auto update_sketch = update_tuple_sketch<float>::builder().build();
146
- update_sketch.update(1, 1); // non-empty should not be ignored
146
+ update_sketch.update(1, 1.0f); // non-empty should not be ignored
147
147
 
148
148
  auto u = tuple_union<float>::builder().set_seed(123).build();
149
149
  REQUIRE_THROWS_AS(u.update(update_sketch), std::invalid_argument);
@@ -154,7 +154,7 @@ TEST_CASE("tuple_union float: full overlap with theta sketch", "[tuple union]")
154
154
 
155
155
  // tuple update
156
156
  auto update_tuple = update_tuple_sketch<float>::builder().build();
157
- for (unsigned i = 0; i < 10; ++i) update_tuple.update(i, 1);
157
+ for (unsigned i = 0; i < 10; ++i) update_tuple.update(i, 1.0f);
158
158
  u.update(update_tuple);
159
159
 
160
160
  // tuple compact
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.2.1
4
+ version: 0.2.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-05-23 00:00:00.000000000 Z
11
+ date: 2021-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -160,12 +160,15 @@ files:
160
160
  - vendor/datasketches-cpp/kll/include/kll_quantile_calculator_impl.hpp
161
161
  - vendor/datasketches-cpp/kll/include/kll_sketch.hpp
162
162
  - vendor/datasketches-cpp/kll/include/kll_sketch_impl.hpp
163
+ - vendor/datasketches-cpp/kll/include/kolmogorov_smirnov.hpp
164
+ - vendor/datasketches-cpp/kll/include/kolmogorov_smirnov_impl.hpp
163
165
  - vendor/datasketches-cpp/kll/test/CMakeLists.txt
164
166
  - vendor/datasketches-cpp/kll/test/kll_sketch_custom_type_test.cpp
165
167
  - vendor/datasketches-cpp/kll/test/kll_sketch_float_one_item_v1.sk
166
168
  - vendor/datasketches-cpp/kll/test/kll_sketch_from_java.sk
167
169
  - vendor/datasketches-cpp/kll/test/kll_sketch_test.cpp
168
170
  - vendor/datasketches-cpp/kll/test/kll_sketch_validation.cpp
171
+ - vendor/datasketches-cpp/kll/test/kolmogorov_smirnov_test.cpp
169
172
  - vendor/datasketches-cpp/pyproject.toml
170
173
  - vendor/datasketches-cpp/python/CMakeLists.txt
171
174
  - vendor/datasketches-cpp/python/README.md
@@ -226,6 +229,8 @@ files:
226
229
  - vendor/datasketches-cpp/theta/CMakeLists.txt
227
230
  - vendor/datasketches-cpp/theta/include/bounds_on_ratios_in_sampled_sets.hpp
228
231
  - vendor/datasketches-cpp/theta/include/bounds_on_ratios_in_theta_sketched_sets.hpp
232
+ - vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser.hpp
233
+ - vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser_impl.hpp
229
234
  - vendor/datasketches-cpp/theta/include/theta_a_not_b.hpp
230
235
  - vendor/datasketches-cpp/theta/include/theta_a_not_b_impl.hpp
231
236
  - vendor/datasketches-cpp/theta/include/theta_comparators.hpp
@@ -308,7 +313,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
308
313
  - !ruby/object:Gem::Version
309
314
  version: '0'
310
315
  requirements: []
311
- rubygems_version: 3.2.3
316
+ rubygems_version: 3.2.22
312
317
  signing_key:
313
318
  specification_version: 4
314
319
  summary: Sketch data structures for Ruby