Skip to main content

Damga — Text Normalization (TN) & Inverse Text Normalization (ITN)

Türkçe README

Damga (damga on PyPI) is an open-source, offline, deterministic text-normalization engine built on weighted finite-state transducers, with Turkish as the default language (languages). It turns what a speech recognizer hears into what people write (ITN), and what a language model or a database writes into what a TTS voice should say (TN):

Direction Input Output
ITN (spoken → written) yirmi beş bin altı yüz 25.600
ITN yüz elli türk lirası 150 TL
ITN saat dokuz otuzda saat 09:30'da
ITN sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi 0532 123 45 67
ITN derya nokta öztürk et gmail nokta com derya.ozturk@gmail.com
ITN otuz dört a b c sekiz yüz kırk iki 34 ABC 842
TN (written → spoken) 25.600 yirmi beş bin altı yüz
TN 2,50 TL iki lira elli kuruş
TN 15.10.2026 saat 09:30 on beş ekim iki bin yirmi altı saat dokuz otuz

Why a grammar engine and not a model:

  • Deterministic. The same input always gives the same output; every behaviour is a line in a golden file you can read and change.
  • Safe on sensitive entities. Phone numbers, IBANs and plates are never padded or "repaired": if the digit count is wrong the words stay words.
  • Fast and small. Sub-millisecond per utterance on one CPU core, no GPU, no network, no LLM; the wheel installs with zero dependencies.
  • Built for real recognizers. The grammars accept the mixed forms ASR systems actually emit: written digits inside spoken numbers, punctuation in the middle of a phone number, glued separators, mis-heard e-mail domains.
  • Two directions, one set of grammars. TN number writing is the exact inverse of the ITN cardinal grammar, so the two directions can never disagree.

Install

pip install damga                 # Linux, macOS, Windows — no other dependency
pip install "damga[build]"        # + pynini, only for writing or changing grammars

The wheel contains the precompiled grammars of all seven languages and a small native runtime (damga._fstrt, OpenFst statically linked), so nothing is compiled on the user's machine and pynini is not needed at run time. Grammar authors install the build extra (pynini has Linux wheels on PyPI; on macOS use conda install -c conda-forge pynini) and run python -m damga.build after editing a grammar. With pynini present, backend="pynini" (or DAMGA_BACKEND=pynini) runs the grammars live; custom category selections automatically use it.

Quick start: your microphone, on your machine

The fastest way to see Damga work is live speech. Mihu Turkish STT runs on your CPU (no GPU, no cloud, no API key), Damga turns what it hears into written text while you speak:

git clone https://github.com/mihu-ai/damga && cd damga
pip install damga turkish-stt sounddevice     # Linux: sudo apt install libportaudio2 first
python examples/mic_streaming.py              # --list shows input devices, --device N picks one

Say "telefon numaram sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi":

 … telefon numaram 0 5 32 123
[01] STT : telefon numaram sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi
     ITN : telefon numaram 0532 123 45 67

The line updates while you talk; when you pause the final line is printed. The recognizer model (about 70 MB) downloads once on the first run. On macOS allow microphone access for your terminal (System Settings → Privacy & Security → Microphone). More engines (Mihu STT cloud, ElevenLabs, Whisper, Ollama): examples/.

Usage

from damga import InverseNormalizer, TextNormalizer, Normalizer

itn = InverseNormalizer()
itn.normalize("yüz elli lira")                    # '150 TL'
itn.normalize_batch(["on beş ekim", "yüzde on"])  # ['15 Ekim', '%10']

tn = TextNormalizer()
tn.normalize("Toplam 25.600 adet, %12,5 indirim.")
# 'Toplam yirmi beş bin altı yüz adet, yüzde on iki virgül beş indirim.'

Normalizer(mode="itn").normalize("yirmi beş bin")   # '25.000'

Options (all keyword arguments, all optional):

option meaning
categories=[...] enable a subset of cardinal ordinal decimal money percent measure time date telephone iban plate email address spelling lexicon_entry (needs pynini)
strict=True conservative ITN: bare numbers stay words, only keyword/structure-driven classes fire (needs pynini)
custom_vocab={"e te es tur": "ETS Tur"} your own spoken → written terms (take precedence)
cache_dir=... / use_cache=False where compiled grammars (FAR) are stored (default ~/.cache/damga, override with DAMGA_CACHE_DIR)
group_thousands=False write 25600 instead of 25.600
group_four_digits=False ITN: no thousands dot in four-digit numbers (2024 seçimleri, 1500 kişi); five digits and more keep it (needs pynini)
scale_words=True ITN: round millions and up keep their scale word (beş milyon → 5 milyon, elli altı milyar → 56 milyar) instead of 5.000.000 (needs pynini)
preserve_case=False lower-case everything instead of keeping the recognizer's casing on untouched words
diagnostics=True normalize_with_details() keeps the intermediate record
repair_spelling=True restore diacritic-less (yuz elli) and glued (onbeş) number words before the grammars run; False feeds the text as is
backend="auto" | "native" | "pynini" runtime selection (see below)
variants=True TN only: normalize_variants() also lists the other ways a form is read (see below)

Writing-style options for the other languages (off by default; plain post-processing, so they work without pynini):

language / mode option effect
en ITN unit_symbols=True units after a number as symbols: two hundred kilometers per hour → 200 km/h, twenty five square meters → 25 m², minus five degrees celsius → -5 °C
es TN formal_ordinals=True ordinals 11–100 as ordinal words instead of the cardinal: el 80.º aniversario → el octogésimo aniversario, la 11.ª edición → la undécima edición
ru ITN ordinal_digits=True ordinals 1–9 as digits with the short ending: восьмого → 8-го, на пятом этаже → на 5-м этаже (10 and up are digits already)
de ITN fraction_digits=True fractions with a slash: drei viertel → 3/4, zweieinhalb Stunden → 2 1/2 Stunden; die Hälfte, ein Viertel der Stadt stay words
from damga import InverseNormalizer
InverseNormalizer(lang="en", unit_symbols=True).normalize("two hundred kilometers per hour")   # "200 km/h"

One reading (default) or variants

By default Damga gives one reading: one written form, one spoken form, every time. That is what a voice agent needs, and normalize() always works this way: about 1 ms per sentence on one CPU core, the same reading in every call. Choosing a reading with a language model would add 0.3–2 s per sentence before the TTS starts, so for voice AI keep the default.

Some forms are read in more than one way by Turkish speakers (09:30 is dokuz otuz or dokuz buçuk). With variants=True, TN also lists those readings, default first. Use it to prepare TTS or ASR training text that matches what a speaker actually said:

tn = TextNormalizer(variants=True)
tn.normalize("Saat 09:30'da")             # 'Saat dokuz otuzda'  (unchanged)
tn.normalize_variants("Saat 09:30'da")    # ['Saat dokuz otuzda', 'Saat dokuz buçukta']
tn.normalize_variants("2,50 TL")          # ['iki lira elli kuruş', 'iki Türk lirası elli kuruş', 'iki buçuk lira']
tn.normalize_matching("Saat 09:30'da", heard="saat dokuz buçukta")   # 'Saat dokuz buçukta'

ITN has no variants: a phone number or an amount has one written form, and guessing between several is exactly what ITN must not do. In 1.0 the option was called deterministic (deterministic=False); the old name still works with a DeprecationWarning. Details: docs/variants.md.

Streaming ITN for live ASR

from damga.streaming import StreamingNormalizer

sn = StreamingNormalizer(mode="itn")
sn.update("yirmi beş", is_final=False).text              # '25'        (provisional)
sn.update("yirmi beş bin", is_final=False).text          # '25.000'    (still provisional — nothing committed)
sn.update("yirmi beş bin altı yüz", is_final=True).text  # '25.600'    (final, state reset)

update() always receives the latest full hypothesis of the current utterance. A prefix is committed only when it has been stable for stable_after updates and does not end inside a span a grammar could still extend, so a number is never frozen too early. The final result is always the batch normalization of the whole utterance. See docs/streaming.md.

How it works: a token-based, two-pass WFST pipeline

Damga is a token-based normalizer. Normalization is not one big spoken → written rewrite; it is two transducers with a structured, inspectable token string in between:

"toplam yirmi beş bin altı yüz lira kırk kuruş ödedim"
        │
        │  pass 1 — reader FST (union of all readers, weighted)
        ▼
word="toplam" money(integer="25600" fractional="40" currency="TL") word="ödedim"
        │
        │  pass 2 — writer FST (union of all writers)
        ▼
"toplam 25.600,40 TL ödedim"
  • Pass 1, reading. Every semantic class (cardinal, money, time, telephone, email, …) is a small grammar that maps a spoken span to a token class(field="value" …). Words no class claims fall through to word="…". The sentence reader is the weighted union of all class readers; the best analysis is the shortest path through the lattice. A semantic class costs about 1, the word fallback costs 100 per token, so any grammar that matches beats leaving the words alone, and among grammars the more specific one wins (iban < email < telephone < money < cardinal).
  • Pass 2, writing. Each class has a writer that renders its token: money puts the currency symbol after the amount, time zero-pads and re-attaches the case suffix (saat 09:30'da), telephone groups digits the Turkish way. Fields are emitted in a fixed order by the reader, so there is no Python re-ordering stage between the two passes: the whole pipeline is two compositions and two shortest-path searches.

Why token-based rather than a single "tokenless" transducer that rewrites text directly?

token-based (Damga) single-pass rewrite
adding a class one reader + one writer, independent of the others every new rule interacts with every existing rule in one grammar
precedence one weight per class, in one table encoded implicitly in rule order and context
debugging diagnostics=True shows the record, so you see what was recognised before how it was written only input and output
TN ↔ ITN the same token protocol in both directions; TN number writers are the inverse of the ITN cardinal grammar two unrelated grammars
formatting changes change a writer, readers untouched (100 $ vs $100, 25600 vs 25.600) touch the recognition rules
cost two compositions per utterance one

The second composition is cheap (the writer has a few hundred states), so the token layer costs well under a millisecond and buys composability, a readable intermediate form and golden tests at the tag level. The numbers grammar is the foundation: fixed-width, zero-padded sub-graphs (two digits, three digits, thousands, millions …) composed with a leading-zero stripper, reused by every class that contains a number. Ambiguity is resolved with path weights, not code: a non-standard bir yüz carries a penalty, a telephone group ending on a round word (otuz, iki yüz) is penalised so beş yüz otuz iki yüz yirmi üç is read 532 | 123. Details in docs/architecture.md.

Runtime

Grammars are written in Pynini and compiled once into two OpenFst files per language and direction (damga/<lang>/<mode>/compiled/). At run time the native extension damga._fstrt (OpenFst statically linked, ~2 MB) loads them and runs input chain ∘ FST → shortest path in C++; the GIL is released during the search. With pynini installed you can also run the grammars live (backend="pynini"), which is what grammar authors and custom category selections use. Both backends execute the same transducers and are tested to give identical output.

Using Damga with speech recognizers and language models

Damga sits between the recognizer and whatever consumes the text, and between the text generator and the TTS voice:

microphone → ASR (Mihu STT, Whisper, …) → Damga ITN → written text → LLM / CRM / display
LLM (Ollama, …) / database → written text → Damga TN → spoken text → TTS

Mihu Turkish STT

turkish-stt is a real-time, CPU-only Turkish recognizer with turn-end detection. It writes numbers as words; Damga turns them into their written form. Damga does not depend on it:

import mihu_stt                                # pip install turkish-stt (on-prem, CPU)
from damga import InverseNormalizer
from damga.streaming import StreamingNormalizer

itn = InverseNormalizer()
print(itn.normalize(mihu_stt.transcribe("audio.wav")))   # "… sıfır beş otuz iki …" → "… 0532 …"

stt, sn = mihu_stt.StreamingSTT(), StreamingNormalizer(mode="itn")
for pcm16_chunk in audio_frames():             # 16 kHz int16 bytes, as they arrive
    text, is_final = stt.accept_pcm16(pcm16_chunk, 16000)
    if text.strip():
        res = sn.update(text, is_final=is_final)
        show(res.text)                         # best current rendering, tail may still change
        if is_final:                           # recognizer detected end of turn
            handle(res.text)                   # == itn.normalize(text)

The same recognizer is available as a cloud API; its transcripts go through itn.normalize the same way. examples/mihu_stt_onprem.py, examples/mihu_stt_cloud.py and examples/elevenlabs_stt_tts.py (ElevenLabs STT + TTS) are complete scripts; docs/voice-pipeline.md walks through a live call and a batch transcription step by step.

Whisper, Ollama and other pipelines

docs/integrations.md and the examples/ folder show how to put Damga behind Whisper / faster-whisper (batch and segment-wise ITN, and why Whisper's mixed 40 bir output needs it), in front of a TTS voice fed by Ollama or any other LLM (sentence-wise TN on the streamed reply), and inside a generic streaming recognizer loop (Vosk, sherpa-onnx, cloud ASR partials). The core rule for any streaming source: send Damga the recognizer's latest full hypothesis, never a delta.

Using Damga for NLP and data work

Damga is not only for voice products. Anything that reads spoken or transcribed Turkish (or English, German, …) gets numbers, dates, amounts and identifiers in one written form, the form NER models, regular expressions, databases and language models handle best:

from damga import InverseNormalizer, TextNormalizer
itn = InverseNormalizer()

itn.normalize("müşteri yirmi beş bin lira iade istiyor")
# müşteri 25.000 TL iade istiyor
itn.normalize("on dört haziranda saat dokuz buçukta arayın, numaram sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi")
# 14 Haziran'da saat 09:30'ta arayın, numaram 0532 123 45 67
itn.normalize("plakam otuz dört a b c yüz yirmi üç, e posta adresim ali nokta yılmaz et gmail nokta com")
# plakam 34 ABC 123, e posta adresim ali.yilmaz@gmail.com
  • Call-centre and meeting analytics: amounts become numbers you can sum and filter (complaints above 5.000 TL), dates and times become comparable.
  • Information extraction: phone numbers, IBANs, plates, e-mail addresses, dates and amounts come out in the shape your NER model or regex expects.
  • Search: a call in which on dört haziran was said is found by 14 Haziran.
  • Language model input: consistent written numbers, fewer tokens, better arithmetic.
  • Fair ASR evaluation: normalize both the reference and the hypothesis, so yirmi beş kişi against 25 kişi is not counted as two errors.
  • TTS and ASR training data: normalize_matching writes each sentence the way it was actually said in its recording:
tn = TextNormalizer(variants=True)
tn.normalize_matching("Saat 09:30'da 250 TL ödendi.", "saat dokuz buçukta iki yüz elli lira ödendi")
# Saat dokuz buçukta iki yüz elli lira ödendi.

Damga normalizes forms that are written differently from how they are said (numbers, dates, times, money, measures, phone numbers, IBANs, plates, e-mail and web addresses). It is not a general text cleaner: slang, spelling errors and stemming are left to tools such as Zemberek, which work well next to it.

What is covered

ITN: cardinals (with a glued case suffix: yirmi altıda → 26'da), ordinals, negatives, decimals, money (TL/$/€/£ + kuruş/sent), percent/permille, measurements (km, kg, lt, m², °, MB …), clock times (saat dokuz otuz, dokuzu çeyrek geçe, dokuza on kala, case suffixes), dates (on beş ekim iki bin yirmi altı, ekimde, yılında, iki bin yirmi altıda → 2026'da), Turkish phone numbers (any grouping, +90), IBAN, vehicle plates (letters, letter names or the phonetic alphabet), e-mail and web addresses, street addresses (numara on iki daire yedi → No: 12 Daire: 7), the Turkish letter-coding habit (Diyarbakır'ın D'si Edirne'nin E'si … → De…), abbreviations and brands, custom vocabulary. TN covers the same classes in the written → spoken direction, including apostrophe suffixes (2026'da, 25'te, 3'üncüsü).

Known limitations are listed in docs/grammars.md (for example: a lone bir is treated as the article, bare four-digit numbers are not read as years, inflected ordinals such as üçüncüsü are not converted by ITN).

Brands, domains and custom terms

Three data layers, all plain TSV under damga/tr/itn/data/ (see its README for sources and licences):

  • brands.tsv — hand-written brand/product names with official casing and Turkish mis-hearings (vatsap → WhatsApp, peypal → PayPal, a ve es → AWS);
  • brands_extra.tsv — ~700 well-known businesses, brands and Turkish institutions, common Turkish words filtered out;
  • domains.tsv + email_providers.tsv — mis-heard mail domains (cimil → gmail, yahu → yahoo) and ~7 800 free-mail provider labels from free-email-domains (MIT), used to recover a dropped "et" before a known provider. Spellings outside the table (giymiel for gmail) are left as heard: that is a recognizer error, and the fix is contextual biasing (hotwords) in the recognizer with these same lists, not guessing in the normalizer.

Your own terms go in custom_vocab={...} (they win over every table). None of this requires retraining the recognizer; for recognizer-level coverage use contextual biasing (hotwords) with the same lists.

Real recognizer output

Recognizers do not emit clean spoken forms. Mihu STT, for example, produces Sabit hattımız sıfır 5, 3-74, bir dokuz, sekiz yedi bir sekiz or Burak Nokta Koçet örnek banka nokta kom nokta Tier. The ITN grammars therefore accept written digits inside spoken sequences, punctuation inside numbers, glued separators (koçet, noktaçelik, etörnek), mis-heard TLDs (kom, tier, ay) and a table of mis-heard domains (damga/tr/itn/data/domains.tsv).

Measured on 575 real Mihu-STT transcripts of synthetic phone/e-mail prompts (tests/golden/itn_asr.tsv holds 84 of them): telephone numbers 256/256 exact, e-mail addresses 274/319 exact (the rest are recognizer errors such as a dropped "et" or an unrecognisable domain — Damga leaves those as words rather than guessing). On the held-out KPI set (300 phone + 300 e-mail clips, 8 unseen voices, Mihu STT v1.2 with hotwords) exact-match is 84% for phone numbers and 97% for e-mail addresses; the misses are digits dropped by the recognizer, not normalization errors.

End-to-end (TTS → Mihu STT v1.2 → Damga) on 1 200 synthetic sentences spoken by 8 unseen voices: money 100%, percent 100%, dates 100%, times 100%, brands 97%, e-mail 92%, phone numbers 83%, addresses 63%, letter-by-letter spelling 52% — overall 79.0% exact (the previous regex normalizer: 52%, with 0% on money, addresses and spelling). Vehicle plates on a separate 100-clip set: 74%. Of the misses, 86% are recognizer errors (dropped digits, mis-heard letter names); the rest are normalization gaps tracked in tests/golden/itn_asr.tsv.

Safety on ordinary speech is tested the other way round: plain Turkish sentences pass through with no change other than number, ordinal, date, money and unit conversions — the phone, e-mail, plate and spelling grammars never fire on plain text, untouched words keep their casing, and normalize(normalize(x)) == normalize(x). The recognizer frequently emits written numbers ("99 lira", "saat 13.30", "40 bir" = 41); the context grammars accept those mixed forms, bare numbers are left untouched so identifiers are never regrouped.

Tests and benchmarks

pytest                          # unit + golden (TSV) + property + integration tests
python benchmarks/latency.py    # quick per-sentence latency on the shipped runtime (no pynini)
python benchmarks/bench.py --out benchmarks/results/my-machine.md   # full report, needs pynini

Golden sets live in tests/golden/*.tsv (input<TAB>expected); adding a case is a one-line change. Measured numbers are in benchmarks/results/; on a 2026 MacBook running Python under Rosetta (x86_64 conda build, single thread): ITN compile 6.4 s once / cached load 26 ms (5.3 MB FAR), p50 latency 1.1 ms (short utterance), 4.9 ms (two sentences with phone + e-mail), 86 ms (200 words); TN p50 2.2 ms; streaming update p50 1.2 ms; ≈490 MB RSS after a cold compile (less when loaded from the cache). Native arm64 or Linux builds are faster.

Languages

Turkish (tr) is the default language. Grammars live under damga/<lang>/{itn,tn}/; the engine, cache, streaming wrapper and API are language-independent. A new language is a new folder plus one registry line (damga/api.py), after which Normalizer(mode="itn", lang="en"), InverseNormalizer(lang="en") and available_languages() work — see docs/adding-a-language.md.

This release includes Turkish (tr), English (en), German (de), French (fr), Spanish (es), Italian (it) and Russian (ru), TN and ITN for each:

from damga import TextNormalizer, InverseNormalizer
TextNormalizer(lang="en").normalize("EUR 10 million on 6 December 2012")
# ten million euros on the sixth of December two thousand twelve
InverseNormalizer(lang="de").normalize("fünfundzwanzig Prozent")   # 25 Prozent

Readings follow what speakers actually say. The test lines of the languages other than Turkish still need review by native speakers.

Contributing

Grammars are plain Python files under damga/tr/itn/readers, damga/tr/itn/writers, damga/tr/tn/...; data tables are TSV files under .../data/. Failing golden lines are the best bug reports. See CONTRIBUTING.md and docs/architecture.md.

License

Apache License 2.0 — see LICENSE. Pynini and OpenFst are Apache 2.0 as well.

Metadata

Release files for damga 1.0.2

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

Source distribution (sdist)

Source distribution for damga 1.0.2
File Size Uploaded Provenance
damga-1.0.2.tar.gz 18.1 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for damga 1.0.2
File
damga-1.0.2-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
damga-1.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
damga-1.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
damga-1.0.2-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
damga-1.0.2-cp313-cp313-macosx_10_15_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.15+ x86-64 Details
damga-1.0.2-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
damga-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
damga-1.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
damga-1.0.2-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
damga-1.0.2-cp312-cp312-macosx_10_15_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.15+ x86-64 Details
damga-1.0.2-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
damga-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
damga-1.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
damga-1.0.2-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
damga-1.0.2-cp311-cp311-macosx_10_15_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.15+ x86-64 Details
damga-1.0.2-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
damga-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
damga-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
damga-1.0.2-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
damga-1.0.2-cp310-cp310-macosx_10_15_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.15+ x86-64 Details
damga-1.0.2-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
damga-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
damga-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
damga-1.0.2-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
damga-1.0.2-cp39-cp39-macosx_10_15_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.15+ x86-64 Details

Total release size: 483.3 MB

Release files / damga-1.0.2.tar.gz

Download URL damga-1.0.2.tar.gz
Size 18.1 MB
Tags Source
SHA-256 checksum
How to use checksums
a4599e33d5388d3d9d1a1793c34a206781007fc6d0ba344b337ba9bd024415c5
BLAKE2b-256 checksum
How to use checksums
a317b8c711becd57f807605c2bc2154f67d91df1f0350937ce5103153ec49373
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp313-cp313-win_amd64.whl

Download URL damga-1.0.2-cp313-cp313-win_amd64.whl
Size 18.5 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
5cfd864b6f3a5333d0aaed7f33c23a251899249ddc7afeea413ddcc4af16c5b4
BLAKE2b-256 checksum
How to use checksums
61e1cde48c4dbbdfc9eb5c8d7b0159ccaa8473828fd061d5c01da4cea31a7480
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.7 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f9418dd0603dd982526325ec346a70b466c58e8852a37da74549ab2db95605e3
BLAKE2b-256 checksum
How to use checksums
583c8dcc514af5850888cd70807effa4f8cee7a5db20babd22d4051e2d826aae
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.7 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
3cea973f56e3e76fb18ff9851059e17781efa5a0fdc95fe0d21b831e24aa4ad3
BLAKE2b-256 checksum
How to use checksums
037f306fb45d77bb4f40ae91265bee260ea5d5133282fa830eee0d326c232ec6
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp313-cp313-macosx_11_0_arm64.whl

Download URL damga-1.0.2-cp313-cp313-macosx_11_0_arm64.whl
Size 18.6 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
dca907a76f7f64e3839155a16eb5e44d448abb6debd4e4ac73dbe794994e4601
BLAKE2b-256 checksum
How to use checksums
1360809a87a0c80d62ba6babdf9a9a93daddb3dd42e71ed56068ed35a3f1fddb
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp313-cp313-macosx_10_15_x86_64.whl

Download URL damga-1.0.2-cp313-cp313-macosx_10_15_x86_64.whl
Size 18.6 MB
Tags CPython 3.13 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
58d1441960d25c4f84a1306b76cfa3c34b63b8384ea75e67d21c673f903543df
BLAKE2b-256 checksum
How to use checksums
3ab49033ab3a6b9e423a704ce736fd10386f87fabc0f17559d90437627d9fddc
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp312-cp312-win_amd64.whl

Download URL damga-1.0.2-cp312-cp312-win_amd64.whl
Size 18.5 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
21859784a227651784f402835f0e639f7d9ef3670c09e9c861780f5f2557ece8
BLAKE2b-256 checksum
How to use checksums
120a702b8d79d8f9954c6f0eb8d10bfdc4d9c817061e5f78ca0aeaee8516c0ff
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.7 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4f80ec2f42d52283c84e9cf2e26839a2ed76a2e2c59667fe526b86104efb3ef4
BLAKE2b-256 checksum
How to use checksums
43be909d2b8c7d38027646dd0f294d29ea280fe22c22e80e73d2afb81813395a
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.7 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
890722c72b92ee2f9279377480ce2fc9714f837916182a3ce61480718a0ac41a
BLAKE2b-256 checksum
How to use checksums
ba056e0683cd00327dc7380686295ede0b8c5529c79660417c3dc0591f071d4d
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp312-cp312-macosx_11_0_arm64.whl

Download URL damga-1.0.2-cp312-cp312-macosx_11_0_arm64.whl
Size 18.6 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
83281dbbf59e34210b705b5340c6f8d11a1d497681d40884dc277bee29369bb4
BLAKE2b-256 checksum
How to use checksums
51d561437196e1ac043f32acf919841c6c9c790e55135615430a41e0a189c981
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp312-cp312-macosx_10_15_x86_64.whl

Download URL damga-1.0.2-cp312-cp312-macosx_10_15_x86_64.whl
Size 18.6 MB
Tags CPython 3.12 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
015da37ebd91da78134e8aa6d426ef1bc58de800a7dea943b596a7cee38d847e
BLAKE2b-256 checksum
How to use checksums
55614aec62eb9d0ad61671f4673b3b4bf1761bf50e33d5a0ab062d8735088578
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp311-cp311-win_amd64.whl

Download URL damga-1.0.2-cp311-cp311-win_amd64.whl
Size 18.5 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
ee4487c686d9ce4cae27d9332c7079d1ff0a47977f42d0af5dd92885dc2788fe
BLAKE2b-256 checksum
How to use checksums
5f1e1bfd4986042082ec7182cabfa34da80e35188a5d7d1d5a877a5d20062c22
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.7 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
c0cf2332048d315d82779eff5e113ccb62c69308d5c48e2a321b8f1ae217b03a
BLAKE2b-256 checksum
How to use checksums
07918536d140ffd557b9aa0342590613e5e059013171f4abef026b69c8fcdc99
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.7 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
3b6430fb2ab74f5203535d99e531ae80e2c02bf23a845425c54534ee98b43cfb
BLAKE2b-256 checksum
How to use checksums
e74a722d4dbcc705b29b60c05dad31a8b3f7837091a79d5d27fa6c0bb13f5ed6
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp311-cp311-macosx_11_0_arm64.whl

Download URL damga-1.0.2-cp311-cp311-macosx_11_0_arm64.whl
Size 18.6 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6fda8a6910139627e3c5680645d611d9dac9f7cb014c633895592301a301828b
BLAKE2b-256 checksum
How to use checksums
ca3056ca1fb2aefdfb912aaffb50403d166cdc4d046412ce735618c36fa62f7e
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp311-cp311-macosx_10_15_x86_64.whl

Download URL damga-1.0.2-cp311-cp311-macosx_10_15_x86_64.whl
Size 18.6 MB
Tags CPython 3.11 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
bc2782717f4200dd466c330d99889c93139add6dd855936e70cc8503efb8d242
BLAKE2b-256 checksum
How to use checksums
0b45cc49872b17d8e69afc92ca2a9a5565a9a5aa0e830e6f9be8b967f1ff4bb2
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp310-cp310-win_amd64.whl

Download URL damga-1.0.2-cp310-cp310-win_amd64.whl
Size 18.5 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
5293012517c547b6d7bfea0436a7dd2dd65e17a60f6bfc61fb63ed9b4ce70b7e
BLAKE2b-256 checksum
How to use checksums
4ee04c97d41969aa4493eba352041b3562a1d02bab325184c9db7804e4b9b46d
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.7 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
55e6ff4b655467c13f1b00df35e2af9bfce2598dac91e8827b66a28cb6275599
BLAKE2b-256 checksum
How to use checksums
104a056914c2451dd5423544a266b777633d2599e70cc4b6d60effdc88af78bb
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.7 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
2376a34759b29bcc9635d791a8ddbdd08ddc663153b6ded674b1123309f3e881
BLAKE2b-256 checksum
How to use checksums
4749c0d93e32b334049ed119a58b7ccff46b706b814ec99f0b6da6507d733539
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp310-cp310-macosx_11_0_arm64.whl

Download URL damga-1.0.2-cp310-cp310-macosx_11_0_arm64.whl
Size 18.5 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
84cc48a13c30e08ca33d6c1f268cea2645f7b699583664cce832e08603e29256
BLAKE2b-256 checksum
How to use checksums
f398a55e1cf61846c5f4f998889bd8817119da2412ce85fb1312d294950894b0
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp310-cp310-macosx_10_15_x86_64.whl

Download URL damga-1.0.2-cp310-cp310-macosx_10_15_x86_64.whl
Size 18.6 MB
Tags CPython 3.10 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
8ffd267d198d47c27db694181331b24988f45243c1fa832d9b644365b4838b24
BLAKE2b-256 checksum
How to use checksums
e2dff23ccd45d8e347149911fa6587f65ba930bda2b1ca4d5bad6f17441776e5
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp39-cp39-win_amd64.whl

Download URL damga-1.0.2-cp39-cp39-win_amd64.whl
Size 18.5 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
f0fcbd10225c35a7208ce8bbe4831dd24ed545fa2095b61cd010e9797e803633
BLAKE2b-256 checksum
How to use checksums
d22199c141cdf16e03ef205524d681df32babe127c36e5dda05d503cae95eaed
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.7 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
b330a5dd794b0d980b50469377783c52cdb135e69a758c4b9f0f4a2eb27ca7fa
BLAKE2b-256 checksum
How to use checksums
546de1d5762d283972897b27b2b253f0b59e57d2234b489679632fd1b364a309
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.7 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
115154cb061e5160171fbb4bcf48236f576ae20e0c449b3b9caa88f751e9326c
BLAKE2b-256 checksum
How to use checksums
7004eba2c2afa928eadde37d70830b6b9c0fece81e6ddbd1b89d5f470a2a1c34
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp39-cp39-macosx_11_0_arm64.whl

Download URL damga-1.0.2-cp39-cp39-macosx_11_0_arm64.whl
Size 18.5 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f56d4a948874a5e27ae0530ef0d840e2216298d17d979f85f344e5f136d3f2bd
BLAKE2b-256 checksum
How to use checksums
accf0f13cd86b4a88e46ea4cab36dcba6dd61c29fe6cba7fda93862fa6f4269c
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 17, 2026.

Transparency log

Release files / damga-1.0.2-cp39-cp39-macosx_10_15_x86_64.whl

Download URL damga-1.0.2-cp39-cp39-macosx_10_15_x86_64.whl
Size 18.6 MB
Tags CPython 3.9 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
117c6d241ad3b4ac54b9d48c6823e91977e6b5783d2c33f9377a3ae6aff3172c
BLAKE2b-256 checksum
How to use checksums
708cb46fa94e193d6aa9f000a222b161aa7556f6f2ace2b3a23395bb5fffbc9c
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 17, 2026.

Transparency log

Security for damga 1.0.2

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.

Full provenance

All 26 files in this release have been uploaded with provenance metadata.

Select from 26 files

Attestation for damga-1.0.2.tar.gz

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 17, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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