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.
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/Cargo.lock +3 -3
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/Cargo.toml +2 -2
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/PKG-INFO +1 -1
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/docs/wavelet_matrix.html +10 -10
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/disk_wavelet_matrix/disk_wavelet_matrix.rs +18 -81
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/dynamic_wavelet_matrix/dynamic_wavelet_matrix.rs +22 -82
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/wavelet_matrix/dynamic_wavelet_matrix.rs +22 -82
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/wavelet_matrix/wavelet_matrix.rs +191 -267
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/wavelet_matrix/wavelet_matrix.rs +18 -84
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/tests/test_disk_wavelet_matrix.py +40 -45
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/tests/test_dynamic_wavelet_matrix.py +39 -47
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/tests/test_wavelet_matrix.py +36 -44
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/wavelet_matrix.pyi +2 -2
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/.github/workflows/CI.yml +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/.gitignore +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/LICENSE +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/README.md +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/__init__.py +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/bench_disk_wavelet_matrix.py +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/bench_dynamic_wavelet_matrix.py +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/benchmarks/bench_wavelet_matrix.py +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/docs/index.html +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/error.html.jinja2 +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/frame.html.jinja2 +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/index.html.jinja2 +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pdoc_templates/module.html.jinja2 +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/pyproject.toml +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/disk_wavelet_matrix/disk_bit_vector.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/disk_wavelet_matrix/mod.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/dynamic_wavelet_matrix/dynamic_bit_vector.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/dynamic_wavelet_matrix/mod.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/lib.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/python/dynamic_wavelet_matrix.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/python/mod.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/python/wavelet_matrix.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/bit_vector/bit_vector.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/bit_vector/dynamic_bit_vector.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/bit_vector/mod.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/mod.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/utils/bit_select.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/utils/bit_width.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/utils/mod.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/wavelet_matrix/mod.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/wavelet_matrix/bit_vector.rs +0 -0
- {wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/wavelet_matrix/mod.rs +0 -0
- {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.
|
|
56
|
+
version = "1.18.0"
|
|
57
57
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
58
|
-
checksum = "
|
|
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 = "
|
|
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 = "
|
|
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.
|
|
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"
|
|
@@ -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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
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"># [{
|
|
1101
|
+
<span class="c1"># [{'value': 1, 'count': 2}, {'value': 2, 'count': 1}]</span>
|
|
1102
1102
|
</code></pre>
|
|
1103
1103
|
</div>
|
|
1104
1104
|
</div>
|
{wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/disk_wavelet_matrix/disk_wavelet_matrix.rs
RENAMED
|
@@ -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:
|
|
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.
|
|
254
|
-
|
|
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
|
-
|
|
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.
|
|
306
|
-
|
|
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.
|
|
351
|
-
|
|
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]
|
{wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/dynamic_wavelet_matrix/dynamic_wavelet_matrix.rs
RENAMED
|
@@ -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.
|
|
212
|
-
"ValueError:
|
|
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:
|
|
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.
|
|
220
|
-
|
|
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
|
-
|
|
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.
|
|
266
|
-
"ValueError:
|
|
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:
|
|
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.
|
|
313
|
-
|
|
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.
|
|
317
|
-
|
|
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]
|
{wavelet_matrix-2.2.7 → wavelet_matrix-3.0.0}/src/traits/wavelet_matrix/dynamic_wavelet_matrix.rs
RENAMED
|
@@ -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.
|
|
283
|
-
"ValueError:
|
|
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:
|
|
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.
|
|
291
|
-
|
|
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
|
-
|
|
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.
|
|
337
|
-
"ValueError:
|
|
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:
|
|
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.
|
|
384
|
-
|
|
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.
|
|
388
|
-
|
|
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]
|