difflib-fast 0.4.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.
- difflib_fast-0.4.0/.github/workflows/CI.yml +126 -0
- difflib_fast-0.4.0/.gitignore +18 -0
- difflib_fast-0.4.0/Cargo.lock +338 -0
- difflib_fast-0.4.0/Cargo.toml +83 -0
- difflib_fast-0.4.0/PKG-INFO +423 -0
- difflib_fast-0.4.0/README.md +406 -0
- difflib_fast-0.4.0/benchmarks.md +339 -0
- difflib_fast-0.4.0/examples/simjoin_bench.rs +115 -0
- difflib_fast-0.4.0/examples/simjoin_gpu_bench.rs +236 -0
- difflib_fast-0.4.0/examples/simjoin_pypi.rs +103 -0
- difflib_fast-0.4.0/pyproject.toml +30 -0
- difflib_fast-0.4.0/python/difflib_fast/__init__.py +51 -0
- difflib_fast-0.4.0/python/difflib_fast/__init__.pyi +125 -0
- difflib_fast-0.4.0/python/difflib_fast/py.typed +0 -0
- difflib_fast-0.4.0/src/bin/bench.rs +155 -0
- difflib_fast-0.4.0/src/gestalt.rs +2089 -0
- difflib_fast-0.4.0/src/gpu.rs +1277 -0
- difflib_fast-0.4.0/src/lib.rs +1254 -0
- difflib_fast-0.4.0/src/rationer.rs +1204 -0
- difflib_fast-0.4.0/src/simjoin.rs +869 -0
- difflib_fast-0.4.0/src/simjoin_gpu.rs +170 -0
- difflib_fast-0.4.0/tests/approx_ro.rs +111 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Build + test, then on a version tag (`vX.Y.Z`) attach wheels + sdist to a GitHub Release.
|
|
2
|
+
# crates.io is published manually (`cargo publish`). No PyPI — install the Python package from a
|
|
3
|
+
# release wheel or via `pip install git+https://github.com/prostomarkeloff/difflib-fast`.
|
|
4
|
+
#
|
|
5
|
+
# No secrets needed — the GitHub Release uses the built-in GITHUB_TOKEN.
|
|
6
|
+
#
|
|
7
|
+
# abi3 (pyo3 abi3-py39) → one wheel per platform/arch works on CPython 3.9+, so no per-Python matrix.
|
|
8
|
+
name: CI
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [main]
|
|
13
|
+
tags: ["v*"]
|
|
14
|
+
pull_request:
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
test:
|
|
22
|
+
name: test + clippy
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
27
|
+
with:
|
|
28
|
+
components: clippy
|
|
29
|
+
- run: cargo test --release
|
|
30
|
+
- run: cargo clippy --release --all-targets --features bench
|
|
31
|
+
|
|
32
|
+
linux:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
strategy:
|
|
35
|
+
matrix:
|
|
36
|
+
target: [x86_64, aarch64]
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v4
|
|
39
|
+
- uses: actions/setup-python@v5
|
|
40
|
+
with:
|
|
41
|
+
python-version: "3.12"
|
|
42
|
+
- name: Build wheels
|
|
43
|
+
uses: PyO3/maturin-action@v1
|
|
44
|
+
with:
|
|
45
|
+
target: ${{ matrix.target }}
|
|
46
|
+
args: --release --out dist
|
|
47
|
+
sccache: "true"
|
|
48
|
+
manylinux: auto
|
|
49
|
+
- uses: actions/upload-artifact@v4
|
|
50
|
+
with:
|
|
51
|
+
name: wheels-linux-${{ matrix.target }}
|
|
52
|
+
path: dist
|
|
53
|
+
|
|
54
|
+
macos:
|
|
55
|
+
runs-on: macos-latest
|
|
56
|
+
strategy:
|
|
57
|
+
matrix:
|
|
58
|
+
target: [x86_64, aarch64]
|
|
59
|
+
steps:
|
|
60
|
+
- uses: actions/checkout@v4
|
|
61
|
+
- uses: actions/setup-python@v5
|
|
62
|
+
with:
|
|
63
|
+
python-version: "3.12"
|
|
64
|
+
- name: Build wheels
|
|
65
|
+
uses: PyO3/maturin-action@v1
|
|
66
|
+
with:
|
|
67
|
+
target: ${{ matrix.target }}
|
|
68
|
+
# macOS wheels ship the Metal GPU path. CLI `--features` replaces pyproject's
|
|
69
|
+
# `features=["python"]`, so list both. `gpu` is macOS-only; degrades to CPU at runtime
|
|
70
|
+
# when no Metal device is present.
|
|
71
|
+
args: --release --features python,gpu --out dist
|
|
72
|
+
sccache: "true"
|
|
73
|
+
- uses: actions/upload-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: wheels-macos-${{ matrix.target }}
|
|
76
|
+
path: dist
|
|
77
|
+
|
|
78
|
+
windows:
|
|
79
|
+
runs-on: windows-latest
|
|
80
|
+
steps:
|
|
81
|
+
- uses: actions/checkout@v4
|
|
82
|
+
- uses: actions/setup-python@v5
|
|
83
|
+
with:
|
|
84
|
+
python-version: "3.12"
|
|
85
|
+
- name: Build wheels
|
|
86
|
+
uses: PyO3/maturin-action@v1
|
|
87
|
+
with:
|
|
88
|
+
target: x64
|
|
89
|
+
args: --release --out dist
|
|
90
|
+
sccache: "true"
|
|
91
|
+
- uses: actions/upload-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
name: wheels-windows
|
|
94
|
+
path: dist
|
|
95
|
+
|
|
96
|
+
sdist:
|
|
97
|
+
runs-on: ubuntu-latest
|
|
98
|
+
steps:
|
|
99
|
+
- uses: actions/checkout@v4
|
|
100
|
+
- name: Build sdist
|
|
101
|
+
uses: PyO3/maturin-action@v1
|
|
102
|
+
with:
|
|
103
|
+
command: sdist
|
|
104
|
+
args: --out dist
|
|
105
|
+
- uses: actions/upload-artifact@v4
|
|
106
|
+
with:
|
|
107
|
+
name: wheels-sdist
|
|
108
|
+
path: dist
|
|
109
|
+
|
|
110
|
+
release:
|
|
111
|
+
name: GitHub release (wheels + sdist)
|
|
112
|
+
runs-on: ubuntu-latest
|
|
113
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
114
|
+
needs: [test, linux, macos, windows, sdist]
|
|
115
|
+
permissions:
|
|
116
|
+
contents: write
|
|
117
|
+
steps:
|
|
118
|
+
- uses: actions/download-artifact@v4
|
|
119
|
+
with:
|
|
120
|
+
path: dist
|
|
121
|
+
pattern: wheels-*
|
|
122
|
+
merge-multiple: true
|
|
123
|
+
- name: Attach wheels + sdist to the release
|
|
124
|
+
uses: softprops/action-gh-release@v2
|
|
125
|
+
with:
|
|
126
|
+
files: dist/*
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Rust build artifacts (this crate's, the bench bin's, and benchmarks/compare's)
|
|
2
|
+
target/
|
|
3
|
+
|
|
4
|
+
# Python build artifacts (maturin develop drops the compiled module + caches into python-source)
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.py[cod]
|
|
7
|
+
*.so
|
|
8
|
+
*.pyd
|
|
9
|
+
*.dylib
|
|
10
|
+
dist/
|
|
11
|
+
*.egg-info/
|
|
12
|
+
|
|
13
|
+
# samply / profiling output
|
|
14
|
+
*.json.gz
|
|
15
|
+
flame.svg
|
|
16
|
+
|
|
17
|
+
# macOS
|
|
18
|
+
.DS_Store
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# This file is automatically @generated by Cargo.
|
|
2
|
+
# It is not intended for manual editing.
|
|
3
|
+
version = 4
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "bitflags"
|
|
7
|
+
version = "2.11.1"
|
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
+
checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
|
|
10
|
+
|
|
11
|
+
[[package]]
|
|
12
|
+
name = "block"
|
|
13
|
+
version = "0.1.6"
|
|
14
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
15
|
+
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
|
|
16
|
+
|
|
17
|
+
[[package]]
|
|
18
|
+
name = "cc"
|
|
19
|
+
version = "1.2.63"
|
|
20
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
21
|
+
checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
|
|
22
|
+
dependencies = [
|
|
23
|
+
"find-msvc-tools",
|
|
24
|
+
"shlex",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[[package]]
|
|
28
|
+
name = "core-foundation"
|
|
29
|
+
version = "0.10.1"
|
|
30
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
31
|
+
checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
|
|
32
|
+
dependencies = [
|
|
33
|
+
"core-foundation-sys",
|
|
34
|
+
"libc",
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
[[package]]
|
|
38
|
+
name = "core-foundation-sys"
|
|
39
|
+
version = "0.8.7"
|
|
40
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
41
|
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
|
|
42
|
+
|
|
43
|
+
[[package]]
|
|
44
|
+
name = "core-graphics-types"
|
|
45
|
+
version = "0.2.0"
|
|
46
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
47
|
+
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
|
|
48
|
+
dependencies = [
|
|
49
|
+
"bitflags",
|
|
50
|
+
"core-foundation",
|
|
51
|
+
"libc",
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
[[package]]
|
|
55
|
+
name = "crossbeam-deque"
|
|
56
|
+
version = "0.8.6"
|
|
57
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
58
|
+
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
|
|
59
|
+
dependencies = [
|
|
60
|
+
"crossbeam-epoch",
|
|
61
|
+
"crossbeam-utils",
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
[[package]]
|
|
65
|
+
name = "crossbeam-epoch"
|
|
66
|
+
version = "0.9.18"
|
|
67
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
68
|
+
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
|
69
|
+
dependencies = [
|
|
70
|
+
"crossbeam-utils",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
[[package]]
|
|
74
|
+
name = "crossbeam-utils"
|
|
75
|
+
version = "0.8.21"
|
|
76
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
77
|
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
|
78
|
+
|
|
79
|
+
[[package]]
|
|
80
|
+
name = "difflib-fast"
|
|
81
|
+
version = "0.4.0"
|
|
82
|
+
dependencies = [
|
|
83
|
+
"metal",
|
|
84
|
+
"mimalloc",
|
|
85
|
+
"pyo3",
|
|
86
|
+
"rayon",
|
|
87
|
+
]
|
|
88
|
+
|
|
89
|
+
[[package]]
|
|
90
|
+
name = "either"
|
|
91
|
+
version = "1.16.0"
|
|
92
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
93
|
+
checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
|
|
94
|
+
|
|
95
|
+
[[package]]
|
|
96
|
+
name = "find-msvc-tools"
|
|
97
|
+
version = "0.1.9"
|
|
98
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
99
|
+
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
|
100
|
+
|
|
101
|
+
[[package]]
|
|
102
|
+
name = "foreign-types"
|
|
103
|
+
version = "0.5.0"
|
|
104
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
105
|
+
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
|
|
106
|
+
dependencies = [
|
|
107
|
+
"foreign-types-macros",
|
|
108
|
+
"foreign-types-shared",
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
[[package]]
|
|
112
|
+
name = "foreign-types-macros"
|
|
113
|
+
version = "0.2.3"
|
|
114
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
115
|
+
checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
|
|
116
|
+
dependencies = [
|
|
117
|
+
"proc-macro2",
|
|
118
|
+
"quote",
|
|
119
|
+
"syn",
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
[[package]]
|
|
123
|
+
name = "foreign-types-shared"
|
|
124
|
+
version = "0.3.1"
|
|
125
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
126
|
+
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
|
|
127
|
+
|
|
128
|
+
[[package]]
|
|
129
|
+
name = "heck"
|
|
130
|
+
version = "0.5.0"
|
|
131
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
132
|
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
133
|
+
|
|
134
|
+
[[package]]
|
|
135
|
+
name = "libc"
|
|
136
|
+
version = "0.2.186"
|
|
137
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
138
|
+
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
|
|
139
|
+
|
|
140
|
+
[[package]]
|
|
141
|
+
name = "libmimalloc-sys"
|
|
142
|
+
version = "0.1.49"
|
|
143
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
144
|
+
checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9"
|
|
145
|
+
dependencies = [
|
|
146
|
+
"cc",
|
|
147
|
+
]
|
|
148
|
+
|
|
149
|
+
[[package]]
|
|
150
|
+
name = "log"
|
|
151
|
+
version = "0.4.30"
|
|
152
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
153
|
+
checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5"
|
|
154
|
+
|
|
155
|
+
[[package]]
|
|
156
|
+
name = "malloc_buf"
|
|
157
|
+
version = "0.0.6"
|
|
158
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
159
|
+
checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
|
|
160
|
+
dependencies = [
|
|
161
|
+
"libc",
|
|
162
|
+
]
|
|
163
|
+
|
|
164
|
+
[[package]]
|
|
165
|
+
name = "metal"
|
|
166
|
+
version = "0.33.0"
|
|
167
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
168
|
+
checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15"
|
|
169
|
+
dependencies = [
|
|
170
|
+
"bitflags",
|
|
171
|
+
"block",
|
|
172
|
+
"core-graphics-types",
|
|
173
|
+
"foreign-types",
|
|
174
|
+
"log",
|
|
175
|
+
"objc",
|
|
176
|
+
"paste",
|
|
177
|
+
]
|
|
178
|
+
|
|
179
|
+
[[package]]
|
|
180
|
+
name = "mimalloc"
|
|
181
|
+
version = "0.1.52"
|
|
182
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
183
|
+
checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862"
|
|
184
|
+
dependencies = [
|
|
185
|
+
"libmimalloc-sys",
|
|
186
|
+
]
|
|
187
|
+
|
|
188
|
+
[[package]]
|
|
189
|
+
name = "objc"
|
|
190
|
+
version = "0.2.7"
|
|
191
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
192
|
+
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
|
|
193
|
+
dependencies = [
|
|
194
|
+
"malloc_buf",
|
|
195
|
+
]
|
|
196
|
+
|
|
197
|
+
[[package]]
|
|
198
|
+
name = "once_cell"
|
|
199
|
+
version = "1.21.4"
|
|
200
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
201
|
+
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
202
|
+
|
|
203
|
+
[[package]]
|
|
204
|
+
name = "paste"
|
|
205
|
+
version = "1.0.15"
|
|
206
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
207
|
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
|
|
208
|
+
|
|
209
|
+
[[package]]
|
|
210
|
+
name = "portable-atomic"
|
|
211
|
+
version = "1.13.1"
|
|
212
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
213
|
+
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
|
|
214
|
+
|
|
215
|
+
[[package]]
|
|
216
|
+
name = "proc-macro2"
|
|
217
|
+
version = "1.0.106"
|
|
218
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
219
|
+
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
|
220
|
+
dependencies = [
|
|
221
|
+
"unicode-ident",
|
|
222
|
+
]
|
|
223
|
+
|
|
224
|
+
[[package]]
|
|
225
|
+
name = "pyo3"
|
|
226
|
+
version = "0.28.3"
|
|
227
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
228
|
+
checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12"
|
|
229
|
+
dependencies = [
|
|
230
|
+
"libc",
|
|
231
|
+
"once_cell",
|
|
232
|
+
"portable-atomic",
|
|
233
|
+
"pyo3-build-config",
|
|
234
|
+
"pyo3-ffi",
|
|
235
|
+
"pyo3-macros",
|
|
236
|
+
]
|
|
237
|
+
|
|
238
|
+
[[package]]
|
|
239
|
+
name = "pyo3-build-config"
|
|
240
|
+
version = "0.28.3"
|
|
241
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
242
|
+
checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e"
|
|
243
|
+
dependencies = [
|
|
244
|
+
"target-lexicon",
|
|
245
|
+
]
|
|
246
|
+
|
|
247
|
+
[[package]]
|
|
248
|
+
name = "pyo3-ffi"
|
|
249
|
+
version = "0.28.3"
|
|
250
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
251
|
+
checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e"
|
|
252
|
+
dependencies = [
|
|
253
|
+
"libc",
|
|
254
|
+
"pyo3-build-config",
|
|
255
|
+
]
|
|
256
|
+
|
|
257
|
+
[[package]]
|
|
258
|
+
name = "pyo3-macros"
|
|
259
|
+
version = "0.28.3"
|
|
260
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
261
|
+
checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813"
|
|
262
|
+
dependencies = [
|
|
263
|
+
"proc-macro2",
|
|
264
|
+
"pyo3-macros-backend",
|
|
265
|
+
"quote",
|
|
266
|
+
"syn",
|
|
267
|
+
]
|
|
268
|
+
|
|
269
|
+
[[package]]
|
|
270
|
+
name = "pyo3-macros-backend"
|
|
271
|
+
version = "0.28.3"
|
|
272
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
273
|
+
checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb"
|
|
274
|
+
dependencies = [
|
|
275
|
+
"heck",
|
|
276
|
+
"proc-macro2",
|
|
277
|
+
"pyo3-build-config",
|
|
278
|
+
"quote",
|
|
279
|
+
"syn",
|
|
280
|
+
]
|
|
281
|
+
|
|
282
|
+
[[package]]
|
|
283
|
+
name = "quote"
|
|
284
|
+
version = "1.0.45"
|
|
285
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
286
|
+
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
|
287
|
+
dependencies = [
|
|
288
|
+
"proc-macro2",
|
|
289
|
+
]
|
|
290
|
+
|
|
291
|
+
[[package]]
|
|
292
|
+
name = "rayon"
|
|
293
|
+
version = "1.12.0"
|
|
294
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
295
|
+
checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
|
|
296
|
+
dependencies = [
|
|
297
|
+
"either",
|
|
298
|
+
"rayon-core",
|
|
299
|
+
]
|
|
300
|
+
|
|
301
|
+
[[package]]
|
|
302
|
+
name = "rayon-core"
|
|
303
|
+
version = "1.13.0"
|
|
304
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
305
|
+
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
|
|
306
|
+
dependencies = [
|
|
307
|
+
"crossbeam-deque",
|
|
308
|
+
"crossbeam-utils",
|
|
309
|
+
]
|
|
310
|
+
|
|
311
|
+
[[package]]
|
|
312
|
+
name = "shlex"
|
|
313
|
+
version = "2.0.1"
|
|
314
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
315
|
+
checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
|
|
316
|
+
|
|
317
|
+
[[package]]
|
|
318
|
+
name = "syn"
|
|
319
|
+
version = "2.0.117"
|
|
320
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
321
|
+
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
|
322
|
+
dependencies = [
|
|
323
|
+
"proc-macro2",
|
|
324
|
+
"quote",
|
|
325
|
+
"unicode-ident",
|
|
326
|
+
]
|
|
327
|
+
|
|
328
|
+
[[package]]
|
|
329
|
+
name = "target-lexicon"
|
|
330
|
+
version = "0.13.5"
|
|
331
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
332
|
+
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
333
|
+
|
|
334
|
+
[[package]]
|
|
335
|
+
name = "unicode-ident"
|
|
336
|
+
version = "1.0.24"
|
|
337
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
338
|
+
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "difflib-fast"
|
|
3
|
+
version = "0.4.0"
|
|
4
|
+
description = "Fast, byte-for-byte exact difflib Ratcliff–Obershelp (gestalt) similarity ratio + single-linkage clustering (suffix automaton), plus an exact all-pairs weighted-cosine similarity join (L2AP, CPU+GPU)."
|
|
5
|
+
keywords = ["difflib", "similarity", "ratcliff-obershelp", "suffix-automaton", "fuzzy"]
|
|
6
|
+
categories = ["algorithms", "text-processing"]
|
|
7
|
+
edition = "2021"
|
|
8
|
+
license = "MIT"
|
|
9
|
+
repository = "https://github.com/prostomarkeloff/difflib-fast"
|
|
10
|
+
authors = ["prostomarkeloff"]
|
|
11
|
+
# The benchmark suite + corpora (large, derived) are not part of the published crate / Python sdist.
|
|
12
|
+
exclude = ["/benchmarks"]
|
|
13
|
+
readme = "README.md"
|
|
14
|
+
|
|
15
|
+
[lib]
|
|
16
|
+
name = "difflib_fast"
|
|
17
|
+
# rlib for the bench bin + downstream crates; cdylib for the (optional) Python extension via maturin.
|
|
18
|
+
crate-type = ["cdylib", "rlib"]
|
|
19
|
+
|
|
20
|
+
[dependencies]
|
|
21
|
+
rayon = "1"
|
|
22
|
+
# Optional Python bindings (the `python` feature, built by maturin). `abi3-py39` → one wheel per
|
|
23
|
+
# platform works on CPython 3.9+. The pure-Rust crate has zero Python dependency by default.
|
|
24
|
+
pyo3 = { version = "0.28", optional = true, features = ["extension-module", "abi3-py39"] }
|
|
25
|
+
# Used ONLY as the `bench` binary's global allocator (libraries must not set one) — gated behind the
|
|
26
|
+
# `bench` feature so the published library never pulls it in. macOS's default malloc madvise churn
|
|
27
|
+
# cost ~25% once parallel, hence the override for benchmarking.
|
|
28
|
+
mimalloc = { version = "0.1", default-features = false, optional = true }
|
|
29
|
+
# Apple Metal compute bindings — used by the `gpu` feature to run the SAM matching_stats walk on
|
|
30
|
+
# the M3 GPU in parallel with the CPU SAM walker (heterogeneous CPU+GPU exact RO). Apple-only;
|
|
31
|
+
# the feature does not compile on non-Apple targets, and `cluster_canonicals` falls back to the
|
|
32
|
+
# CPU-only path automatically when the GPU device cannot be acquired at runtime.
|
|
33
|
+
[target.'cfg(target_os = "macos")'.dependencies]
|
|
34
|
+
metal = { version = "0.33", optional = true }
|
|
35
|
+
|
|
36
|
+
[features]
|
|
37
|
+
default = []
|
|
38
|
+
python = ["dep:pyo3"]
|
|
39
|
+
bench = ["dep:mimalloc"] # enables the `bench` binary's mimalloc global allocator
|
|
40
|
+
# Heterogeneous CPU+GPU exact RO — Metal compute shader port of the SAM matching_stats walker.
|
|
41
|
+
# macOS-only; the feature wires up automatically on Apple Silicon and is a no-op on other targets.
|
|
42
|
+
# The kernel reads the corpus SAMs out of unified shared memory (Apple Silicon's UMA = zero copy
|
|
43
|
+
# between CPU and GPU), so there is no host↔device transfer cost. `Rationer` degrades to CPU when
|
|
44
|
+
# this is off or no Metal device can be acquired at runtime.
|
|
45
|
+
gpu = ["dep:metal"]
|
|
46
|
+
# `instrument` adds atomic counters inside `gestalt::longest_in` and its endpos range queries plus
|
|
47
|
+
# the RO recursion, plus a `gestalt::instrument::dump()` API that prints histograms of chain-walk
|
|
48
|
+
# depth, recursion depth, fmatch distribution, the linear-vs-segtree split, and per-call scan
|
|
49
|
+
# lengths. Costs ~10-20% wall when active (relaxed-ordered atomics on the hot path); the
|
|
50
|
+
# `cfg(feature)` gate compiles to a no-op in default builds so production stays untouched.
|
|
51
|
+
instrument = []
|
|
52
|
+
# `profiling` marks `simjoin`'s hot phases `#[inline(never)]` so the sampler (samply) attributes
|
|
53
|
+
# self-time per phase (candidate-gen vs verify vs index-suffix) instead of one inlined `cosine_join`
|
|
54
|
+
# blob. Pure observability — compiles to identical codegen as default when off. Never ship it.
|
|
55
|
+
profiling = []
|
|
56
|
+
|
|
57
|
+
# `objc`'s `sel!`/`msg_send!` macros (pulled in transitively by the `metal` crate under the `gpu`
|
|
58
|
+
# feature) expand to `cfg(feature = "cargo-clippy")` checks — whitelist that cfg so the lint stays
|
|
59
|
+
# on for genuinely-unexpected cfgs without flooding gpu builds with dependency-macro noise.
|
|
60
|
+
[lints.rust]
|
|
61
|
+
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(feature, values("cargo-clippy"))'] }
|
|
62
|
+
|
|
63
|
+
# Strict clippy: all + pedantic denied (priority -1 so crate-local `#[allow]`s on hot paths override).
|
|
64
|
+
[lints.clippy]
|
|
65
|
+
all = { level = "deny", priority = -1 }
|
|
66
|
+
pedantic = { level = "deny", priority = -1 }
|
|
67
|
+
|
|
68
|
+
# Gold CPU baseline bench (raw ratio / threshold qualify / cluster). Gated behind `bench` so the
|
|
69
|
+
# published library never builds it. The GPU / PMC / cross-impl harness lives outside the tracked
|
|
70
|
+
# tree (see perf-local/).
|
|
71
|
+
[[bin]]
|
|
72
|
+
name = "bench"
|
|
73
|
+
required-features = ["bench"]
|
|
74
|
+
|
|
75
|
+
# GPU-vs-CPU throughput experiment for the simjoin verify step (Apple Metal). Needs the `gpu` feature.
|
|
76
|
+
[[example]]
|
|
77
|
+
name = "simjoin_gpu_bench"
|
|
78
|
+
required-features = ["gpu"]
|
|
79
|
+
|
|
80
|
+
# Keep symbols + line tables in release so an external sampler (samply) can resolve frames.
|
|
81
|
+
[profile.release]
|
|
82
|
+
debug = "line-tables-only"
|
|
83
|
+
strip = false
|