Skip to main content

Boundary-aware fuzzy keyword matching with pluggable conflict resolution

Project description

TurboText

TurboText

Lightning-fast, boundary-aware keyword matching for Python
Exact · Fuzzy · Multi-word · Unicode · Pluggable conflict resolution

PyPI Python License CI Typed Cython


TurboText finds keywords in text the way a human editor would — enforcing real word boundaries, tolerating typos, handling multi-word phrases, and letting you declare which match wins when keywords overlap, including an optimal (not just greedy) weighted resolver that no other keyword library provides.


Table of Contents


Why TurboText?

re FlashText RapidFuzz TurboText
Exact keyword extraction
Fuzzy / typo-tolerant
Word boundary enforcement
Extracts spans from running text
Multi-word phrases (native) ⚠️
O(text) scaling with vocab
Per-keyword metadata
Conflict resolution policies
Optimal weighted resolution

Features

  • Exact matching — trie-based O(n) scan, constant in vocabulary size
  • Fuzzy matching — Levenshtein distance up to k via bounded-edit frontier search
  • Word boundary enforcement — Unicode-correct; matches cat but not cats, scat, or concatenate
  • Multi-word keywords"new york", "product manager" work out of the box
  • Bulk loading — accepts list, dict[str, str], or dict[str, list[str]]
  • Five conflict policiesALL_OVERLAPS, LEFTMOST_LONGEST, LEFTMOST_FIRST, HIGHEST_PRIORITY, OPTIMAL_WEIGHTED
  • Optimal resolution — O(n log n) weighted interval scheduling DP — picks the globally best non-overlapping set
  • Rich match objects — canonical form, offsets, edit distance, category, priority, custom metadata
  • Cython fast-path — optional compiled extension brings exact-match throughput to FlashText parity

Installation

pip install turbotext

With the Cython extension (recommended for exact matching at scale):

pip install cython turbotext
python setup.py build_ext --inplace

The extension is fully optional — TurboText falls back to pure Python automatically when it is not compiled.

Install with uv (development)
git clone https://github.com/nishankmahore/TurboText
cd TurboText
uv sync --group dev
python setup.py build_ext --inplace

Quick Start

from turbotext import KeywordStore, MatchPolicy, FuzzyConfig

store = KeywordStore(
    policy=MatchPolicy.LEFTMOST_LONGEST,
    fuzzy=FuzzyConfig(max_edit_distance=1),
)

store.add_keywords({
    "aspirin":   ["aspirin", "asprin", "aspirin tablet"],
    "ibuprofen": ["ibuprofen", "ibuprofen tablet"],
})

text = "Patient takes asprin and ibuprofen tablet daily"

for m in store.extract(text):
    print(f"{m.canonical:12}  ed={m.edit_distance}  [{m.start}:{m.end}]  '{m.text}'")
# aspirin       ed=1  [14:20]  'asprin'
# ibuprofen     ed=0  [25:42]  'ibuprofen tablet'

print(store.replace(text))
# Patient takes aspirin and ibuprofen daily

Adding Keywords

Single keyword

store = KeywordStore()

# minimal — surface form becomes the canonical
store.add_keyword("aspirin")

# with canonical form
store.add_keyword("aspirin", canonical="Aspirin")

# with full metadata
kid = store.add_keyword(
    "aspirin",
    canonical="Aspirin",
    category="DRUG",
    priority=10.0,
    rxnorm_code="1191",   # any extra kwargs become metadata
    source="rxnorm",
)
print(kid)  # "3f4a2b1c-..."  UUID — useful for tracking

From a list

store.add_keywords(["java", "python", "rust"])
# surface form = canonical for each entry

From a {surface: canonical} dict

store.add_keywords({
    "py":   "Python",
    "js":   "JavaScript",
    "k8s":  "Kubernetes",
})

From a {canonical: [surfaces]} dict (most common bulk shape)

keyword_dict = {
    "java":               ["java", "java_2e", "java programing"],
    "product management": ["PM", "product manager", "prod mgmt"],
    "machine learning":   ["ML", "machine learning", "deep learning"],
}
store.add_keywords(keyword_dict)

Mixed dict

String values follow {surface: canonical}; list values follow {canonical: [surfaces]}.

store.add_keywords({
    "java": ["java_2e", "java programing"],  # canonical → [surfaces]
    "py":   "Python",                         # surface   → canonical
})

Shared category and priority

store.add_keywords(
    {
        "aspirin":   ["aspirin", "asprin"],
        "ibuprofen": ["ibuprofen", "advil"],
    },
    category="DRUG",
    priority=5.0,
)

Extracting Matches

matches = store.extract("take aspirin and ibuprofen daily")

for m in matches:
    print(m.text)           # surface text found in the input
    print(m.canonical)      # normalised keyword name
    print(m.start, m.end)   # character offsets — text[m.start:m.end]
    print(m.edit_distance)  # 0 = exact, 1 = one typo, etc.
    print(m.category)       # "DRUG"
    print(m.priority)       # 10.0
    print(m.keyword_id)     # UUID string
    print(m.metadata)       # {"rxnorm_code": "1191", ...}

Match is a frozen dataclass — hashable and safe to use as a dict key or set member.


Replacing Keywords

store = KeywordStore()
store.add_keywords({
    "aspirin":       "Aspirin",
    "tylenol":       "Acetaminophen",   # alias → same canonical
    "ibuprofen":     "Ibuprofen",
})

print(store.replace("take aspirin or tylenol twice daily"))
# take Aspirin or Acetaminophen twice daily

Fuzzy Matching

from turbotext import FuzzyConfig

store = KeywordStore(fuzzy=FuzzyConfig(max_edit_distance=1))
store.add_keyword("aspirin")

store.extract("take asprin")    # substitution  i → r  ✅
store.extract("take aspirn")    # deletion      missing i  ✅
store.extract("take aspirrin")  # insertion     extra r  ✅

Boundary enforcement still applies

store.extract("I see cbt")   # ✅ whole word
store.extract("I see xcbt")  # ❌ left boundary fails
store.extract("I see cbts")  # ❌ right boundary fails

Choosing max_edit_distance

Value Use case
0 Exact matching only (default) — uses Cython fast-path when available
1 Single-character typos — medical terms, product names
2 Two-character errors — longer technical terms

Higher values increase recall but also false positives. Start with 1 and tune.


Conflict Resolution Policies

When keywords overlap, the policy decides which match to keep.

ALL_OVERLAPS — return everything, you decide
store = KeywordStore(policy=MatchPolicy.ALL_OVERLAPS)
store.add_keywords(["new", "new york", "york"])

store.extract("new york")
# → ["new", "new york", "york"]
LEFTMOST_LONGEST (default) — FlashText-compatible greedy
store = KeywordStore(policy=MatchPolicy.LEFTMOST_LONGEST)
store.add_keywords(["new", "new york"])

store.extract("new york")
# → ["new york"]   longest match wins
LEFTMOST_FIRST — earliest start wins
store = KeywordStore(policy=MatchPolicy.LEFTMOST_FIRST)
store.add_keywords(["new", "new york"])

store.extract("new york")
# → ["new"]   first token wins
HIGHEST_PRIORITY — priority-based greedy
store = KeywordStore(policy=MatchPolicy.HIGHEST_PRIORITY)
store.add_keyword("new york", canonical="New York", priority=2.0)
store.add_keyword("york",     canonical="York",     priority=5.0)
store.add_keyword("new",      canonical="New",      priority=1.0)

store.extract("new york")
# → ["New", "York"]   priority 5 beats priority 2; "new" doesn't overlap "york"
OPTIMAL_WEIGHTED — globally optimal, not greedy
store = KeywordStore(policy=MatchPolicy.OPTIMAL_WEIGHTED)
store.add_keyword("ab cd", canonical="LONG",   priority=5.0)
store.add_keyword("ab",    canonical="SHORT1", priority=3.0)
store.add_keyword("cd",    canonical="SHORT2", priority=3.0)

store.extract("ab cd")
# Greedy picks "LONG" (5).  Optimal picks "SHORT1"+"SHORT2" (3+3=6).
# → ["SHORT1", "SHORT2"]

Per-Keyword Metadata

store.add_keyword(
    "aspirin",
    canonical="Aspirin",
    category="DRUG",
    priority=10.0,
    rxnorm_code="1191",
    source="rxnorm",
    approved=True,
)

m = store.extract("take aspirin")[0]
print(m.canonical)               # "Aspirin"
print(m.category)                # "DRUG"
print(m.priority)                # 10.0
print(m.metadata["rxnorm_code"]) # "1191"

Match.metadata is a shallow copy — mutating it does not affect the stored keyword.


Word Boundary Rules

TurboText uses Unicode word boundaries — word characters are [a-zA-Z0-9_] and their Unicode equivalents.

store.add_keyword("cat")

# ✅ Accepted
store.extract("cat")          # text edge
store.extract("the cat sat")  # spaces
store.extract("(cat)")        # punctuation
store.extract("cat, sat")     # comma

# ❌ Rejected
store.extract("cats")         # right boundary fails
store.extract("scat")         # left boundary fails
store.extract("cat2")         # digit is a word char
store.extract("concatenate")  # substring

Performance

Apple M-series · 100 → 20,000 keywords · ~20 k-char text · best-of-3 runs

Exact matching (k=0)

TurboText + Cython matches FlashText and stays flat as vocabulary grows. re degrades because its alternation NFA grows with term count.

k=0 scaling

Library 100 terms 5,000 terms 20,000 terms Scales?
TurboText 5 ms 5 ms 6 ms O(text)
FlashText 4 ms 3 ms 3 ms O(text)
re 6 ms 212 ms 837 ms O(text × vocab)

Fuzzy matching (k=1)

TurboText does a single-pass trie scan regardless of vocabulary size. RapidFuzz and FuzzyWuzzy tokenise then compare every token against every keyword — O(tokens × vocab).

k=1 scaling

Library 100 terms 1,000 terms 5,000 terms Boundary-aware Extracts spans
TurboText 96 ms 174 ms 239 ms
RapidFuzz 13 ms 120 ms 597 ms
FuzzyWuzzy 222 ms 2,205 ms 10,917 ms

Note: RapidFuzz is a string-similarity scorer, not a text scanner — benchmarks use process.extractOne per token. It does not return character offsets or enforce word boundaries. TurboText does a single trie pass over the full document and natively supports multi-word phrases.

TurboText crosses RapidFuzz at ~2,000 keywords. A Cython extension for the fuzzy frontier is planned for v2.


API Reference

KeywordStore(policy, fuzzy)
store = KeywordStore(
    policy=MatchPolicy.LEFTMOST_LONGEST,    # default
    fuzzy=FuzzyConfig(max_edit_distance=0), # default — exact only
)
Parameter Type Default Description
policy MatchPolicy LEFTMOST_LONGEST Conflict-resolution strategy
fuzzy FuzzyConfig | None None Fuzzy config; None = exact only
add_keyword(surface_form, *, canonical, category, priority, **metadata) → str
kid = store.add_keyword(
    "aspirin",
    canonical="Aspirin",
    category="DRUG",
    priority=10.0,
    rxnorm_code="1191",
)
Parameter Type Default Description
surface_form str required Text to search for
canonical str surface_form Normalised name returned on match
category str | None None Grouping label
priority float 1.0 Weight for priority-based policies
**metadata Any Arbitrary extra fields

Returns the keyword's UUID string.

add_keywords(keywords, *, category, priority) → list[str]
Shape Example
list[str] ["java", "python"]
dict[str, str] {"py": "Python"} — surface → canonical
dict[str, list[str]] {"Python": ["py", "python3"]} — canonical → surfaces

category and priority apply to every keyword in the call.

extract(text) → list[Match]

Returns resolved matches in span order.

matches = store.extract("Patient takes aspirin daily")
replace(text) → str

Replaces every matched span with its canonical form.

result = store.replace("take aspirin or tylenol")
Match fields

Match is a frozen dataclass — all fields are read-only and it is hashable.

Field Type Description
text str Matched surface text as it appears in the input
canonical str Normalised form from add_keyword
start int Start character offset
end int End character offset (exclusive)
edit_distance int Levenshtein distance (0 = exact)
category str | None User-supplied category
priority float User-supplied priority
keyword_id str UUID from add_keyword
metadata dict Copy of extra kwargs
FuzzyConfig and MatchPolicy
FuzzyConfig(max_edit_distance=1)  # int, default 0
MatchPolicy Description
ALL_OVERLAPS Return every match
LEFTMOST_LONGEST Greedy — leftmost, then longest
LEFTMOST_FIRST Greedy — leftmost, then insertion order
HIGHEST_PRIORITY Greedy — highest priority wins cluster
OPTIMAL_WEIGHTED Exact — maximise total priority globally

Development

uv sync --group dev                        # install dependencies
python setup.py build_ext --inplace        # build Cython extension (optional)
uv run pytest                              # run tests
uv run ruff check src tests                # lint
uv run mypy src/turbotext                  # type-check
uv run pytest benches/ --benchmark-only    # throughput benchmarks
uv run python benches/scaling_benchmark.py # regenerate scaling charts
Project layout
src/turbotext/
    __init__.py       public API exports
    trie.py           TrieNode + TrieBuilder
    frontier.py       bounded-edit frontier search (pure Python)
    _fast.pyx         Cython hot-path for exact search (k=0)
    _fast.pyi         type stub for the Cython extension
    resolve.py        conflict-resolution policies
    store.py          KeywordStore public class
reference/
    reference_matcher.py    brute-force oracle for differential testing
tests/
    test_m0_smoke.py                   API surface + add_keywords shapes
    test_m1_exact.py                   exact matching + boundary rules
    test_m2_metadata_priorities.py     metadata, HIGHEST_PRIORITY, OPTIMAL_WEIGHTED
    test_m3_fuzzy.py                   fuzzy matching + hypothesis property tests
benches/
    bench_m3.py             pytest-benchmark: k=0 vs k=1 throughput
    bench_comparison.py     pytest-benchmark: TurboText vs FlashText vs re vs RapidFuzz
    scaling_benchmark.py    vocabulary-sweep scaling charts
assets/
    logo.png

Author

Nishank Mahore
nishankmahore@gmail.com · github.com/nishankmahore

If TurboText is useful to you, feel free to open an issue, suggest a feature, or contribute a pull request.


License

Released under the MIT License — see LICENSE for the full text.


Made with Python · Powered by Cython · Built for speed

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

turbotext-0.1.0.tar.gz (107.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

turbotext-0.1.0-cp313-cp313-win_amd64.whl (122.3 kB view details)

Uploaded CPython 3.13Windows x86-64

turbotext-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl (266.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

turbotext-0.1.0-cp313-cp313-musllinux_1_2_aarch64.whl (261.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

turbotext-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

turbotext-0.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (267.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

turbotext-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (125.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

turbotext-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl (124.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

turbotext-0.1.0-cp312-cp312-win_amd64.whl (122.8 kB view details)

Uploaded CPython 3.12Windows x86-64

turbotext-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl (271.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

turbotext-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl (266.2 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

turbotext-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (269.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

turbotext-0.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (271.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

turbotext-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (125.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

turbotext-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl (125.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

turbotext-0.1.0-cp311-cp311-win_amd64.whl (122.7 kB view details)

Uploaded CPython 3.11Windows x86-64

turbotext-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl (258.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

turbotext-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl (255.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

turbotext-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (260.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

turbotext-0.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

turbotext-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (125.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

turbotext-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl (124.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

turbotext-0.1.0-cp310-cp310-win_amd64.whl (122.8 kB view details)

Uploaded CPython 3.10Windows x86-64

turbotext-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl (249.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

turbotext-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl (245.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

turbotext-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (250.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

turbotext-0.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (249.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

turbotext-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (125.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

turbotext-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl (124.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file turbotext-0.1.0.tar.gz.

File metadata

  • Download URL: turbotext-0.1.0.tar.gz
  • Upload date:
  • Size: 107.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for turbotext-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0f01d3b4edd6a8294b4c224a222db6f73ce27d862dc3e172837a6d4cef17535b
MD5 71c72453d5ded51cbd9dd1ecd2650338
BLAKE2b-256 c8d7e47c68d6c61f99e21e3cd4809b46b9eb9eb3faf83baeb33340bbefe9d5d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0.tar.gz:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: turbotext-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 122.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for turbotext-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f328c2a887fb761f2f0565c3cb48a2a349a78f094e7cc818bd4f0abdfb648823
MD5 1465bdb279bd808c7b445219d4bef456
BLAKE2b-256 1c406586e77ee07a84562e5269d15c361ec83bb782ef32f45fa1b9c74ccdbeea

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d89be61a75ab139d00addf42daf8b6b5d57fed0343909257c6e95144f520b8d5
MD5 b0d8f5a445fa0770c5ef6a8aa81640d4
BLAKE2b-256 21f50f7ce54fe3dc6c88381b35f38a9a8e303456fdc9d1b3dbfa32bb44261a10

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6e264ee598bdd1205ebcfbab1facf853927cf5397ad784ebdd97080b800438b1
MD5 4268eae0d14a2272d69536eff9651bc3
BLAKE2b-256 82633e1ba24a3cc4296ddc9957d56c50d66a302a0b7e1fbaa4bbf3a6845d9771

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f6918afa5d6268da32efc40a6089dfd5c73f3d4b594df1b098b7aa4af7b027d5
MD5 ac3383d3624b5dec1c09b5869e6c8176
BLAKE2b-256 75be1150b289709c71de5d4793106b180df4501f7dc7d4604e11c6f7109e3959

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8bc7597c74af743bf69acd5058b649dd7225883c0948255b0f5373102a5b3179
MD5 fd3f6621f2cd7b1cca9210ff2aa290c6
BLAKE2b-256 d30e7008220f9f652118edf55c317b3a641b9c9a7ae171d75f0270b6140928d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aa910a69f5269a6ef1049683a887e3c6e5369644e0498f72df98784c4331ee5a
MD5 5cf5679f16a1e8154eae7cfdf92338b4
BLAKE2b-256 7e9c4fc21b8ec46efca3307a5156ba8f70a3dac6d86199e175eaf12d2ea471af

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f46423759faf345ff3c9a1bb93ae22b6fa453a908b8b8cc8d1ab6b7ea2820e23
MD5 cfdfc02c66bbc01eb1b2e0a1138f8742
BLAKE2b-256 5fb89540194231aec208cd8985376d745bbe76dcdcdb0b9989dca98f7e3654fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: turbotext-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 122.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for turbotext-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 58030b6f77b4c7d5ae1d0edb08f8c89eeaac4cc6528281d451debcc468c1ada6
MD5 a6cb7d5bcd3d311963d1a071a0b4b610
BLAKE2b-256 a5952c25384b2fa34dd279ad1f20087cc8915a6e9c826cc05de982fcc8d7dd75

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0cd574c16a2b352fb3cb0c56645373e7d2951fd830457518927720c82df4f36a
MD5 35cda4601dfa607bd79a058958594a12
BLAKE2b-256 3904807cb8905e2ba9f24a3edd51b4d9518fbb282a9862f596bc3e48dcfdaa11

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a8e92c792aa7830f460ee73344e5717ce442ebf07ee1bac155f9f3c0bdb4417a
MD5 609f22256c37fdeb813b6c375684cd20
BLAKE2b-256 e3029f76d0bb08ac47ba98fe6eedcba4c63d11b1649b8bc0a06239471dcbbc6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9e47592840cf3d8475c5ccf1443c5e488e69a40308161db5c33b61ed86175c67
MD5 6addc9880042d7fcd2c05add4947c60a
BLAKE2b-256 086f9eccaa3d80368bccfc1bbbe85127ee5fb40e662fe8105a2b1294cd61e839

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8fa8a79439a23389723a99683efd511aa0fba123eb5e1366a3c7bdbef0bfba5
MD5 3b51013e1c3c90c963d939c9a51d0203
BLAKE2b-256 fd1363b0991e9a3018e7d09d3fd727e73db6117ab5f59d587f2838192fd70df5

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c56f361a25456e9134ef098128a616b5ba084202442a6071b70c37cea9e581a
MD5 ebd5fe010e125e4f69d092f766815a30
BLAKE2b-256 6d88398e2265c9b804950986ee0d0bb71ce23fc5235c484cd69e656f6045e8ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0d83dc2722acb8364fc59bcc83a20799dbd285f5a09c6a553f71a28a96ce36f2
MD5 ee99ed1a3e156a8f103ab5a2a2de933c
BLAKE2b-256 f6cfa01202e76c266326d77fb80538e5eb5382a69a72d505d664399458e65f0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: turbotext-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 122.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for turbotext-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 19ffd0d78871f0a0edbdb8d958c61f82456b3454358876a9af16c8646da604ea
MD5 99abecf21bf2573e790f93c5428b0bb0
BLAKE2b-256 6c71492aad32bc52ba7e4d4c876f23479de464bc871a7bf40e816b1bc12de527

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5d3a7253441f52a0aace7215c0dcf2fbaa0d448e97cdf36f61221dee1ddcbd30
MD5 bd2868668143c4d13d33e8dad52235f1
BLAKE2b-256 2c0b9d3864b905f0b2f42e9121b6d2dc86984ccec6126872b4bb8b0af3065894

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e25cbf3c3bf916c7c8a0dee8692e058b5a9c6e0f7701f360cb961e4ddea09453
MD5 5f57956cd8d4f644a9ae84eea15f2a76
BLAKE2b-256 ba3691908a86403f6d64b4a85b2ee8c76795c73d2c38782599997bedd96bf281

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec404027fb23b09030c22b3dc93034264a9f385cc63359e8b212c2e87eda7097
MD5 0242c67a8a994e84b83416f5780b3a74
BLAKE2b-256 374a16c61350206c353c4e5edc4702dd0ce15ad43722b8199f2e17230f1fe1b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11adbbe5575f4d5273c21f38a055b204700df483d544aa4abae46db61efab6d5
MD5 86b2109eff7a13a78e8f6ba746f6b3dd
BLAKE2b-256 ae3946d361eaf854921525b6f3e4edb220b2698c986b0a20103d415697f15dc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 119bc11a0c7f5f05b050aac29ca02b1fbeb6c5d98c31736951d641b39aa260ed
MD5 c87dc6ebdfb49d2f215faef6c33db05c
BLAKE2b-256 228c37af34fbae5ea0ad2bd74536b0fd93e49c97eb1798c55e8a4cfb89449f25

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6477da172a2e793367b454c3cf7b40b735d80586cdf4b125bf5a0b8718c78205
MD5 843893fd508b1c9224604e5e19cfe0e5
BLAKE2b-256 a1a60ef7fce6a5f74016b69dea2f2898ec3ae40c62ac91e9c61657dab44f441c

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: turbotext-0.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 122.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for turbotext-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 633cc2bd7420a4d8ee709fde92a2dcc77f0a5706f89d7987301aa8d94226ff79
MD5 d5d2398ce32f8436c9b950880f24745f
BLAKE2b-256 6dfd989e399ba27c48bc99184d348e5a552eccbe3640f560cca28642ea861b84

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e92e1738023ce704738e407b4e3750cc17d1dd828155c32a264f31f66885ebd4
MD5 c10fa36bfa851a300e4161a8bf049cda
BLAKE2b-256 4884b318bf3c6201be42f2898450c3cd4fafbf92f5569965a30b88eea9c27b43

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8659fa66a60a96de7317074314f38973138e4d470291dd3bb32cec5b3bee4895
MD5 613b85898b09e4ad5b9f40351f781061
BLAKE2b-256 3d3ef6cefbe4c80c3a2663dd6b673ed0308768eb3840fae4deb06948c319bcd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1180415232b452de7f8ba5fbd5026d36c175d035be3dacb9832255de25055dce
MD5 ab11a24096d299835e7c62b8c2e235f7
BLAKE2b-256 c0869e4a195ddbebd40880acb4d6d8beb582fccdd65d8a761288f80d8c6cef22

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0738d4ec878b762efde6f93b37daaf0dac678209ce6241c0c9573532edb2c760
MD5 fb9087a242d1bfa53598e35d62716a20
BLAKE2b-256 c9341c951476979a61ca048edb7320288e9929ad7aeb7ff2efc75395e5569d7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 297e247ea94da2640d37a65e143ecc9393927e0cde02ca06ea4f23ebc110048a
MD5 3d751df6de1d3bb0881274848ec5e33e
BLAKE2b-256 5d53da306c24da517f16277360719cb118dd674a39bd58ce1043feccf3e93992

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbotext-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for turbotext-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2f29c9174ee6880db7e5a84a249d2608350490d6c345d441890e839bc34c8150
MD5 12d70406e6ef6673e0ac80c91f463bd3
BLAKE2b-256 306f756d177d8f225c522aeac1ac41cd8bf35f8b02aa43e864903b3c3334f21c

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbotext-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish.yml on nishankmahore/TurboText

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page