Skip to content

[mypyc] Add librt.strings.isalpha codepoint primitive#21521

Merged
p-sawicki merged 1 commit into
python:masterfrom
VaggelisD:librt-strings-isalpha
May 20, 2026
Merged

[mypyc] Add librt.strings.isalpha codepoint primitive#21521
p-sawicki merged 1 commit into
python:masterfrom
VaggelisD:librt-strings-isalpha

Conversation

@VaggelisD
Copy link
Copy Markdown
Contributor

4th PR of #21418

This is 5x faster than str.isalpha() for ASCII.

Wraps `Py_UNICODE_ISALPHA` for the codepoint fast path, mirroring the
already-merged `librt.strings.isspace` (python#21462), `isdigit` (python#21504),
and the in-flight `isalnum`.

Microbenchmark, both paths mypyc-compiled, scanning 2.5M codepoints
per call: `s[i].isalpha()` runs at ~17.8 ns/codepoint; the codepoint
path `c: i32 = i32(ord(s[i])); isalpha(c)` at ~3.5 ns/codepoint,
roughly 5x faster. (`str.isalpha()` walks the full Unicode category
database per character; the codepoint path goes straight through the
`Py_UNICODE_ISALPHA` macro with no `str` materialization.)
@github-actions
Copy link
Copy Markdown
Contributor

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅

@p-sawicki p-sawicki merged commit a9d2d14 into python:master May 20, 2026
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants