Skip to main content

normalizer-tr

CI

Turkish text normalization for text-to-speech, with a Rust core and a typed Python binding. Turn written numbers, measurements, money and other supported expressions into spoken Turkish without rewriting ordinary prose.

Input:  saat 09:30'da 5 kg malzeme ve %12,5'lik fark
Output: saat dokuz otuzda beş kilogram malzeme ve yüzde on iki virgül beşlik fark

The same Rust engine powers both APIs. It is synchronous, works offline and requires no model, network service, Torch or async runtime. Exact decimal and money arithmetic uses integers, not floating point.

Status: early-development 0.3.0, not a stable 1.0 API or a universal pronunciation guarantee. The Rust crate and Python distribution share the name normalizer-tr; both use normalizer_tr in code. The internal Rust/Python companion is not a separate crates.io product.

Choose your API

Use case Component Dependencies
Rust applications normalizer-tr / import normalizer_tr Rust only; optional Serde
Python applications normalizer-tr / import normalizer_tr The compiled Rust binding; no speech model

bindings/python is a separate Cargo workspace member and wheel, not part of the core .crate. The binding depends on the Rust core, never the reverse.

Rust quickstart

Use Rust 1.94 or newer / edition 2024. Development builds use Rust 1.99.0. From your application's Cargo.toml:

[dependencies]
normalizer-tr = "0.3"

Commit your application's Cargo.lock to pin resolved dependencies. For an unpublished checkout, use a reviewed Git revision or a local path such as normalizer-tr = { path = '..\normalizer-tr' }.

use normalizer_tr::{Normalizer, NormalizeOptions};

let normalizer = Normalizer::new()?;
let result = normalizer.normalize(
    "saat 09:30'da 5 kg malzeme ve %12,5'lik fark",
    &NormalizeOptions::default(),
)?;

assert_eq!(
    result.normalized_text(),
    "saat dokuz otuzda beş kilogram malzeme ve yüzde on iki virgül beşlik fark",
);
assert!(result.complete());
# Ok::<(), normalizer_tr::NormalizeError>(())

Keep and reuse a Normalizer: its compiled resources are immutable and shared. It is cloneable and Send + Sync; inputs and results are not cached. Enable the optional serde feature to serialize results, segments and issues.

Python quickstart

The Python bridge calls Rust directly rather than duplicating language rules. The release targets ordinary CPython 3.11–3.14 on Windows/Linux x64 and macOS x64/arm64. Linux wheels require glibc 2.28 or newer; macOS wheels target 12.0 or newer. No PyPy, free-threaded Python or other architectures are claimed.

python -m pip install normalizer-tr

Compatible wheels require no Rust compiler. To build from source instead:

Install Rust and the MSVC C++ build tools, then run in PowerShell. On Windows, use a short checkout path (for example C:\src\normalizer-tr) to avoid path-length limits during installation.

git clone https://github.com/erdemtuna/normalizer-tr.git
Set-Location normalizer-tr
py -3.13 -m venv .venv
.\.venv\Scripts\python.exe -m pip install .\bindings\python
.\.venv\Scripts\python.exe -X utf8 .\bindings\python\examples\showcase.py

The source installation builds a native wheel and requires Rust/C++ build tools. For a local wheel, use python -m pip install --no-deps <wheel-path>.

from normalizer_tr import Normalizer

normalizer = Normalizer()
result = normalizer.normalize("25 TL; 5 kg")
print(result.normalized_text)  # yirmi beş Türk lirası; beş kilogram
assert result.complete
assert result.issues == ()

-X utf8 avoids Turkish stdout encoding errors on Windows shells configured with a legacy encoding. It does not alter normalization. See the Python API and build guide for hints, cancellation, exceptions and installed-wheel testing.

Ambiguity is explicit

By default, supported spans normalize and unresolved spans remain exactly as written. Check complete before passing a result to a speech model:

use normalizer_tr::{Normalizer, NormalizeOptions};

let result = Normalizer::new()?.normalize("25 TL; 1.234", &NormalizeOptions::default())?;
assert_eq!(result.normalized_text(), "yirmi beş Türk lirası; 1.234");
assert!(!result.complete());
assert_eq!(result.issues().len(), 1);
# Ok::<(), normalizer_tr::NormalizeError>(())

Bare 1.234 has insufficient reading intent. Use a whole-span hint if your application knows how to interpret it, or select strict rejection:

from normalizer_tr import Hint, Normalizer, NormalizationError

normalizer = Normalizer()
assert normalizer.normalize(
    "00042", hints=(Hint(0, 5, "digits"),)
).normalized_text == "sıfır sıfır sıfır dört iki"

try:
    normalizer.normalize("1.234", ambiguity_policy="reject")
except NormalizationError as error:
    assert error.code == "unresolved"
    assert error.issues  # No partial result is returned in strict mode.

All ranges are half-open original UTF-8 byte offsets, not character positions, Python indices or UTF-16 offsets. Hints must cover a whole expression, be grapheme-safe and not overlap. For a prefix in Python, compute its byte length with len(prefix.encode("utf-8")).

Invalid input/hints, cancellation, deadlines, resource limits and internal failures are errors in either policy, not successful preservation.

Supported expressions

Written Spoken
12,05 on iki virgül sıfır beş
%3,25'ten yüzde üç virgül iki beşten
25 TL'den yirmi beş Türk lirasından
€14,05 / $40 / 25 GBP on dört avro beş sent / kırk dolar / yirmi beş sterlin
1.'nin / 4.'ye birincinin / dördüncüye
5 kg'dan / 2 sa'ten / 5 m³'e beş kilogramdan / iki saatten / beş metrekübe
90 km/sa / 5 m/s saatte doksan kilometre / saniyede beş metre
10-15 kişi on ila on beş kişi
tarih 01.02.2026 tarih bir Şubat iki bin yirmi altı
Prof. / TBMM / KDV profesör / te be me me / katma değer vergisi
0850 222 33 44 sıfır sekiz yüz elli iki yüz yirmi iki otuz üç kırk dört
II. Dünya Savaşı ikinci Dünya Savaşı
info@ornek.com info et ornek nokta kom

Coverage is deliberately bounded, not a universal Turkish pronunciation engine. Normalization reference documents the exact grammars, aliases, hints, boundaries and unsupported cases. Unknown or malformed identifiers/composites are protected as whole spans, not rewritten in fragments. Ordinary word case is retained; the library does not globally lowercase or adapt output to a particular voice/model vocabulary.

Develop and contribute

cargo test --locked
cargo run --locked --example normalize
cargo run --locked --example general
cargo doc --locked --no-deps --open

Default Cargo operations build the standalone core. --workspace also includes the Python binding. CI exercises the Rust configurations and the actual installed Python wheel without speech models.

See CONTRIBUTING.md for environment setup, architecture, regression tests and the full scripts\verify.ps1 command. That serial command produces clean packages, external-consumer results, latency reports and one checksum/provenance manifest in a new output directory.

The measured warm release Rust p95 was below 1 ms separately for representative short and medium cohorts on the inspected Windows host. This is not an all-input, cold-start, Python, concurrent-call or end-to-end audio guarantee. See PERFORMANCE.md for the measurement protocol and limits.

Acknowledgements

Thanks to @canberk7 for practical TTS feedback and suggestions on making the Python package easier to distribute.

License and boundaries

Owned code and independently authored tables are Apache-2.0. Third-party notices preserve dependency and Unicode rights. This repository contains the normalizer and Python binding only: no speech-engine integration, external model source, weights, credentials or audio.

Metadata

Release files for normalizer-tr 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for normalizer-tr 0.3.0
File Size Uploaded
normalizer_tr-0.3.0.tar.gz 372.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for normalizer-tr 0.3.0
File
normalizer_tr-0.3.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
normalizer_tr-0.3.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
normalizer_tr-0.3.0-cp314-cp314-macosx_12_0_x86_64.whl CPython 3.14 CPython 3.14 macOS 12.0+ x86-64 Details
normalizer_tr-0.3.0-cp314-cp314-macosx_12_0_arm64.whl CPython 3.14 CPython 3.14 macOS 12.0+ ARM64 Details
normalizer_tr-0.3.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
normalizer_tr-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
normalizer_tr-0.3.0-cp313-cp313-macosx_12_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 12.0+ x86-64 Details
normalizer_tr-0.3.0-cp313-cp313-macosx_12_0_arm64.whl CPython 3.13 CPython 3.13 macOS 12.0+ ARM64 Details
normalizer_tr-0.3.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
normalizer_tr-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
normalizer_tr-0.3.0-cp312-cp312-macosx_12_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 12.0+ x86-64 Details
normalizer_tr-0.3.0-cp312-cp312-macosx_12_0_arm64.whl CPython 3.12 CPython 3.12 macOS 12.0+ ARM64 Details
normalizer_tr-0.3.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
normalizer_tr-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
normalizer_tr-0.3.0-cp311-cp311-macosx_12_0_x86_64.whl CPython 3.11 CPython 3.11 macOS 12.0+ x86-64 Details
normalizer_tr-0.3.0-cp311-cp311-macosx_12_0_arm64.whl CPython 3.11 CPython 3.11 macOS 12.0+ ARM64 Details

Total release size: 20.4 MB

Release files / normalizer_tr-0.3.0.tar.gz

Download URL normalizer_tr-0.3.0.tar.gz
Size 372.1 kB
Tags Source
SHA-256 checksum
How to use checksums
120923a2f6b38714e7f91ec863d8476b88f0173f2aaded0112025c85077ed6a8
BLAKE2b-256 checksum
How to use checksums
238041f60c8c8cac2ee1ab1e63f62d7067d91946a286ea21548384e30ad9f0ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp314-cp314-win_amd64.whl

Download URL normalizer_tr-0.3.0-cp314-cp314-win_amd64.whl
Size 1.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
05452154397775eead5ded9219f7e3d7b9e1760bb9ffb04323e031cac4d8b431
BLAKE2b-256 checksum
How to use checksums
c92597bfa4be647510c2622e00d12eeea6b9bf7e188013fc676bb29c9256730b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL normalizer_tr-0.3.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
546e8005c36dd6af28af6529bad3dddbcc7937d4f963ed77d7d453489fc7d7e8
BLAKE2b-256 checksum
How to use checksums
a88249bae8079e3a9d49033a1b2fd22fe04e9e2e37ffe82788aeaa7756ce2448
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp314-cp314-macosx_12_0_x86_64.whl

Download URL normalizer_tr-0.3.0-cp314-cp314-macosx_12_0_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 macOS 12.0+ x86-64
SHA-256 checksum
How to use checksums
fad97083d59d7fd1c75a649623742de7d2dc0ac057b5a30e8ab664e33d278699
BLAKE2b-256 checksum
How to use checksums
f30486557e5beeeff4b3ca024ad29c4bac9d794d1e7c0224d55fdeef736c92b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp314-cp314-macosx_12_0_arm64.whl

Download URL normalizer_tr-0.3.0-cp314-cp314-macosx_12_0_arm64.whl
Size 1.2 MB
Tags CPython 3.14 macOS 12.0+ ARM64
SHA-256 checksum
How to use checksums
d9220c6930b050c32b72c083d6db42ca2fb4040beaae24013d98e86040cd7747
BLAKE2b-256 checksum
How to use checksums
a258e38aed84497af779e609ccab977a26530b06b24815a5f08f76209b0c0f57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp313-cp313-win_amd64.whl

Download URL normalizer_tr-0.3.0-cp313-cp313-win_amd64.whl
Size 1.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
95a9c372ff17ae8dcf4322151974c865ff8e3ffa4bbeb57ff1c3b7f7c165e4c1
BLAKE2b-256 checksum
How to use checksums
3b82bce291e7b55d1ca9e76cdb6739b213154845e8063d1743daa1a2a1ab450d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL normalizer_tr-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a1d0d7fef96de2c24742fda45efa83c36915385f4ff8ba33b3a44d45d3feda52
BLAKE2b-256 checksum
How to use checksums
e47dd7a163d4821fc10b8fdbafc31e216b6fc31a15206f675800f772c6076230
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp313-cp313-macosx_12_0_x86_64.whl

Download URL normalizer_tr-0.3.0-cp313-cp313-macosx_12_0_x86_64.whl
Size 1.3 MB
Tags CPython 3.13 macOS 12.0+ x86-64
SHA-256 checksum
How to use checksums
580494314da9fb8f6eeb25910f8b92e110d19e2d109c798bc7450045ca9437d1
BLAKE2b-256 checksum
How to use checksums
086af23d1c8acda2b1a5c48e80da72523b86103cad33de4e9551db1b462fa6ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp313-cp313-macosx_12_0_arm64.whl

Download URL normalizer_tr-0.3.0-cp313-cp313-macosx_12_0_arm64.whl
Size 1.2 MB
Tags CPython 3.13 macOS 12.0+ ARM64
SHA-256 checksum
How to use checksums
4d53c63a87e9d1587dc207ddbcc517b5ee82783032878f70b49b71ca5d7b5af1
BLAKE2b-256 checksum
How to use checksums
990a700ec471e63b384d7a3f4af4cb8dde3985ac3786f059d8d7954c9b5bd83a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp312-cp312-win_amd64.whl

Download URL normalizer_tr-0.3.0-cp312-cp312-win_amd64.whl
Size 1.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
5d54e10325d74f915341bbbee536b28b1b1a1f064f06eb3277856c24c25b68a1
BLAKE2b-256 checksum
How to use checksums
85b4c0530f0c28006e3427abff502bcf6f1c5b491d7403e68ca1cee02ec75dc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL normalizer_tr-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3a4ce4a474fa7aeed7346a60259f19d0d8d0736cc2546c3089d6f0ea749fa495
BLAKE2b-256 checksum
How to use checksums
33d88388ad108adfcb6716c45a83f83529ca0496e9e979461feaef06fd84534d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp312-cp312-macosx_12_0_x86_64.whl

Download URL normalizer_tr-0.3.0-cp312-cp312-macosx_12_0_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 macOS 12.0+ x86-64
SHA-256 checksum
How to use checksums
96b556224bdeae8c6f8dc10085ee8245b14352afb7cff7893f897b615e69512c
BLAKE2b-256 checksum
How to use checksums
4657609492ed7a1a80cc650a9764ac9183d63aa4aa6fdfa15ca2b11ee3ed7f95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp312-cp312-macosx_12_0_arm64.whl

Download URL normalizer_tr-0.3.0-cp312-cp312-macosx_12_0_arm64.whl
Size 1.2 MB
Tags CPython 3.12 macOS 12.0+ ARM64
SHA-256 checksum
How to use checksums
da1419af20988d2bac2b5f853279b0e558792da2bb910b14adf8682ce29aec8e
BLAKE2b-256 checksum
How to use checksums
973b01cf93d51de7ed3130b11566597ca1e5a7a6a3abc6f10b23d453d2f0ceeb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp311-cp311-win_amd64.whl

Download URL normalizer_tr-0.3.0-cp311-cp311-win_amd64.whl
Size 1.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
f29a32f5debb6037de184e9f0921bc281c6a0d1a1ed2d6cb4270a8b6e3e25871
BLAKE2b-256 checksum
How to use checksums
808206b3a06afda20ae2f1710fdc4182ba65d2745c4da3eab6b59a3b6ac1d831
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL normalizer_tr-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3c5425cdc2d1e4f95f79c378d1fcc70471a008476d30264d0cc57dafc5345b7d
BLAKE2b-256 checksum
How to use checksums
c962e2ac7ebf4d85563a9004229f394924dbc8a0c11111650be76f9df8544fb9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp311-cp311-macosx_12_0_x86_64.whl

Download URL normalizer_tr-0.3.0-cp311-cp311-macosx_12_0_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 macOS 12.0+ x86-64
SHA-256 checksum
How to use checksums
03999a5eb3c9db10ff6dcee12412db17755350046d0c0e89f2f5a299ed1c4809
BLAKE2b-256 checksum
How to use checksums
d9be72bc204826eaeaf556caf8bc07aec930224f076320210b2cd2d2223d3934
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / normalizer_tr-0.3.0-cp311-cp311-macosx_12_0_arm64.whl

Download URL normalizer_tr-0.3.0-cp311-cp311-macosx_12_0_arm64.whl
Size 1.2 MB
Tags CPython 3.11 macOS 12.0+ ARM64
SHA-256 checksum
How to use checksums
e353c30b780a99e0b831c70f1f285e9dfcddd6214725b989393292c7bc172864
BLAKE2b-256 checksum
How to use checksums
f8d88860d158bd5faf759234d3c03b96f45ce645b8c810c4beed956cc9c479a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release history Release notifications | RSS feed

0.8.0

17 release files

0.7.0

17 release files

0.6.0

17 release files

This release

0.3.0 This release

17 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page