overall geomean vs Parasail
Intel / AVX-512 / 80 rows
SIMD STRING MATCHING CJK WITHOUT UTF-8
Make strings
agree. Fast.
Fuzzy matching and sequence alignment with first-class CJK. Python’s UCS-2 and UCS-4 string objects go straight to SIMD—no UTF-8 representation, no transcoding detour.
comparable rows won vs Parasail
Intel / AVX-512
path and CIGAR geomean
32/32 wins vs Parasail
Chinese-text geomean vs Parasail
CJK / 39 of 40 rows won
01 / WHAT IT DOES
Stop assembling a string stack out of six libraries.
Use the same fast, consistent API from typo-tolerant search to biological alignment. Batch paths prepare the query once, release the GIL, and keep the SIMD lanes busy.
SEARCH + MATCHING
Find the right text even when the text is wrong.
Score one query against a whole corpus for fuzzy search, spell correction, record linkage, deduplication, and entity resolution.
SEQUENCE ALIGNMENT
Local or global. Linear or affine gaps.
Smith–Waterman and Needleman–Wunsch with score-only paths, traceback, CIGAR output, and built-in biological matrices.
NAMES + RECORDS
Match how it sounds, not only how it is spelled.
Soundex, Metaphone, NYSIIS, Caverphone, Cologne, Daitch–Mokotoff, and Beider–Morse live beside the distance functions.
TIME SERIES
Align signals when time itself drifts.
Dynamic Time Warping for audio, sensors, gestures, and financial series, with batched distances and optional Sakoe–Chiba bands.
02 / ONE ENGINE
Write the obvious Python.
Let the dispatcher sweat.
import stride_align as sa
UCS-2 and UCS-4 are first-class SIMD targets.
Developers do not have to encode Python strings into UTF-8 representations before alignment. Chinese, Japanese, Korean, Arabic, and emoji use direct UCS-1, UCS-2, or UCS-4 access and stay on the vectorized path.
Batch work is the primary path.
Reuse the prepared query profile across candidate lists, or run full all-pairs cdist with thresholds, pruning, and per-query top-k.
03 / MOVE EXISTING CODE
One import away means one import away.
Keep familiar APIs while moving the work onto stride-align’s kernels. Native code should use stride_align directly; existing code can take the short road.
# before
import rapidfuzz
# after
import stride_align.rapidfuzz as rapidfuzz
04 / PROOF, NOT VIBES
Every fast claim comes with a workload.
The benchmark suite spans architectures, algorithms, text types, score widths, and comparison libraries. Reports include the context behind the headline, including regressions and correctness tradeoffs.
Open benchmark ledgerFresh July 18 rerun; bars use a linear scale relative to NW path. The 80-row sweep covers English and Chinese, linear and affine scoring, 16- and 32-bit widths, and both 1:1 and 1:many shapes against Parasail 1.3.4.
05 / START HERE
From zero to matching in two lines.
pip install stride-align
import stride_align as sa
score = sa.smith_waterman_normalized_score(
"In the beginning… the heavens and the earth.",
"In the beginning… the heaven and the earth.",
)
print(score) # 0.9907407407407407
