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.
@@ -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