wavelet-matrix 2.2.1__tar.gz → 2.2.4__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.1 → wavelet_matrix-2.2.4}/.github/workflows/CI.yml +24 -28
  2. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/Cargo.lock +124 -32
  3. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/Cargo.toml +3 -2
  4. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/PKG-INFO +1 -7
  5. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/README.md +0 -6
  6. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/benchmarks/bench_disk_wavelet_matrix.py +11 -11
  7. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/pyproject.toml +1 -1
  8. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/disk_wavelet_matrix/disk_bit_vector.rs +131 -65
  9. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/disk_wavelet_matrix/disk_wavelet_matrix.rs +158 -52
  10. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/lib.rs +1 -1
  11. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/python/wavelet_matrix.rs +101 -73
  12. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/.gitignore +0 -0
  13. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/LICENSE +0 -0
  14. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/benchmarks/__init__.py +0 -0
  15. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/benchmarks/bench_dynamic_wavelet_matrix.py +0 -0
  16. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/benchmarks/bench_wavelet_matrix.py +0 -0
  17. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/docs/index.html +0 -0
  18. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/docs/wavelet_matrix.html +0 -0
  19. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/pdoc_templates/error.html.jinja2 +0 -0
  20. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/pdoc_templates/frame.html.jinja2 +0 -0
  21. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/pdoc_templates/index.html.jinja2 +0 -0
  22. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/pdoc_templates/module.html.jinja2 +0 -0
  23. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/disk_wavelet_matrix/mod.rs +0 -0
  24. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/dynamic_wavelet_matrix/dynamic_bit_vector.rs +0 -0
  25. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/dynamic_wavelet_matrix/dynamic_wavelet_matrix.rs +0 -0
  26. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/dynamic_wavelet_matrix/mod.rs +0 -0
  27. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/python/dynamic_wavelet_matrix.rs +0 -0
  28. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/python/mod.rs +0 -0
  29. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/bit_vector/bit_vector.rs +0 -0
  30. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/bit_vector/dynamic_bit_vector.rs +0 -0
  31. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/bit_vector/mod.rs +0 -0
  32. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/mod.rs +0 -0
  33. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/utils/bit_select.rs +0 -0
  34. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/utils/bit_width.rs +0 -0
  35. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/utils/mod.rs +0 -0
  36. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/wavelet_matrix/dynamic_wavelet_matrix.rs +0 -0
  37. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/wavelet_matrix/mod.rs +0 -0
  38. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/traits/wavelet_matrix/wavelet_matrix.rs +0 -0
  39. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/wavelet_matrix/bit_vector.rs +0 -0
  40. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/wavelet_matrix/mod.rs +0 -0
  41. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/src/wavelet_matrix/wavelet_matrix.rs +0 -0
  42. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/tests/__init__.py +0 -0
  43. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/tests/test_disk_wavelet_matrix.py +0 -0
  44. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/tests/test_dynamic_wavelet_matrix.py +0 -0
  45. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/tests/test_wavelet_matrix.py +0 -0
  46. {wavelet_matrix-2.2.1 → wavelet_matrix-2.2.4}/wavelet_matrix.pyi +0 -0
@@ -42,8 +42,8 @@ jobs:
42
42
  - runner: ubuntu-latest
43
43
  target: ppc64le
44
44
  steps:
45
- - uses: actions/checkout@v6
46
- - uses: actions/setup-python@v6
45
+ - uses: actions/checkout@v7
46
+ - uses: actions/setup-python@v7
47
47
  with:
48
48
  python-version: 3.x
49
49
  - name: Build wheels
@@ -55,7 +55,7 @@ jobs:
55
55
  manylinux: auto
56
56
  - name: Upload wheels
57
57
  if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
58
- uses: actions/upload-artifact@v6
58
+ uses: actions/upload-artifact@v7
59
59
  with:
60
60
  name: wheels-linux-${{ matrix.platform.target }}
61
61
  path: dist
@@ -75,8 +75,8 @@ jobs:
75
75
  - runner: ubuntu-latest
76
76
  target: armv7
77
77
  steps:
78
- - uses: actions/checkout@v6
79
- - uses: actions/setup-python@v6
78
+ - uses: actions/checkout@v7
79
+ - uses: actions/setup-python@v7
80
80
  with:
81
81
  python-version: 3.x
82
82
  - name: Build wheels
@@ -88,7 +88,7 @@ jobs:
88
88
  manylinux: musllinux_1_2
89
89
  - name: Upload wheels
90
90
  if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
91
- uses: actions/upload-artifact@v6
91
+ uses: actions/upload-artifact@v7
92
92
  with:
93
93
  name: wheels-musllinux-${{ matrix.platform.target }}
94
94
  path: dist
@@ -104,8 +104,8 @@ jobs:
104
104
  - runner: windows-latest
105
105
  target: x86
106
106
  steps:
107
- - uses: actions/checkout@v6
108
- - uses: actions/setup-python@v6
107
+ - uses: actions/checkout@v7
108
+ - uses: actions/setup-python@v7
109
109
  with:
110
110
  python-version: 3.x
111
111
  architecture: ${{ matrix.platform.target }}
@@ -117,7 +117,7 @@ jobs:
117
117
  sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
118
118
  - name: Upload wheels
119
119
  if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
120
- uses: actions/upload-artifact@v6
120
+ uses: actions/upload-artifact@v7
121
121
  with:
122
122
  name: wheels-windows-${{ matrix.platform.target }}
123
123
  path: dist
@@ -133,8 +133,8 @@ jobs:
133
133
  - runner: macos-latest
134
134
  target: aarch64
135
135
  steps:
136
- - uses: actions/checkout@v6
137
- - uses: actions/setup-python@v6
136
+ - uses: actions/checkout@v7
137
+ - uses: actions/setup-python@v7
138
138
  with:
139
139
  python-version: 3.x
140
140
  - name: Build wheels
@@ -145,7 +145,7 @@ jobs:
145
145
  sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
146
146
  - name: Upload wheels
147
147
  if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
148
- uses: actions/upload-artifact@v6
148
+ uses: actions/upload-artifact@v7
149
149
  with:
150
150
  name: wheels-macos-${{ matrix.platform.target }}
151
151
  path: dist
@@ -154,8 +154,8 @@ jobs:
154
154
  needs: [cargo-test, python-test]
155
155
  runs-on: ubuntu-latest
156
156
  steps:
157
- - uses: actions/checkout@v6
158
- - uses: actions/setup-python@v6
157
+ - uses: actions/checkout@v7
158
+ - uses: actions/setup-python@v7
159
159
  with:
160
160
  python-version: 3.x
161
161
  - name: Build sdist
@@ -165,7 +165,7 @@ jobs:
165
165
  args: --out dist
166
166
  - name: Upload sdist
167
167
  if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
168
- uses: actions/upload-artifact@v6
168
+ uses: actions/upload-artifact@v7
169
169
  with:
170
170
  name: wheels-sdist
171
171
  path: dist
@@ -173,7 +173,7 @@ jobs:
173
173
  cargo-test:
174
174
  runs-on: ubuntu-latest
175
175
  steps:
176
- - uses: actions/checkout@v6
176
+ - uses: actions/checkout@v7
177
177
  - uses: dtolnay/rust-toolchain@stable
178
178
  with:
179
179
  components: clippy
@@ -191,7 +191,7 @@ jobs:
191
191
  - name: Clippy check
192
192
  run: cargo clippy --all-targets --all-features -- -D warnings
193
193
  - name: Upload coverage reports to Codecov
194
- uses: codecov/codecov-action@v5
194
+ uses: codecov/codecov-action@v7
195
195
  with:
196
196
  fail_ci_if_error: true
197
197
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -199,14 +199,14 @@ jobs:
199
199
  python-test:
200
200
  runs-on: ubuntu-latest
201
201
  steps:
202
- - uses: actions/checkout@v6
203
- - uses: actions/setup-python@v6
202
+ - uses: actions/checkout@v7
203
+ - uses: actions/setup-python@v7
204
204
  with:
205
205
  python-version: 3.x
206
206
  - name: Install packages
207
207
  run: python -m pip install -e .[test,dev]
208
208
  - name: Run tests
209
- run: pytest --benchmark-skip
209
+ run: python -m pytest --benchmark-skip
210
210
  - name: Docs check
211
211
  run: |
212
212
  pdoc wavelet_matrix \
@@ -233,11 +233,11 @@ jobs:
233
233
  - "3.12"
234
234
  - "3.13"
235
235
  - "3.14"
236
- - "3.15.0-beta.3"
236
+ - "3.15-dev"
237
237
  - "pypy3.11"
238
238
  steps:
239
- - uses: actions/checkout@v6
240
- - uses: actions/setup-python@v6
239
+ - uses: actions/checkout@v7
240
+ - uses: actions/setup-python@v7
241
241
  with:
242
242
  python-version: ${{ matrix.python }}
243
243
  - name: Install packages
@@ -245,7 +245,7 @@ jobs:
245
245
  python -m pip install --upgrade pip
246
246
  python -m pip install -e .[test]
247
247
  - name: Run benchmarks
248
- run: pytest --benchmark-only --db .pymon
248
+ run: python -m pytest --benchmark-only --db .pymon
249
249
  - name: Display benchmark results
250
250
  run: |
251
251
  sqlite3 -header -column .pymon '
@@ -278,10 +278,6 @@ jobs:
278
278
  pattern: wheels-*
279
279
  path: dist
280
280
  merge-multiple: true
281
- - name: Generate artifact attestation
282
- uses: actions/attest-build-provenance@v3
283
- with:
284
- subject-path: 'dist/*'
285
281
  - name: Publish to PyPI
286
282
  if: ${{ startsWith(github.ref, 'refs/tags/') }}
287
283
  uses: pypa/gh-action-pypi-publish@release/v1
@@ -8,17 +8,29 @@ version = "1.5.1"
8
8
  source = "registry+https://github.com/rust-lang/crates.io-index"
9
9
  checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
10
10
 
11
+ [[package]]
12
+ name = "bitflags"
13
+ version = "2.13.1"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
16
+
11
17
  [[package]]
12
18
  name = "bytemuck"
13
- version = "1.25.0"
19
+ version = "1.25.2"
20
+ source = "registry+https://github.com/rust-lang/crates.io-index"
21
+ checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"
22
+
23
+ [[package]]
24
+ name = "cfg-if"
25
+ version = "1.0.4"
14
26
  source = "registry+https://github.com/rust-lang/crates.io-index"
15
- checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
27
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
16
28
 
17
29
  [[package]]
18
30
  name = "crossbeam-deque"
19
- version = "0.8.6"
31
+ version = "0.8.7"
20
32
  source = "registry+https://github.com/rust-lang/crates.io-index"
21
- checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
33
+ checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb"
22
34
  dependencies = [
23
35
  "crossbeam-epoch",
24
36
  "crossbeam-utils",
@@ -26,18 +38,18 @@ dependencies = [
26
38
 
27
39
  [[package]]
28
40
  name = "crossbeam-epoch"
29
- version = "0.9.18"
41
+ version = "0.9.20"
30
42
  source = "registry+https://github.com/rust-lang/crates.io-index"
31
- checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
43
+ checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f"
32
44
  dependencies = [
33
45
  "crossbeam-utils",
34
46
  ]
35
47
 
36
48
  [[package]]
37
49
  name = "crossbeam-utils"
38
- version = "0.8.21"
50
+ version = "0.8.22"
39
51
  source = "registry+https://github.com/rust-lang/crates.io-index"
40
- checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
52
+ checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17"
41
53
 
42
54
  [[package]]
43
55
  name = "either"
@@ -45,6 +57,33 @@ version = "1.16.0"
45
57
  source = "registry+https://github.com/rust-lang/crates.io-index"
46
58
  checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
47
59
 
60
+ [[package]]
61
+ name = "errno"
62
+ version = "0.3.14"
63
+ source = "registry+https://github.com/rust-lang/crates.io-index"
64
+ checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
65
+ dependencies = [
66
+ "libc",
67
+ "windows-sys",
68
+ ]
69
+
70
+ [[package]]
71
+ name = "fastrand"
72
+ version = "2.5.0"
73
+ source = "registry+https://github.com/rust-lang/crates.io-index"
74
+ checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223"
75
+
76
+ [[package]]
77
+ name = "getrandom"
78
+ version = "0.4.3"
79
+ source = "registry+https://github.com/rust-lang/crates.io-index"
80
+ checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
81
+ dependencies = [
82
+ "cfg-if",
83
+ "libc",
84
+ "r-efi",
85
+ ]
86
+
48
87
  [[package]]
49
88
  name = "heck"
50
89
  version = "0.5.0"
@@ -53,9 +92,15 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
53
92
 
54
93
  [[package]]
55
94
  name = "libc"
56
- version = "0.2.186"
95
+ version = "0.2.189"
96
+ source = "registry+https://github.com/rust-lang/crates.io-index"
97
+ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
98
+
99
+ [[package]]
100
+ name = "linux-raw-sys"
101
+ version = "0.12.1"
57
102
  source = "registry+https://github.com/rust-lang/crates.io-index"
58
- checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
103
+ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
59
104
 
60
105
  [[package]]
61
106
  name = "memmap2"
@@ -68,9 +113,9 @@ dependencies = [
68
113
 
69
114
  [[package]]
70
115
  name = "num-bigint"
71
- version = "0.4.6"
116
+ version = "0.4.8"
72
117
  source = "registry+https://github.com/rust-lang/crates.io-index"
73
- checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
118
+ checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367"
74
119
  dependencies = [
75
120
  "num-integer",
76
121
  "num-traits",
@@ -102,24 +147,24 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
102
147
 
103
148
  [[package]]
104
149
  name = "portable-atomic"
105
- version = "1.13.1"
150
+ version = "1.14.0"
106
151
  source = "registry+https://github.com/rust-lang/crates.io-index"
107
- checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
152
+ checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3"
108
153
 
109
154
  [[package]]
110
155
  name = "proc-macro2"
111
- version = "1.0.106"
156
+ version = "1.0.107"
112
157
  source = "registry+https://github.com/rust-lang/crates.io-index"
113
- checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
158
+ checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
114
159
  dependencies = [
115
160
  "unicode-ident",
116
161
  ]
117
162
 
118
163
  [[package]]
119
164
  name = "pyo3"
120
- version = "0.28.3"
165
+ version = "0.29.0"
121
166
  source = "registry+https://github.com/rust-lang/crates.io-index"
122
- checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12"
167
+ checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
123
168
  dependencies = [
124
169
  "libc",
125
170
  "num-bigint",
@@ -133,18 +178,18 @@ dependencies = [
133
178
 
134
179
  [[package]]
135
180
  name = "pyo3-build-config"
136
- version = "0.28.3"
181
+ version = "0.29.0"
137
182
  source = "registry+https://github.com/rust-lang/crates.io-index"
138
- checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e"
183
+ checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
139
184
  dependencies = [
140
185
  "target-lexicon",
141
186
  ]
142
187
 
143
188
  [[package]]
144
189
  name = "pyo3-ffi"
145
- version = "0.28.3"
190
+ version = "0.29.0"
146
191
  source = "registry+https://github.com/rust-lang/crates.io-index"
147
- checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e"
192
+ checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
148
193
  dependencies = [
149
194
  "libc",
150
195
  "pyo3-build-config",
@@ -152,9 +197,9 @@ dependencies = [
152
197
 
153
198
  [[package]]
154
199
  name = "pyo3-macros"
155
- version = "0.28.3"
200
+ version = "0.29.0"
156
201
  source = "registry+https://github.com/rust-lang/crates.io-index"
157
- checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813"
202
+ checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
158
203
  dependencies = [
159
204
  "proc-macro2",
160
205
  "pyo3-macros-backend",
@@ -164,26 +209,31 @@ dependencies = [
164
209
 
165
210
  [[package]]
166
211
  name = "pyo3-macros-backend"
167
- version = "0.28.3"
212
+ version = "0.29.0"
168
213
  source = "registry+https://github.com/rust-lang/crates.io-index"
169
- checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb"
214
+ checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
170
215
  dependencies = [
171
216
  "heck",
172
217
  "proc-macro2",
173
- "pyo3-build-config",
174
218
  "quote",
175
219
  "syn",
176
220
  ]
177
221
 
178
222
  [[package]]
179
223
  name = "quote"
180
- version = "1.0.46"
224
+ version = "1.0.47"
181
225
  source = "registry+https://github.com/rust-lang/crates.io-index"
182
- checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
226
+ checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
183
227
  dependencies = [
184
228
  "proc-macro2",
185
229
  ]
186
230
 
231
+ [[package]]
232
+ name = "r-efi"
233
+ version = "6.0.0"
234
+ source = "registry+https://github.com/rust-lang/crates.io-index"
235
+ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
236
+
187
237
  [[package]]
188
238
  name = "rayon"
189
239
  version = "1.12.0"
@@ -204,11 +254,24 @@ dependencies = [
204
254
  "crossbeam-utils",
205
255
  ]
206
256
 
257
+ [[package]]
258
+ name = "rustix"
259
+ version = "1.1.4"
260
+ source = "registry+https://github.com/rust-lang/crates.io-index"
261
+ checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
262
+ dependencies = [
263
+ "bitflags",
264
+ "errno",
265
+ "libc",
266
+ "linux-raw-sys",
267
+ "windows-sys",
268
+ ]
269
+
207
270
  [[package]]
208
271
  name = "syn"
209
- version = "2.0.118"
272
+ version = "2.0.119"
210
273
  source = "registry+https://github.com/rust-lang/crates.io-index"
211
- checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
274
+ checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
212
275
  dependencies = [
213
276
  "proc-macro2",
214
277
  "quote",
@@ -221,6 +284,19 @@ version = "0.13.5"
221
284
  source = "registry+https://github.com/rust-lang/crates.io-index"
222
285
  checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
223
286
 
287
+ [[package]]
288
+ name = "tempfile"
289
+ version = "3.27.0"
290
+ source = "registry+https://github.com/rust-lang/crates.io-index"
291
+ checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
292
+ dependencies = [
293
+ "fastrand",
294
+ "getrandom",
295
+ "once_cell",
296
+ "rustix",
297
+ "windows-sys",
298
+ ]
299
+
224
300
  [[package]]
225
301
  name = "unicode-ident"
226
302
  version = "1.0.24"
@@ -229,7 +305,7 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
229
305
 
230
306
  [[package]]
231
307
  name = "wavelet-matrix"
232
- version = "2.2.1"
308
+ version = "2.2.4"
233
309
  dependencies = [
234
310
  "bytemuck",
235
311
  "memmap2",
@@ -238,4 +314,20 @@ dependencies = [
238
314
  "num-traits",
239
315
  "pyo3",
240
316
  "rayon",
317
+ "tempfile",
318
+ ]
319
+
320
+ [[package]]
321
+ name = "windows-link"
322
+ version = "0.2.1"
323
+ source = "registry+https://github.com/rust-lang/crates.io-index"
324
+ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
325
+
326
+ [[package]]
327
+ name = "windows-sys"
328
+ version = "0.61.2"
329
+ source = "registry+https://github.com/rust-lang/crates.io-index"
330
+ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
331
+ dependencies = [
332
+ "windows-link",
241
333
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "wavelet-matrix"
3
- version = "2.2.1"
3
+ version = "2.2.4"
4
4
  edition = "2024"
5
5
  readme = "README.md"
6
6
 
@@ -15,5 +15,6 @@ memmap2 = "0.9.10"
15
15
  num-bigint = "0.4.6"
16
16
  num-integer = "0.1.46"
17
17
  num-traits = "0.2.19"
18
- pyo3 = { version = "0.28.3", features = ["num-bigint"] }
18
+ pyo3 = { version = "0.29.0", features = ["num-bigint"] }
19
19
  rayon = "1.12.0"
20
+ tempfile = "3.27.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wavelet-matrix
3
- Version: 2.2.1
3
+ Version: 2.2.4
4
4
  Classifier: Intended Audience :: Developers
5
5
  Classifier: Intended Audience :: Science/Research
6
6
  Classifier: Intended Audience :: Information Technology
@@ -47,7 +47,6 @@ Project-URL: repository, https://github.com/math-hiyoko/wavelet-matrix
47
47
  [![PyPI Downloads](https://static.pepy.tech/personalized-badge/wavelet-matrix?period=total&units=INTERNATIONAL_SYSTEM&left_color=GRAY&right_color=GREEN&left_text=PyPI%20downloads)](https://pepy.tech/projects/wavelet-matrix)
48
48
  ![PyPI - Format](https://img.shields.io/pypi/format/wavelet-matrix)
49
49
  ![Rust](https://img.shields.io/badge/powered%20by-Rust-orange)
50
- ![Unsafe](https://img.shields.io/badge/unsafe-0-success)
51
50
  ![GitHub Repo stars](https://img.shields.io/github/stars/math-hiyoko/wavelet-matrix)
52
51
 
53
52
 
@@ -63,7 +62,6 @@ supporting fast rank / select / range queries over indexed sequences
63
62
  - Rich range queries (freq / sum / top-k / min / max)
64
63
  - Optional disk-backed storage for static WaveletMatrix (`on_disk=True`)
65
64
  - Optional dynamic updates (insert / remove / update)
66
- - Safe Rust (no unsafe)
67
65
 
68
66
  ## Installation
69
67
  ```bash
@@ -177,10 +175,6 @@ dwm.update(index=4, value=5)
177
175
  # or dwm[4] = 5
178
176
  ```
179
177
 
180
- ## Safety
181
- - Powered by safe Rust
182
- - Memory-safe by design
183
-
184
178
  ## Development
185
179
 
186
180
  ### Running Tests
@@ -10,7 +10,6 @@
10
10
  [![PyPI Downloads](https://static.pepy.tech/personalized-badge/wavelet-matrix?period=total&units=INTERNATIONAL_SYSTEM&left_color=GRAY&right_color=GREEN&left_text=PyPI%20downloads)](https://pepy.tech/projects/wavelet-matrix)
11
11
  ![PyPI - Format](https://img.shields.io/pypi/format/wavelet-matrix)
12
12
  ![Rust](https://img.shields.io/badge/powered%20by-Rust-orange)
13
- ![Unsafe](https://img.shields.io/badge/unsafe-0-success)
14
13
  ![GitHub Repo stars](https://img.shields.io/github/stars/math-hiyoko/wavelet-matrix)
15
14
 
16
15
 
@@ -26,7 +25,6 @@ supporting fast rank / select / range queries over indexed sequences
26
25
  - Rich range queries (freq / sum / top-k / min / max)
27
26
  - Optional disk-backed storage for static WaveletMatrix (`on_disk=True`)
28
27
  - Optional dynamic updates (insert / remove / update)
29
- - Safe Rust (no unsafe)
30
28
 
31
29
  ## Installation
32
30
  ```bash
@@ -140,10 +138,6 @@ dwm.update(index=4, value=5)
140
138
  # or dwm[4] = 5
141
139
  ```
142
140
 
143
- ## Safety
144
- - Powered by safe Rust
145
- - Memory-safe by design
146
-
147
141
  ## Development
148
142
 
149
143
  ### Running Tests
@@ -22,39 +22,39 @@ def random_disk_wavelet_matrix(random_data: list[int]) -> WaveletMatrix:
22
22
  @pytest.mark.parametrize("size", [500, 10000, 200000])
23
23
  @pytest.mark.parametrize("max_bit", [8, 32, 128])
24
24
  class BenchDiskWaveletMatrix:
25
- def bench_construction(self, benchmark, random_data):
25
+ def bench_disk_construction(self, benchmark, random_data):
26
26
  """Benchmark DiskWaveletMatrix construction"""
27
27
  benchmark(WaveletMatrix, random_data, on_disk=True)
28
28
 
29
- def bench_values(self, benchmark, random_disk_wavelet_matrix):
29
+ def bench_disk_values(self, benchmark, random_disk_wavelet_matrix):
30
30
  """Benchmark DiskWaveletMatrix values retrieval"""
31
31
  benchmark(random_disk_wavelet_matrix.values)
32
32
 
33
- def bench_access(self, benchmark, random_disk_wavelet_matrix, size):
33
+ def bench_disk_access(self, benchmark, random_disk_wavelet_matrix, size):
34
34
  """Benchmark DiskWaveletMatrix access"""
35
35
  index = random.randint(0, size - 1)
36
36
  benchmark(random_disk_wavelet_matrix.access, index)
37
37
 
38
- def bench_rank(self, benchmark, random_disk_wavelet_matrix, size):
38
+ def bench_disk_rank(self, benchmark, random_disk_wavelet_matrix, size):
39
39
  """Benchmark DiskWaveletMatrix rank"""
40
40
  value = random_disk_wavelet_matrix[random.randint(0, size - 1)]
41
41
  end = random.randint(0, size)
42
42
  benchmark(random_disk_wavelet_matrix.rank, value, end)
43
43
 
44
- def bench_select(self, benchmark, random_disk_wavelet_matrix, size):
44
+ def bench_disk_select(self, benchmark, random_disk_wavelet_matrix, size):
45
45
  """Benchmark DiskWaveletMatrix select"""
46
46
  value = random_disk_wavelet_matrix[random.randint(0, size - 1)]
47
47
  kth = random_disk_wavelet_matrix.rank(value, size)
48
48
  benchmark(random_disk_wavelet_matrix.select, value, kth)
49
49
 
50
- def bench_quantile(self, benchmark, random_disk_wavelet_matrix, size):
50
+ def bench_disk_quantile(self, benchmark, random_disk_wavelet_matrix, size):
51
51
  """Benchmark DiskWaveletMatrix quantile"""
52
52
  start = size // 4
53
53
  end = size * 3 // 4
54
54
  kth = random.randint(1, end - start)
55
55
  benchmark(random_disk_wavelet_matrix.quantile, start, end, kth)
56
56
 
57
- def bench_range_freq(self, benchmark, random_disk_wavelet_matrix, size, max_bit):
57
+ def bench_disk_range_freq(self, benchmark, random_disk_wavelet_matrix, size, max_bit):
58
58
  """Benchmark DiskWaveletMatrix range_freq"""
59
59
  start = size // 4
60
60
  end = size * 3 // 4
@@ -62,28 +62,28 @@ class BenchDiskWaveletMatrix:
62
62
  upper = (1 << max_bit) * 3 // 4
63
63
  benchmark(random_disk_wavelet_matrix.range_freq, start, end, lower, upper)
64
64
 
65
- def bench_range_maxk(self, benchmark, random_disk_wavelet_matrix, size):
65
+ def bench_disk_range_maxk(self, benchmark, random_disk_wavelet_matrix, size):
66
66
  """Benchmark DiskWaveletMatrix range_maxk"""
67
67
  start = size // 4
68
68
  end = size * 3 // 4
69
69
  k = 10
70
70
  benchmark(random_disk_wavelet_matrix.range_maxk, start, end, k)
71
71
 
72
- def bench_range_mink(self, benchmark, random_disk_wavelet_matrix, size):
72
+ def bench_disk_range_mink(self, benchmark, random_disk_wavelet_matrix, size):
73
73
  """Benchmark DiskWaveletMatrix range_mink"""
74
74
  start = size // 4
75
75
  end = size * 3 // 4
76
76
  k = 10
77
77
  benchmark(random_disk_wavelet_matrix.range_mink, start, end, k)
78
78
 
79
- def bench_prev_value(self, benchmark, random_disk_wavelet_matrix, size, max_bit):
79
+ def bench_disk_prev_value(self, benchmark, random_disk_wavelet_matrix, size, max_bit):
80
80
  """Benchmark DiskWaveletMatrix prev_value"""
81
81
  start = size // 4
82
82
  end = size * 3 // 4
83
83
  upper = 1 << (max_bit - 1)
84
84
  benchmark(random_disk_wavelet_matrix.prev_value, start, end, upper)
85
85
 
86
- def bench_next_value(self, benchmark, random_disk_wavelet_matrix, size, max_bit):
86
+ def bench_disk_next_value(self, benchmark, random_disk_wavelet_matrix, size, max_bit):
87
87
  """Benchmark DiskWaveletMatrix next_value"""
88
88
  start = size // 4
89
89
  end = size * 3 // 4
@@ -75,7 +75,7 @@ addopts = [
75
75
  "--strict-markers",
76
76
  "--tb=short",
77
77
  "--benchmark-columns=mean,stddev,min,max",
78
- "--benchmark-group-by=fullfunc",
78
+ "--benchmark-group-by=func",
79
79
  ]
80
80
 
81
81
  [tool.ruff]