Skip to main content

normalize-uk-cpp

CI Release PyPI

C++23 Ukrainian text normalization and tokenization utilities with optional Python 3.10+ bindings.

CMake

cmake -S . -B build
cmake --build build
ctest --test-dir build

Enable Python bindings explicitly when building with CMake:

cmake -S . -B build-python -DNORMALIZE_UK_CPP_BUILD_PYTHON=ON
cmake --build build-python

A regular CMake install includes the C++ library, headers, and an exported CMake target file. Python wheels contain only the Python package and compiled extension.

Python

Install uv first. To run the published package from PyPI without using this checkout's project environment:

uv run --no-project --with normalize-uk python

To build and work with this checkout, sync its locked dependencies and start Python:

uv sync
uv run python

In either Python session, try:

import normalize_uk as nuk

print(nuk.number_to_words(123))
print(nuk.normalize_ukrainian("01.05.2024"))
print(nuk.normalize_ukrainian("01.05.2024", preset=nuk.NormalizePreset.TtsFriendly))
print(nuk.normalize_ukrainian_many(["01.05.2024", "5 кг"]))
print([sentence.text for sentence in nuk.split_sentences("П'ять зв'язків. Два.")])
print([token.text for token in nuk.tokenize("П'ять зв'язків.")])

More examples live in examples/python/.

Tags matching the version in pyproject.toml (for example, v0.4.5) trigger wheel builds for supported Python versions. The workflow uploads the wheels to GitHub Release Assets, then downloads those Assets and publishes them to PyPI.

NormalizeOptions accepts a preset and named overrides at construction time:

options = nuk.NormalizeOptions(
    preset=nuk.NormalizePreset.TtsFriendly,
    range_style=nuk.RangeStyle.Compact,
    numeric_date_order=nuk.NumericDateOrder.DayMonthYear,
)
result = nuk.normalize_ukrainian("5–7 кг", options=options)
spans = nuk.flag_uncertain("10:30, $12", options=options)

Pass either options= or preset= to normalize_ukrainian and flag_uncertain. normalize_ukrainian_many() accepts any iterable of Python strings and applies one options snapshot to the entire batch. It returns a list in input order and raises TypeError if an item is not a string. It accepts the same options= and preset= selection as normalize_ukrainian. Identical strings within one batch are normalized once and their result is reused. The older positional options/preset calls and normalize_ukrainian_with_preset() remain available. Without options, flag_uncertain() reports all ambiguity candidates. With explicit options or a preset, it omits warnings for ambiguous dates, colon pairs, and currency symbols when the selected policy resolves them; invalid-value diagnostics remain.

Substring.start/stop and UncertainSpan.start/stop are Python str indexes, with stop exclusive: span.text == source[span.start:span.stop]. They count Unicode code points, matching Python slicing, rather than UTF-8 bytes.

number_to_words(), number_to_ordinal_words(), and number_to_words_case() accept integers from 0 through 999999999999999999. Values outside that range raise ValueError; non-integers raise TypeError. number_to_words_digit_by_digit() accepts a nonempty string of ASCII digits only and preserves leading zeroes. Empty strings or strings containing other characters raise ValueError; non-strings raise TypeError. Ordinal forms are nom_m, nom_n, nom_f, nom_pl, gen, dat, prep, loc, pl, loc_pl, acc_f, gen_f, ins, ins_f, ins_pl, and loc_f. Cardinal cases are gen, dat, instr, and prep. Unknown forms raise ValueError.

The legacy spellings sentenize(), cyrilize(), and cyrrilize() remain available but issue DeprecationWarning; use split_sentences() and transliterate_to_cyrillic() in new code.

NormalizeOptions, Substring, and UncertainSpan support copy.copy(), copy.deepcopy(), and pickle serialization. Copies are independent value objects.

Custom vocabulary

Pass a Python dict directly when no file is needed:

words = {"Acme": "акме", "Google": "гуголь"}
print(nuk.normalize_ukrainian("Google і Acme", vocabulary=words))  # гуголь і акме

normalize_ukrainian_many() and flag_uncertain() accept the same vocabulary= keyword. A dict can also be the second positional argument. When passed alongside options=, its entries override matching words for that call while leaving the options object unchanged.

Save user-supplied word readings as a UTF-8 TSV file with the same columns as data/lexicons/brands.tsv and data/lexicons/english_words.tsv:

latin	cyrillic
Acme	акме
Google	гуголь

Load the file into an options value and pass it to the normalizer:

words = nuk.load_vocabulary_tsv("my_words.tsv")
options = nuk.NormalizeOptions(vocabulary=words)
print(nuk.normalize_ukrainian("Google і Acme", options=options))  # гуголь і акме

The same file works in C++:

uktextnorm::NormalizeOptions options;
options.vocabulary = uktextnorm::load_vocabulary_tsv("my_words.tsv");
auto text = uktextnorm::normalize_ukrainian("Google і Acme", options);

For the CLI, run uktextnorm --vocabulary my_words.tsv "Google і Acme". Latin keys are single ASCII words, matched without regard to case. Uploaded entries override built-in brand and English-word readings only for calls using those options. The normalize_english_words switch also controls custom readings.

Currency and cryptocurrency coverage

Normalization covers 178 ISO 4217 List One codes from the 2026-01-01 data snapshot, including their 0-, 2-, 3-, or 4-digit minor-unit rules. More than 70 common cryptocurrency and finance tickers have natural Ukrainian readings. Other 2–10 character uppercase alphanumeric tickers are spelled out after amounts and when paired with a known asset, so newly introduced assets do not require an immediate library release. Prefix and suffix amounts, localized thousands separators, signs, decimals, and the symbol are supported.

Ambiguity controls

NormalizeOptions keeps backward-compatible defaults while allowing callers to resolve ambiguous input explicitly:

  • colon_style: contextual clock/ratio detection, forced clock, or forced ratio.
  • numeric_date_order: day-month-year, month-day-year, or preservation of dates where both fields are at most 12.
  • currency_symbol_policy: assume the common currency for $ and ¥, or preserve those ambiguous symbols.

The CLI exposes the same controls through --colon-style, --date-order, and --preserve-ambiguous-currency.

Benchmarks and fuzzing

Build and run the native benchmark in Release mode:

cmake -S . -B build-bench-release -DCMAKE_BUILD_TYPE=Release
cmake --build build-bench-release --target uktextnorm_benchmark --parallel
./build-bench-release/uktextnorm_benchmark . --no-per-case --preset Default --target-bytes 262144

For Python binding timings from this checkout, run uv run python benchmarks/python_binding_benchmark.py. It compares scalar and batched normalization, including unique inputs, and span-returning calls.

Measured on 2026-09-15 with an Intel Core i9-9900K (Linux, GCC 13.3 Release build with -O3, Python 3.14.7). These are medians of three native runs or the Python benchmark's three timeit repeats:

Benchmark Measured speed
C++ Default: 27-case corpus, 1,900 UTF-8 bytes per pass 271 normalizations/s; 18.6 KiB/s
Python scalar: 1,000 short strings (4 unique) 1.04 s per 1,000 strings
Python batch: same 1,000 short strings 4.36 ms per 1,000 strings (238× faster)
Python scalar: 100 unique strings 104.7 ms per 100 strings
Python batch: same 100 unique strings 102.4 ms per 100 strings

The C++ run processed 260,300 input bytes across 137 corpus passes. Batch normalization reuses results for repeated strings; unique inputs show little speed difference. Timings vary with hardware, build settings, and input text.

With Clang and libFuzzer support, build the normalization harness with sanitizers:

cmake -S . -B build-fuzz -DCMAKE_CXX_COMPILER=clang++ -DNORMALIZE_UK_CPP_BUILD_FUZZER=ON
cmake --build build-fuzz --target uktextnorm_fuzzer
./build-fuzz/uktextnorm_fuzzer -max_total_time=60 tests/data

Development

Install uv and just for development. Run just to see all recipes. just format applies Ruff fixes and Python formatting; just lint runs the Python static checks; just check also runs Python and C++ tests.

just setup
just format
just lint
just check
just wheel 3.15

The project includes a .clang-format file and a CMake formatting target. Install clang-format, then run:

cmake --build build --target format

Release files for normalize-uk 0.4.5

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

Built distributions (wheels)

Table of built distributions (wheels) for normalize-uk 0.4.5
File
normalize_uk-0.4.5-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details
normalize_uk-0.4.5-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
normalize_uk-0.4.5-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details
normalize_uk-0.4.5-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
normalize_uk-0.4.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
normalize_uk-0.4.5-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
normalize_uk-0.4.5-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
normalize_uk-0.4.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
normalize_uk-0.4.5-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
normalize_uk-0.4.5-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
normalize_uk-0.4.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
normalize_uk-0.4.5-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
normalize_uk-0.4.5-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
normalize_uk-0.4.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
normalize_uk-0.4.5-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
normalize_uk-0.4.5-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
normalize_uk-0.4.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
normalize_uk-0.4.5-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 18.6 MB

Release files / normalize_uk-0.4.5-cp315-cp315-win_amd64.whl

Download URL normalize_uk-0.4.5-cp315-cp315-win_amd64.whl
Size 1.2 MB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
d97cc1967de3ebcc5d11d7313e910f6edbaeb55f66993174c91a1b6e79711ac2
BLAKE2b-256 checksum
How to use checksums
5850356d8b3d79405b7d65e553323da1b4fd222486894d7b3e26951c96db8da8
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL normalize_uk-0.4.5-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.15 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
00035056dc4e1358823170daaf9c1b292c4c21b3b6fc4787e2c56b7804cd3584
BLAKE2b-256 checksum
How to use checksums
b3dfb8fa1dfd6fb857315f7e768647d4f94fbe0bf0486d9c08e4b3fa334ccad3
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp315-cp315-macosx_11_0_arm64.whl

Download URL normalize_uk-0.4.5-cp315-cp315-macosx_11_0_arm64.whl
Size 860.2 kB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6431916631c91eac4e650362bea386ef0df4331d7e08d022fbe6541f47c6f37f
BLAKE2b-256 checksum
How to use checksums
c981ebf33f9e643137ac4fa8481949954e7c16bf704d93f30ac51f9eb2af3132
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp314-cp314-win_amd64.whl

Download URL normalize_uk-0.4.5-cp314-cp314-win_amd64.whl
Size 1.2 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
9fe16923b4bded3506d3c03333f28a2e0809b90e930b4cff2160860ee5b77372
BLAKE2b-256 checksum
How to use checksums
64469eb7d015d6211c654e8ca65139e1dc3bc6fc43d0f1f0f99e90654ec34e49
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL normalize_uk-0.4.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
67824fc6eb3ae417dc6717314839917ab3100d78cc643a40b4f9a71a63e0c694
BLAKE2b-256 checksum
How to use checksums
4a5576ae8eaef0a3788befac969df0cd361ca0957be9c58f9b3f47daa0c7ff1f
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp314-cp314-macosx_11_0_arm64.whl

Download URL normalize_uk-0.4.5-cp314-cp314-macosx_11_0_arm64.whl
Size 860.2 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8a66814f0c7be52989264618fe7c778c986d8507204fa4ae2a77c86c6a961e3d
BLAKE2b-256 checksum
How to use checksums
5d7923ac1ed791a92d5d5cd05552a7071f97bcf8a0a4f24d64e0d9c2669dfdf1
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp313-cp313-win_amd64.whl

Download URL normalize_uk-0.4.5-cp313-cp313-win_amd64.whl
Size 1.2 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
a8e3b341738ecb378d2a3c324964ee9e9034654434e755f4f483980f69b2b2e9
BLAKE2b-256 checksum
How to use checksums
d8e6011ee6e9c6c46fc289a5d551317c97ec482b02a8344ec23cfd0acd9eb0c3
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL normalize_uk-0.4.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
231009fb2318f65645730126653b941140f2351125cc65b6062162793bd4e24d
BLAKE2b-256 checksum
How to use checksums
8ce97102d07282490deb6f93ba8f71346de3025a58c64a4c79e12aad0ea91d15
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp313-cp313-macosx_11_0_arm64.whl

Download URL normalize_uk-0.4.5-cp313-cp313-macosx_11_0_arm64.whl
Size 860.0 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4bfaa38068895f3047c1feeac9ebd39e85c7da7dcdef5785c977b7b879fe63d3
BLAKE2b-256 checksum
How to use checksums
8be2b050939140595af5e36add69535e12b15ebe743151ea29331791099c56e3
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp312-cp312-win_amd64.whl

Download URL normalize_uk-0.4.5-cp312-cp312-win_amd64.whl
Size 1.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
c9cd57747639915c68b8e91923d7ead3302b826a8e39d31b6aa412c377f29518
BLAKE2b-256 checksum
How to use checksums
040c9788aac1edd083b04de878110bbabd6d2d990c81567d0b70b719237d163f
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL normalize_uk-0.4.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
bc9fc73f8775518723d213c5ebc98a8b72105ae60631d4f968d4c91c04c11719
BLAKE2b-256 checksum
How to use checksums
7a50d587d09581ce1f858cc4a05c3353ce0b500d53155ad963a4c4f029e72eeb
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp312-cp312-macosx_11_0_arm64.whl

Download URL normalize_uk-0.4.5-cp312-cp312-macosx_11_0_arm64.whl
Size 859.9 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
367fd86ecdea5d5b6e9f576c5eacf57a3161df2749cb8da109c2c0c713a4e5cd
BLAKE2b-256 checksum
How to use checksums
1e7efeb21d3a2eab84bc79038dacde3d24941288ae1b882da8ea30b8fc6dcae9
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp311-cp311-win_amd64.whl

Download URL normalize_uk-0.4.5-cp311-cp311-win_amd64.whl
Size 1.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
4aa030748861ede425f029cf68a0ca064dba1017ef67fd0cc17b58a590bb08a2
BLAKE2b-256 checksum
How to use checksums
a49d54227b06b1a160e676f4b724ed195ba3fe2393b9d9bdc59afb2466719365
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL normalize_uk-0.4.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d0cb6208f90a60328aa4e7774bff6477549eddfecad6c180d19999fea7b7ef9c
BLAKE2b-256 checksum
How to use checksums
a9463d60c2a65d2b0e1b5713ec14d121e795ad7618c0df820eabc565345beec6
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp311-cp311-macosx_11_0_arm64.whl

Download URL normalize_uk-0.4.5-cp311-cp311-macosx_11_0_arm64.whl
Size 858.4 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bac205e0aa2c3cecfb5f663d50f9f3ceb72b3895243f6ab2e2f97c9e21c9f8ab
BLAKE2b-256 checksum
How to use checksums
a7afa33e770359548d004f3e86b70d314e51f1ef615ce5332ec403b7dc5d1253
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp310-cp310-win_amd64.whl

Download URL normalize_uk-0.4.5-cp310-cp310-win_amd64.whl
Size 1.2 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
efb19b1574eb4f13c72e13a289292e6fb0b13bd30b496a3718392cc144d450bf
BLAKE2b-256 checksum
How to use checksums
5dbe6f3dd6f9256e2f772213155211dcf431188163f2ef6f760083ee68b96dd3
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL normalize_uk-0.4.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d7851d529ed7b9032ae920cfb6ed8f4e278cdfedb2106a83656d81541b036df5
BLAKE2b-256 checksum
How to use checksums
b1f25282d6d93a4935f15bd44a81e9626e6ffcdd98e7139ebc485e01409c3408
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 Sep 15, 2026.

Transparency log

Release files / normalize_uk-0.4.5-cp310-cp310-macosx_11_0_arm64.whl

Download URL normalize_uk-0.4.5-cp310-cp310-macosx_11_0_arm64.whl
Size 856.3 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2f5d5bffa03e45bc37ab7c0677e20cd8dfc6013b5882eb21c4cfbcbd2edbc6a1
BLAKE2b-256 checksum
How to use checksums
f086130a68234df5832ea4cdc5fd9e5fb0502752f448ffa8086bee999a95cbd9
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 Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.7

18 release files

0.4.6

18 release files

This release

0.4.5 This release

18 release files

0.4.4

18 release files

0.4.2

18 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