normalize-uk-cpp
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.6) 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.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 18.6 MB
Release files / normalize_uk-0.4.6-cp315-cp315-win_amd64.whl
| Download URL | normalize_uk-0.4.6-cp315-cp315-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.15 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c8bc811408dd85bb2d3c5d76a59c4b1830be54487f29308e8ec791b5e6c1e2d5
|
|
BLAKE2b-256 checksum How to use checksums |
b7a3e851104539691c4ffa8a55d4ca94c114a9474d66df181c68c37e111e4b03
|
| 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 logRelease files / normalize_uk-0.4.6-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | normalize_uk-0.4.6-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 |
d8ad276697302e092c3c7841017fb6914d7ec84baeeeb1a55760dcb06a428a91
|
|
BLAKE2b-256 checksum How to use checksums |
73ce6ffa9fe26760edf08d08308dbbd1ef5b700de0278f9a55de9a0493c17375
|
| 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 logRelease files / normalize_uk-0.4.6-cp315-cp315-macosx_11_0_arm64.whl
| Download URL | normalize_uk-0.4.6-cp315-cp315-macosx_11_0_arm64.whl |
|---|---|
| Size | 860.4 kB |
| Tags | CPython 3.15 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
991928e80c3b46702ddc7e87d88ea7b161dcfde3ce6e7a1716ec4a5b6b724928
|
|
BLAKE2b-256 checksum How to use checksums |
91ab517a361645e39b3d3e24782fb8d730e8e16672c8ae7d91e72e590daf624a
|
| 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 logRelease files / normalize_uk-0.4.6-cp314-cp314-win_amd64.whl
| Download URL | normalize_uk-0.4.6-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0ee64ab287a9790652f4e2d560808f0f77109793c0c7892b4896275ac3e3e5b7
|
|
BLAKE2b-256 checksum How to use checksums |
8581e150ffee54abb61ea7b25e6b4067ef78c1a770f43e8041dd5f6132a216a5
|
| 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 logRelease files / normalize_uk-0.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | normalize_uk-0.4.6-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 |
8b21d022bd73e0f11a53e520789da989f3be91605bbf6e265148cbbd8d59ba6f
|
|
BLAKE2b-256 checksum How to use checksums |
fdd142c89015a71f1abc668efd914d2d4fed3694719c3a6ee0fb8eda23ab892f
|
| 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 logRelease files / normalize_uk-0.4.6-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | normalize_uk-0.4.6-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 860.4 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
aacde79767c28b1019549ebdb40e08ff73e6feadb5439db819544a5b458c9d9f
|
|
BLAKE2b-256 checksum How to use checksums |
f51aa2beab9ae6963e93d27b0a483635839e0f910780f5eb5c4d0360eccb20bd
|
| 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 logRelease files / normalize_uk-0.4.6-cp313-cp313-win_amd64.whl
| Download URL | normalize_uk-0.4.6-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5d0ff7264e298b0b13188218902c23c629a444b443ee8025e468a567ff617972
|
|
BLAKE2b-256 checksum How to use checksums |
4611983b2f9e54f719d6edf14637846bb8acccddfec06671487b2ffa2974f218
|
| 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 logRelease files / normalize_uk-0.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | normalize_uk-0.4.6-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 |
588f8310a1c9ade73beb045306b0600bfd194ceddb8ec8ac13d805a92edb4e63
|
|
BLAKE2b-256 checksum How to use checksums |
7489b0a7fa16820335fbd264fbe3d021cc7688b6c8c8a3e3625bbe6525d38ee4
|
| 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 logRelease files / normalize_uk-0.4.6-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | normalize_uk-0.4.6-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 860.2 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7c2870a046e44c013f36de4d0cb1438717e47c9c719cad6cff04b51cfcbc0b54
|
|
BLAKE2b-256 checksum How to use checksums |
cd7be424844cc4dd7f43835ff88b3679bb03450e013af5beb785f87811f8b88b
|
| 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 logRelease files / normalize_uk-0.4.6-cp312-cp312-win_amd64.whl
| Download URL | normalize_uk-0.4.6-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
db29d37fac22910a2c0ff4556ac2d397d9dd2eb9451b235d343612e6ad3eec91
|
|
BLAKE2b-256 checksum How to use checksums |
322dc2ef0a5e2ede3f8eeadd99f98e27cd6daf1685874dc1574fa511604cb135
|
| 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 logRelease files / normalize_uk-0.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | normalize_uk-0.4.6-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 |
a480f1155c2d4150363297e36bf3dac9c71dd5bd28da03d2841adacccf860154
|
|
BLAKE2b-256 checksum How to use checksums |
66c291149602dc8b7821a7c7361e96889868c8d00357aca35a8b32c63b287a4a
|
| 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 logRelease files / normalize_uk-0.4.6-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | normalize_uk-0.4.6-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 860.1 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5e50f80accd00d82c3f474e37d1d6f20d9856d0b01d6164e1d6f9adc0980c08c
|
|
BLAKE2b-256 checksum How to use checksums |
e76decc06806d6c73fae624134f9ea21183c28dc4389c61a5931e95fcc8d9d6c
|
| 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 logRelease files / normalize_uk-0.4.6-cp311-cp311-win_amd64.whl
| Download URL | normalize_uk-0.4.6-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e09035f21d03956486cb4d2997dbdf3b458742ade928ab23390323caa8c0e336
|
|
BLAKE2b-256 checksum How to use checksums |
7e9e8c00cea449c0d60c66e8d79c830a6b935cc27b7c51c2ecd12c6bbfa66dfd
|
| 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 logRelease files / normalize_uk-0.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | normalize_uk-0.4.6-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 |
bf88645972af8c2ff0b0abb16155dd015e504a7908406b97ddedd78f92ac98f1
|
|
BLAKE2b-256 checksum How to use checksums |
d8841a0bed6a0edc8eb1167961ab3731536071cd05add01e08e4f41be3446183
|
| 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 logRelease files / normalize_uk-0.4.6-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | normalize_uk-0.4.6-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 858.5 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2d7578cef7850f7da7b1d8897fa992659cb7dd44da62d5c2630eaabf8983eecf
|
|
BLAKE2b-256 checksum How to use checksums |
238772d376d59c27cbac71ba4e026c1d835cfd0fc5ce7b1946bffc280df5c68c
|
| 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 logRelease files / normalize_uk-0.4.6-cp310-cp310-win_amd64.whl
| Download URL | normalize_uk-0.4.6-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1e7c5c0725684e085c6008f1da554de7780a9b11381163fbba579be956a95bbd
|
|
BLAKE2b-256 checksum How to use checksums |
400126f7ab30e95fe4846e2591193ad327e40fda70d2b584d324cf7f556e12bf
|
| 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 logRelease files / normalize_uk-0.4.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | normalize_uk-0.4.6-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 |
4fb0ea164cde22eb504b3023ea38d80cd561242b3a4b5b7beaa06cd54b17bac4
|
|
BLAKE2b-256 checksum How to use checksums |
a7fd497f9922e4daaed68dbb756fdbedc724e939ccb5d2ff3d9afe3e395ab6b8
|
| 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 logRelease files / normalize_uk-0.4.6-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | normalize_uk-0.4.6-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 856.5 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4af10067d84777c0d4f7182891a5b47a505309e4dc7c5c5f596529b261c83629
|
|
BLAKE2b-256 checksum How to use checksums |
05c102dd3aef8ec42dff77e417c8680d36a242b65495be2a94360cc826d8d49b
|
| 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