wavelet-matrix 2.2.7__tar.gz → 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/Cargo.lock +3 -3
  2. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/Cargo.toml +2 -2
  3. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/PKG-INFO +1 -1
  4. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/docs/wavelet_matrix.html +10 -10
  5. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/disk_wavelet_matrix/disk_wavelet_matrix.rs +18 -81
  6. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/dynamic_wavelet_matrix/dynamic_wavelet_matrix.rs +22 -82
  7. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/wavelet_matrix/dynamic_wavelet_matrix.rs +22 -82
  8. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/wavelet_matrix/wavelet_matrix.rs +191 -267
  9. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/wavelet_matrix/wavelet_matrix.rs +18 -84
  10. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/tests/test_disk_wavelet_matrix.py +40 -45
  11. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/tests/test_dynamic_wavelet_matrix.py +39 -47
  12. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/tests/test_wavelet_matrix.py +36 -44
  13. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/wavelet_matrix.pyi +2 -2
  14. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/.github/workflows/CI.yml +0 -0
  15. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/.gitignore +0 -0
  16. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/LICENSE +0 -0
  17. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/README.md +0 -0
  18. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/__init__.py +0 -0
  19. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/bench_disk_wavelet_matrix.py +0 -0
  20. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/bench_dynamic_wavelet_matrix.py +0 -0
  21. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/bench_wavelet_matrix.py +0 -0
  22. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/docs/index.html +0 -0
  23. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/error.html.jinja2 +0 -0
  24. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/frame.html.jinja2 +0 -0
  25. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/index.html.jinja2 +0 -0
  26. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/module.html.jinja2 +0 -0
  27. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pyproject.toml +0 -0
  28. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/disk_wavelet_matrix/disk_bit_vector.rs +0 -0
  29. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/disk_wavelet_matrix/mod.rs +0 -0
  30. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/dynamic_wavelet_matrix/dynamic_bit_vector.rs +0 -0
  31. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/dynamic_wavelet_matrix/mod.rs +0 -0
  32. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/lib.rs +0 -0
  33. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/python/dynamic_wavelet_matrix.rs +0 -0
  34. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/python/mod.rs +0 -0
  35. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/python/wavelet_matrix.rs +0 -0
  36. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/bit_vector/bit_vector.rs +0 -0
  37. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/bit_vector/dynamic_bit_vector.rs +0 -0
  38. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/bit_vector/mod.rs +0 -0
  39. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/mod.rs +0 -0
  40. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/utils/bit_select.rs +0 -0
  41. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/utils/bit_width.rs +0 -0
  42. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/utils/mod.rs +0 -0
  43. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/wavelet_matrix/mod.rs +0 -0
  44. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/wavelet_matrix/bit_vector.rs +0 -0
  45. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/wavelet_matrix/mod.rs +0 -0
  46. {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/tests/__init__.py +0 -0
@@ -53,9 +53,9 @@ checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17"
53
53
 
54
54
  [[package]]
55
55
  name = "either"
56
- version = "1.17.0"
56
+ version = "1.18.0"
57
57
  source = "registry+https://github.com/rust-lang/crates.io-index"
58
- checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d"
58
+ checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34"
59
59
 
60
60
  [[package]]
61
61
  name = "errno"
@@ -305,7 +305,7 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
305
305
 
306
306
  [[package]]
307
307
  name = "wavelet-matrix"
308
- version = "2.2.7"
308
+ version = "3.0.0"
309
309
  dependencies = [
310
310
  "bytemuck",
311
311
  "memmap2",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "wavelet-matrix"
3
- version = "2.2.7"
3
+ version = "3.0.0"
4
4
  edition = "2024"
5
5
  readme = "README.md"
6
6
 
@@ -13,7 +13,7 @@ crate-type = ["cdylib"]
13
13
  bytemuck = "1.25.2"
14
14
  memmap2 = "0.9.11"
15
15
  num-bigint = "0.4.8"
16
- num-integer = "0.1.46"
16
+ num-integer = "0.1.47"
17
17
  num-traits = "0.2.19"
18
18
  pyo3 = { version = "0.29.2", features = ["abi3-py39", "abi3t-py315", "num-bigint"] }
19
19
  rayon = "1.12.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wavelet-matrix
3
- Version: 2.2.7
3
+ Version: 3.0.0
4
4
  Classifier: Intended Audience :: Developers
5
5
  Classifier: Intended Audience :: Science/Research
6
6
  Classifier: Intended Audience :: Information Technology
@@ -416,7 +416,7 @@ Result items look like {"value": x, "count": c}.</p>
416
416
 
417
417
  <div class="pdoc-code codehilite">
418
418
  <pre><span></span><code><span class="n">wm</span><span class="o">.</span><span class="n">topk</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
419
- <span class="c1"># [{&#39;value&#39;: 5, &#39;count&#39;: 3}, {&#39;value&#39;: 1, &#39;count&#39;: 2}]</span>
419
+ <span class="c1"># [{'value': 5, 'count': 3}, {'value': 1, 'count': 2}]</span>
420
420
  </code></pre>
421
421
  </div>
422
422
  </div>
@@ -477,7 +477,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
477
477
 
478
478
  <div class="pdoc-code codehilite">
479
479
  <pre><span></span><code><span class="n">wm</span><span class="o">.</span><span class="n">range_intersection</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">11</span><span class="p">)</span>
480
- <span class="c1"># [{&#39;value&#39;: 1, &#39;count1&#39;: 1, &#39;count2&#39;: 1}, {&#39;value&#39;: 5, &#39;count1&#39;: 3, &#39;count2&#39;: 2}]</span>
480
+ <span class="c1"># [{'value': 1, 'count1': 1, 'count2': 1}, {'value': 5, 'count1': 3, 'count2': 2}]</span>
481
481
  </code></pre>
482
482
  </div>
483
483
  </div>
@@ -537,7 +537,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
537
537
 
538
538
  <div class="pdoc-code codehilite">
539
539
  <pre><span></span><code><span class="n">wm</span><span class="o">.</span><span class="n">range_list</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
540
- <span class="c1"># [{&#39;value&#39;: 4, &#39;count&#39;: 1}, {&#39;value&#39;: 5, &#39;count&#39;: 3}]</span>
540
+ <span class="c1"># [{'value': 4, 'count': 1}, {'value': 5, 'count': 3}]</span>
541
541
  </code></pre>
542
542
  </div>
543
543
  </div>
@@ -567,7 +567,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
567
567
 
568
568
  <div class="pdoc-code codehilite">
569
569
  <pre><span></span><code><span class="n">wm</span><span class="o">.</span><span class="n">range_maxk</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
570
- <span class="c1"># [{&#39;value&#39;: 6, &#39;count&#39;: 1}, {&#39;value&#39;: 5, &#39;count&#39;: 3}]</span>
570
+ <span class="c1"># [{'value': 6, 'count': 1}, {'value': 5, 'count': 3}]</span>
571
571
  </code></pre>
572
572
  </div>
573
573
  </div>
@@ -597,7 +597,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
597
597
 
598
598
  <div class="pdoc-code codehilite">
599
599
  <pre><span></span><code><span class="n">wm</span><span class="o">.</span><span class="n">range_mink</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
600
- <span class="c1"># [{&#39;value&#39;: 1, &#39;count&#39;: 2}, {&#39;value&#39;: 2, &#39;count&#39;: 1}]</span>
600
+ <span class="c1"># [{'value': 1, 'count': 2}, {'value': 2, 'count': 1}]</span>
601
601
  </code></pre>
602
602
  </div>
603
603
  </div>
@@ -917,7 +917,7 @@ Result items look like {"value": x, "count": c}.</p>
917
917
 
918
918
  <div class="pdoc-code codehilite">
919
919
  <pre><span></span><code><span class="n">dwm</span><span class="o">.</span><span class="n">topk</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
920
- <span class="c1"># [{&#39;value&#39;: 5, &#39;count&#39;: 3}, {&#39;value&#39;: 1, &#39;count&#39;: 2}]</span>
920
+ <span class="c1"># [{'value': 5, 'count': 3}, {'value': 1, 'count': 2}]</span>
921
921
  </code></pre>
922
922
  </div>
923
923
  </div>
@@ -978,7 +978,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
978
978
 
979
979
  <div class="pdoc-code codehilite">
980
980
  <pre><span></span><code><span class="n">dwm</span><span class="o">.</span><span class="n">range_intersection</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">11</span><span class="p">)</span>
981
- <span class="c1"># [{&#39;value&#39;: 1, &#39;count1&#39;: 1, &#39;count2&#39;: 1}, {&#39;value&#39;: 5, &#39;count1&#39;: 3, &#39;count2&#39;: 2}]</span>
981
+ <span class="c1"># [{'value': 1, 'count1': 1, 'count2': 1}, {'value': 5, 'count1': 3, 'count2': 2}]</span>
982
982
  </code></pre>
983
983
  </div>
984
984
  </div>
@@ -1038,7 +1038,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
1038
1038
 
1039
1039
  <div class="pdoc-code codehilite">
1040
1040
  <pre><span></span><code><span class="n">dwm</span><span class="o">.</span><span class="n">range_list</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
1041
- <span class="c1"># [{&#39;value&#39;: 4, &#39;count&#39;: 1}, {&#39;value&#39;: 5, &#39;count&#39;: 3}]</span>
1041
+ <span class="c1"># [{'value': 4, 'count': 1}, {'value': 5, 'count': 3}]</span>
1042
1042
  </code></pre>
1043
1043
  </div>
1044
1044
  </div>
@@ -1068,7 +1068,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
1068
1068
 
1069
1069
  <div class="pdoc-code codehilite">
1070
1070
  <pre><span></span><code><span class="n">dwm</span><span class="o">.</span><span class="n">range_maxk</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
1071
- <span class="c1"># [{&#39;value&#39;: 6, &#39;count&#39;: 1}, {&#39;value&#39;: 5, &#39;count&#39;: 3}]</span>
1071
+ <span class="c1"># [{'value': 6, 'count': 1}, {'value': 5, 'count': 3}]</span>
1072
1072
  </code></pre>
1073
1073
  </div>
1074
1074
  </div>
@@ -1098,7 +1098,7 @@ Each item: {"value": x, "count1": a, "count2": b}.</p>
1098
1098
 
1099
1099
  <div class="pdoc-code codehilite">
1100
1100
  <pre><span></span><code><span class="n">dwm</span><span class="o">.</span><span class="n">range_mink</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
1101
- <span class="c1"># [{&#39;value&#39;: 1, &#39;count&#39;: 2}, {&#39;value&#39;: 2, &#39;count&#39;: 1}]</span>
1101
+ <span class="c1"># [{'value': 1, 'count': 2}, {'value': 2, 'count': 1}]</span>
1102
1102
  </code></pre>
1103
1103
  </div>
1104
1104
  </div>
@@ -193,6 +193,7 @@ where
193
193
  #[cfg(test)]
194
194
  mod tests {
195
195
  use num_bigint::BigUint;
196
+ use num_traits::Zero;
196
197
  use pyo3::Python;
197
198
 
198
199
  use super::*;
@@ -241,49 +242,22 @@ mod tests {
241
242
  wv_u8.select(&0u8, 0).unwrap_err().to_string(),
242
243
  "ValueError: kth must be greater than 0"
243
244
  );
244
- assert_eq!(
245
- wv_u8.quantile(0, 0, 1).unwrap_err().to_string(),
246
- "ValueError: start must be less than end"
247
- );
248
245
  assert_eq!(
249
246
  wv_u8.topk(0, 0, Some(1)).unwrap_err().to_string(),
250
- "ValueError: start must be less than end"
247
+ "ValueError: k is larger than the range size"
251
248
  );
249
+ assert_eq!(wv_u8.range_sum(0, 0).unwrap(), BigUint::zero(),);
252
250
  assert_eq!(
253
- wv_u8.range_sum(0, 0).unwrap_err().to_string(),
254
- "ValueError: start must be less than end"
251
+ wv_u8.range_intersection(0, 0, 0, 0).unwrap(),
252
+ Vec::<(u8, usize, usize)>::new()
255
253
  );
254
+ assert_eq!(wv_u8.range_freq(0, 0, None, None).unwrap(), 0,);
256
255
  assert_eq!(
257
- wv_u8
258
- .range_intersection(0, 0, 0, 0)
259
- .unwrap_err()
260
- .to_string(),
261
- "ValueError: start1 must be less than end1"
262
- );
263
- assert_eq!(
264
- wv_u8.range_freq(0, 0, None, None).unwrap_err().to_string(),
265
- "ValueError: start must be less than end"
266
- );
267
- assert_eq!(
268
- wv_u8.range_list(0, 0, None, None).unwrap_err().to_string(),
269
- "ValueError: start must be less than end"
270
- );
271
- assert_eq!(
272
- wv_u8.range_maxk(0, 0, Some(1)).unwrap_err().to_string(),
273
- "ValueError: start must be less than end"
274
- );
275
- assert_eq!(
276
- wv_u8.range_mink(0, 0, Some(1)).unwrap_err().to_string(),
277
- "ValueError: start must be less than end"
278
- );
279
- assert_eq!(
280
- wv_u8.prev_value(0, 0, None).unwrap_err().to_string(),
281
- "ValueError: start must be less than end"
282
- );
283
- assert_eq!(
284
- wv_u8.next_value(0, 0, None).unwrap_err().to_string(),
285
- "ValueError: start must be less than end"
256
+ wv_u8.range_list(0, 0, None, None).unwrap(),
257
+ Vec::<(u8, usize)>::new(),
286
258
  );
259
+ assert_eq!(wv_u8.prev_value(0, 0, None).unwrap(), None,);
260
+ assert_eq!(wv_u8.next_value(0, 0, None).unwrap(), None,);
287
261
 
288
262
  let file = tempfile().map_err(PyOSError::new_err).unwrap();
289
263
  file.set_len(0).unwrap();
@@ -301,55 +275,18 @@ mod tests {
301
275
  wv_u128.select(&0u128, 0).unwrap_err().to_string(),
302
276
  "ValueError: kth must be greater than 0"
303
277
  );
278
+ assert_eq!(wv_u128.range_sum(0, 0).unwrap(), BigUint::zero(),);
304
279
  assert_eq!(
305
- wv_u128.quantile(0, 0, 1).unwrap_err().to_string(),
306
- "ValueError: start must be less than end"
307
- );
308
- assert_eq!(
309
- wv_u128.topk(0, 0, Some(1)).unwrap_err().to_string(),
310
- "ValueError: start must be less than end"
311
- );
312
- assert_eq!(
313
- wv_u128.range_sum(0, 0).unwrap_err().to_string(),
314
- "ValueError: start must be less than end"
315
- );
316
- assert_eq!(
317
- wv_u128
318
- .range_intersection(0, 0, 0, 0)
319
- .unwrap_err()
320
- .to_string(),
321
- "ValueError: start1 must be less than end1"
322
- );
323
- assert_eq!(
324
- wv_u128
325
- .range_freq(0, 0, None, None)
326
- .unwrap_err()
327
- .to_string(),
328
- "ValueError: start must be less than end"
329
- );
330
- assert_eq!(
331
- wv_u128
332
- .range_list(0, 0, None, None)
333
- .unwrap_err()
334
- .to_string(),
335
- "ValueError: start must be less than end"
336
- );
337
- assert_eq!(
338
- wv_u128.range_maxk(0, 0, Some(1)).unwrap_err().to_string(),
339
- "ValueError: start must be less than end"
340
- );
341
- assert_eq!(
342
- wv_u128.range_mink(0, 0, Some(1)).unwrap_err().to_string(),
343
- "ValueError: start must be less than end"
344
- );
345
- assert_eq!(
346
- wv_u128.prev_value(0, 0, None).unwrap_err().to_string(),
347
- "ValueError: start must be less than end"
280
+ wv_u128.range_intersection(0, 0, 0, 0).unwrap(),
281
+ Vec::<(u128, usize, usize)>::new(),
348
282
  );
283
+ assert_eq!(wv_u128.range_freq(0, 0, None, None).unwrap(), 0,);
349
284
  assert_eq!(
350
- wv_u128.next_value(0, 0, None).unwrap_err().to_string(),
351
- "ValueError: start must be less than end"
285
+ wv_u128.range_list(0, 0, None, None).unwrap(),
286
+ Vec::<(u128, usize)>::new()
352
287
  );
288
+ assert_eq!(wv_u128.prev_value(0, 0, None).unwrap(), None,);
289
+ assert_eq!(wv_u128.next_value(0, 0, None).unwrap(), None,);
353
290
  }
354
291
 
355
292
  #[test]
@@ -206,50 +206,26 @@ mod tests {
206
206
  "IndexError: index out of bounds"
207
207
  );
208
208
  assert_eq!(wv_u8.rank(&0u8, 0).unwrap(), 0);
209
- assert_eq!(wv_u8.select(&0u8, 1).unwrap(), None);
210
209
  assert_eq!(
211
- wv_u8.quantile(0, 0, 1).unwrap_err().to_string(),
212
- "ValueError: start must be less than end"
210
+ wv_u8.select(&0u8, 0).unwrap_err().to_string(),
211
+ "ValueError: kth must be greater than 0"
213
212
  );
214
213
  assert_eq!(
215
214
  wv_u8.topk(0, 0, Some(1)).unwrap_err().to_string(),
216
- "ValueError: start must be less than end"
215
+ "ValueError: k is larger than the range size"
217
216
  );
217
+ assert_eq!(wv_u8.range_sum(0, 0).unwrap(), BigUint::zero(),);
218
218
  assert_eq!(
219
- wv_u8.range_sum(0, 0).unwrap_err().to_string(),
220
- "ValueError: start must be less than end"
219
+ wv_u8.range_intersection(0, 0, 0, 0).unwrap(),
220
+ Vec::<(u8, usize, usize)>::new()
221
221
  );
222
+ assert_eq!(wv_u8.range_freq(0, 0, None, None).unwrap(), 0,);
222
223
  assert_eq!(
223
- wv_u8
224
- .range_intersection(0, 0, 0, 0)
225
- .unwrap_err()
226
- .to_string(),
227
- "ValueError: start1 must be less than end1"
228
- );
229
- assert_eq!(
230
- wv_u8.range_freq(0, 0, None, None).unwrap_err().to_string(),
231
- "ValueError: start must be less than end"
232
- );
233
- assert_eq!(
234
- wv_u8.range_list(0, 0, None, None).unwrap_err().to_string(),
235
- "ValueError: start must be less than end"
236
- );
237
- assert_eq!(
238
- wv_u8.range_maxk(0, 0, Some(1)).unwrap_err().to_string(),
239
- "ValueError: start must be less than end"
240
- );
241
- assert_eq!(
242
- wv_u8.range_mink(0, 0, Some(1)).unwrap_err().to_string(),
243
- "ValueError: start must be less than end"
244
- );
245
- assert_eq!(
246
- wv_u8.prev_value(0, 0, None).unwrap_err().to_string(),
247
- "ValueError: start must be less than end"
248
- );
249
- assert_eq!(
250
- wv_u8.next_value(0, 0, None).unwrap_err().to_string(),
251
- "ValueError: start must be less than end"
224
+ wv_u8.range_list(0, 0, None, None).unwrap(),
225
+ Vec::<(u8, usize)>::new(),
252
226
  );
227
+ assert_eq!(wv_u8.prev_value(0, 0, None).unwrap(), None,);
228
+ assert_eq!(wv_u8.next_value(0, 0, None).unwrap(), None,);
253
229
 
254
230
  let wv_biguint = DynamicWaveletMatrix::<BigUint>::new(vec![], None).unwrap();
255
231
  assert_eq!(wv_biguint.len(), 0);
@@ -260,62 +236,26 @@ mod tests {
260
236
  "IndexError: index out of bounds"
261
237
  );
262
238
  assert_eq!(wv_biguint.rank(&0u32.into(), 0).unwrap(), 0);
263
- assert_eq!(wv_biguint.select(&0u32.into(), 1).unwrap(), None);
264
239
  assert_eq!(
265
- wv_biguint.quantile(0, 0, 1).unwrap_err().to_string(),
266
- "ValueError: start must be less than end"
240
+ wv_biguint.select(&0u32.into(), 0).unwrap_err().to_string(),
241
+ "ValueError: kth must be greater than 0"
267
242
  );
268
243
  assert_eq!(
269
244
  wv_biguint.topk(0, 0, Some(1)).unwrap_err().to_string(),
270
- "ValueError: start must be less than end"
271
- );
272
- assert_eq!(
273
- wv_biguint.range_sum(0, 0).unwrap_err().to_string(),
274
- "ValueError: start must be less than end"
275
- );
276
- assert_eq!(
277
- wv_biguint
278
- .range_intersection(0, 0, 0, 0)
279
- .unwrap_err()
280
- .to_string(),
281
- "ValueError: start1 must be less than end1"
282
- );
283
- assert_eq!(
284
- wv_biguint
285
- .range_freq(0, 0, None, None)
286
- .unwrap_err()
287
- .to_string(),
288
- "ValueError: start must be less than end"
289
- );
290
- assert_eq!(
291
- wv_biguint
292
- .range_list(0, 0, None, None)
293
- .unwrap_err()
294
- .to_string(),
295
- "ValueError: start must be less than end"
296
- );
297
- assert_eq!(
298
- wv_biguint
299
- .range_maxk(0, 0, Some(1))
300
- .unwrap_err()
301
- .to_string(),
302
- "ValueError: start must be less than end"
303
- );
304
- assert_eq!(
305
- wv_biguint
306
- .range_mink(0, 0, Some(1))
307
- .unwrap_err()
308
- .to_string(),
309
- "ValueError: start must be less than end"
245
+ "ValueError: k is larger than the range size"
310
246
  );
247
+ assert_eq!(wv_biguint.range_sum(0, 0).unwrap(), BigUint::zero(),);
311
248
  assert_eq!(
312
- wv_biguint.prev_value(0, 0, None).unwrap_err().to_string(),
313
- "ValueError: start must be less than end"
249
+ wv_biguint.range_intersection(0, 0, 0, 0).unwrap(),
250
+ Vec::<(BigUint, usize, usize)>::new()
314
251
  );
252
+ assert_eq!(wv_biguint.range_freq(0, 0, None, None).unwrap(), 0,);
315
253
  assert_eq!(
316
- wv_biguint.next_value(0, 0, None).unwrap_err().to_string(),
317
- "ValueError: start must be less than end"
254
+ wv_biguint.range_list(0, 0, None, None).unwrap(),
255
+ Vec::<(BigUint, usize)>::new(),
318
256
  );
257
+ assert_eq!(wv_biguint.prev_value(0, 0, None).unwrap(), None,);
258
+ assert_eq!(wv_biguint.next_value(0, 0, None).unwrap(), None);
319
259
  }
320
260
 
321
261
  #[test]
@@ -277,50 +277,26 @@ mod tests {
277
277
  "IndexError: index out of bounds"
278
278
  );
279
279
  assert_eq!(wv_u8.rank(&0u8, 0).unwrap(), 0);
280
- assert_eq!(wv_u8.select(&0u8, 1).unwrap(), None);
281
280
  assert_eq!(
282
- wv_u8.quantile(0, 0, 1).unwrap_err().to_string(),
283
- "ValueError: start must be less than end"
281
+ wv_u8.select(&0u8, 0).unwrap_err().to_string(),
282
+ "ValueError: kth must be greater than 0"
284
283
  );
285
284
  assert_eq!(
286
285
  wv_u8.topk(0, 0, Some(1)).unwrap_err().to_string(),
287
- "ValueError: start must be less than end"
286
+ "ValueError: k is larger than the range size"
288
287
  );
288
+ assert_eq!(wv_u8.range_sum(0, 0).unwrap(), BigUint::zero(),);
289
289
  assert_eq!(
290
- wv_u8.range_sum(0, 0).unwrap_err().to_string(),
291
- "ValueError: start must be less than end"
290
+ wv_u8.range_intersection(0, 0, 0, 0).unwrap(),
291
+ Vec::<(u8, usize, usize)>::new()
292
292
  );
293
+ assert_eq!(wv_u8.range_freq(0, 0, None, None).unwrap(), 0,);
293
294
  assert_eq!(
294
- wv_u8
295
- .range_intersection(0, 0, 0, 0)
296
- .unwrap_err()
297
- .to_string(),
298
- "ValueError: start1 must be less than end1"
299
- );
300
- assert_eq!(
301
- wv_u8.range_freq(0, 0, None, None).unwrap_err().to_string(),
302
- "ValueError: start must be less than end"
303
- );
304
- assert_eq!(
305
- wv_u8.range_list(0, 0, None, None).unwrap_err().to_string(),
306
- "ValueError: start must be less than end"
307
- );
308
- assert_eq!(
309
- wv_u8.range_maxk(0, 0, Some(1)).unwrap_err().to_string(),
310
- "ValueError: start must be less than end"
311
- );
312
- assert_eq!(
313
- wv_u8.range_mink(0, 0, Some(1)).unwrap_err().to_string(),
314
- "ValueError: start must be less than end"
315
- );
316
- assert_eq!(
317
- wv_u8.prev_value(0, 0, None).unwrap_err().to_string(),
318
- "ValueError: start must be less than end"
319
- );
320
- assert_eq!(
321
- wv_u8.next_value(0, 0, None).unwrap_err().to_string(),
322
- "ValueError: start must be less than end"
295
+ wv_u8.range_list(0, 0, None, None).unwrap(),
296
+ Vec::<(u8, usize)>::new(),
323
297
  );
298
+ assert_eq!(wv_u8.prev_value(0, 0, None).unwrap(), None,);
299
+ assert_eq!(wv_u8.next_value(0, 0, None).unwrap(), None,);
324
300
 
325
301
  let wv_biguint = SampleDynamicWaveletMatrix::<BigUint>::new(&Vec::new(), None).unwrap();
326
302
  assert_eq!(wv_biguint.len(), 0);
@@ -331,62 +307,26 @@ mod tests {
331
307
  "IndexError: index out of bounds"
332
308
  );
333
309
  assert_eq!(wv_biguint.rank(&0u32.into(), 0).unwrap(), 0);
334
- assert_eq!(wv_biguint.select(&0u32.into(), 1).unwrap(), None);
335
310
  assert_eq!(
336
- wv_biguint.quantile(0, 0, 1).unwrap_err().to_string(),
337
- "ValueError: start must be less than end"
311
+ wv_biguint.select(&0u32.into(), 0).unwrap_err().to_string(),
312
+ "ValueError: kth must be greater than 0"
338
313
  );
339
314
  assert_eq!(
340
315
  wv_biguint.topk(0, 0, Some(1)).unwrap_err().to_string(),
341
- "ValueError: start must be less than end"
342
- );
343
- assert_eq!(
344
- wv_biguint.range_sum(0, 0).unwrap_err().to_string(),
345
- "ValueError: start must be less than end"
346
- );
347
- assert_eq!(
348
- wv_biguint
349
- .range_intersection(0, 0, 0, 0)
350
- .unwrap_err()
351
- .to_string(),
352
- "ValueError: start1 must be less than end1"
353
- );
354
- assert_eq!(
355
- wv_biguint
356
- .range_freq(0, 0, None, None)
357
- .unwrap_err()
358
- .to_string(),
359
- "ValueError: start must be less than end"
360
- );
361
- assert_eq!(
362
- wv_biguint
363
- .range_list(0, 0, None, None)
364
- .unwrap_err()
365
- .to_string(),
366
- "ValueError: start must be less than end"
367
- );
368
- assert_eq!(
369
- wv_biguint
370
- .range_maxk(0, 0, Some(1))
371
- .unwrap_err()
372
- .to_string(),
373
- "ValueError: start must be less than end"
374
- );
375
- assert_eq!(
376
- wv_biguint
377
- .range_mink(0, 0, Some(1))
378
- .unwrap_err()
379
- .to_string(),
380
- "ValueError: start must be less than end"
316
+ "ValueError: k is larger than the range size"
381
317
  );
318
+ assert_eq!(wv_biguint.range_sum(0, 0).unwrap(), BigUint::zero(),);
382
319
  assert_eq!(
383
- wv_biguint.prev_value(0, 0, None).unwrap_err().to_string(),
384
- "ValueError: start must be less than end"
320
+ wv_biguint.range_intersection(0, 0, 0, 0).unwrap(),
321
+ Vec::<(BigUint, usize, usize)>::new()
385
322
  );
323
+ assert_eq!(wv_biguint.range_freq(0, 0, None, None).unwrap(), 0,);
386
324
  assert_eq!(
387
- wv_biguint.next_value(0, 0, None).unwrap_err().to_string(),
388
- "ValueError: start must be less than end"
325
+ wv_biguint.range_list(0, 0, None, None).unwrap(),
326
+ Vec::<(BigUint, usize)>::new(),
389
327
  );
328
+ assert_eq!(wv_biguint.prev_value(0, 0, None).unwrap(), None,);
329
+ assert_eq!(wv_biguint.next_value(0, 0, None).unwrap(), None);
390
330
  }
391
331
 
392
332
  #[test]