jpnorm
日本語テキストの「表記ゆれ」を、用途に合わせて 1 行で吸収するライブラリ。 Rust 製コアを Python から使います。neologdn の置き換えから、検索前処理、LLM 出力の評価、 名寄せまで、プリセットを選ぶだけで始められ、必要ならフラグ単位で細かく調整できます。
Fast, configurable Japanese text normalization. Rust core with Python bindings.
Pick a preset (neologdn_compat, for_search, for_compare, for_display) or tune 37 flags;
unifies old/variant kanji (國→国, 髙→高), katakana loanword spellings (ヴァ→バ, trailing ー),
iteration marks (人々→人人), era years (令和6年→2024年); protects URLs / emails / mentions,
handles emoji, converts kanji numerals, applies custom synonym dictionaries.
3 to 5 times faster than neologdn.
import jpnorm
jpnorm.normalize("ハンカクカナ と 全角 !!")
# => 'ハンカクカナ と 全角 !!'
ブラウザで試す → https://yoshitakaoyama.github.io/jpnorm/ (テキストを貼ると全プリセットの結果が並びます)
こんなときに使います
日本語には「同じ意味なのに文字列としては別物」になる書き方が大量にあります。
半角カナと全角カナ、全角英数と半角英数、ー と 〜 と -、㈱ と (株)、
三百二十円 と 320円、コンピューター と コンピュータ、ヴァイオリン と バイオリン、
渡邊 と 渡辺、髙橋 と 高橋、人々 と 人人、令和6年 と 2024年、幽☆遊☆白書 と 幽白……。
これらを放置すると、次のような問題が起きます。
| 困りごと | 何が起きているか | jpnorm でどうするか |
|---|---|---|
| 検索・RAG で「ヒットするはずの文書」が出てこない | 索引側と検索語で表記が違う | for_search で両方を同じ形に揃えてから索引・検索する |
| LLM / OCR / 音声認識の精度を測ると、正解と「実質同じ」なのに不一致になる | 全角半角・記号・漢数字の違いで完全一致が失敗 | for_compare で潰してから compare() で判定する |
| 顧客名・商品名の名寄せや重複検出で取りこぼす | 社内独自の略称・表記ゆれ | カスタム辞書で 幽白 → 幽遊白書 のように正規形へ寄せる |
| ユーザー投稿を表示したら半角カナやゼロ幅文字で崩れた | 見た目に影響する文字と、見えない制御文字 | for_display で見た目を壊さない範囲だけ整える |
| neologdn を使っているが、URL が壊れる・絵文字を消したい・設定を変えたい | neologdn は固定処理で設定できない | neologdn_compat から始めて、必要なフラグだけ足し引きする |
インストール
pip install jpnorm
# または
uv add jpnorm
Python 3.10 以上。Linux (x86_64 / aarch64)・macOS (x86_64 / arm64)・Windows (x64) の
wheel を配布しているので、Rust ツールチェーンは不要です。
コマンドラインだけ使いたい場合は pipx install jpnorm で jpnorm コマンドが入ります。
ユースケース別ガイド
1. 検索・RAG の前処理 (for_search)
索引を作るときと検索するときの両方で同じ Normalizer を通します。 URL やメールアドレスは壊さず、絵文字は落とし、記号のバリエーションを揃えます。
from jpnorm import Normalizer
n = Normalizer("for_search")
docs = ["PYTHON入門 〜〜 初心者向け🔰", "python 入門(初心者向け)"]
n.normalize_batch(docs)
# => ['python入門 〜 初心者向け', 'python 入門(初心者向け)']
n.normalize("詳細は https://example.com/Docs?Q=1 を参照 📎")
# => '詳細は https://example.com/Docs?Q=1 を参照' ← URL はそのまま
検索でヒット落ちの原因になりやすい「同じ語の別表記」も、辞書なしで同じ形に落とします。
n.normalize("コンピューター") # => 'コンピュータ' ← 末尾長音 (JIS Z 8301 方式)
n.normalize("ヴァイオリン") # => 'バイオリン'
n.normalize("ウェブサーバー") # => 'ウエブサーバ'
n.normalize("渡邊さんと髙橋さん") # => '渡辺さんと高橋さん' ← 旧字体・異体字
n.normalize("人々の舊字體") # => '人人の旧字体' ← 繰り返し記号・旧字体
n.normalize("令和6年度予算") # => '2024年度予算' ← 元号
英字は小文字に揃えます (case="keep" で無効化)。日本語と英数字の間の空白は残します
(cjk_spacing="remove" で削除)。
2. LLM / OCR / 音声認識の出力評価 (for_compare + compare)
「正解データと実質同じか」を判定したい場面です。全角半角・記号・漢数字・空白の違いを すべて潰した上で、完全一致・前方一致・編集距離・LLM judge のいずれかで比較します。
from jpnorm import Normalizer, compare
n = Normalizer("for_compare")
n.normalize("合計:¥1,200(税込)") # => '合計¥1200税込'
n.normalize("合計:¥1,200(税込)") # => '合計¥1200税込' ← 同じ形になる
n.normalize("第一章 はじめに") # => '第1章はじめに'
n.normalize("売上 1万2千円 (令和六年)") # => '売上12000円2024年'
compare("テスト結果:123", "テスト結果:123", strategy="exact", normalizer=n).matched
# => True
r = compare("東京都渋谷区", "東京都渋谷区神南1-2-3", strategy="prefix", normalizer=n)
r.matched, r.detail["direction"]
# => (True, 'prediction_is_prefix_of_reference')
r = compare("kitten", "sitting", strategy="edit_distance", threshold=0.5)
r.score # => 0.571... (1 - 編集距離 / 長さ)
意味的な一致まで見たい場合は LLM judge が使えます (pip install "jpnorm[anthropic]" または [openai])。
compare(
"東京タワーの高さは333メートルです",
"東京タワーは高さ 333m",
strategy="llm_judge",
llm_provider="anthropic", # or "openai"
llm_model="claude-haiku-4-5",
threshold=0.8,
)
judge_fn= に自前の判定関数を渡せば API を呼ばずにテストできます。
API キーは ANTHROPIC_API_KEY / OPENAI_API_KEY から読みます。
3. 名寄せ・重複検出 (for_compare + カスタム辞書)
自社サービス名・作品名・人名など、辞書にしか載っていない表記ゆれは カスタム辞書で正規形に寄せます。辞書は正規化の最終段で最長一致置換されます。 キーは生の表記のまま書いて構いません (同じ設定で正規化してから照合されます)。
n = Normalizer("for_compare").with_custom_dict({
"幽遊白書": ["幽白", "ゆうはく", "幽☆遊☆白書"],
"株式会社サンプル": ["サンプル社", "(株)サンプル", "㈱サンプル"],
})
n.normalize("㈱サンプル") # => '株式会社サンプル'
n.normalize("幽☆遊☆白書 第1巻") # => '幽遊白書第1巻'
n.normalize("渡邊 太郎") # => '渡辺太郎' ← 異体字は辞書なしで統一される
# 重複検出はキーを揃えるだけ
records = ["㈱サンプル", "サンプル社", "株式会社サンプル"]
len({n.normalize(r) for r in records}) # => 1
辞書はファイルからも読めます (拡張子で形式判定、format= で明示も可)。
n = (
Normalizer("for_compare")
.load_custom_dict_file("brands.json") # {"正規形": ["表記ゆれ", ...]}
.load_custom_dict_file("terms.csv") # 表記ゆれ,正規形
.load_custom_dict_file("terms.tsv") # 表記ゆれ<TAB>正規形
)
n.custom_dict_size # 登録エントリ数
n.clear_custom_dict()
一般語の同義語は SudachiDict の
synonyms.txt (Apache-2.0) をそのまま読み込めます。ライブラリにはバンドルしていないので
必要な場合はダウンロードしてください。
curl -fSL -o synonyms.txt https://raw.githubusercontent.com/WorksApplications/SudachiDict/develop/src/main/text/synonyms.txt
n = Normalizer("for_search").load_sudachi_synonyms("synonyms.txt")
n.normalize("パソコンを買った") # => 'パーソナルコンピュータを買った'
4. ユーザー投稿の表示前クリーンアップ (for_display)
「見た目を壊さない」が原則です。半角カナだけは全角にし、絵文字・全角記号・空白は残します。
n = Normalizer("for_display")
n.normalize("ハンカクカナ + 全角 🗼") # => 'ハンカクカナ + 全角 🗼'
保存前のサニタイズ (ゼロ幅文字・制御文字・Bidi 制御文字の除去、改行コード統一) を 足したい場合はフラグを重ねます。Bidi 制御文字の除去は Trojan Source 対策にもなります。
n = Normalizer(
"for_display",
remove_zero_width=True,
remove_control=True,
remove_bidi_control=True,
normalize_newlines=True,
)
n.normalize("ゼロ幅\u200b文字と\u202e制御\r\n改行") # => 'ゼロ幅文字と制御\n改行'
5. neologdn からの移行 (neologdn_compat)
引数なしの jpnorm.normalize() がこれです。半角カナ→全角、全角英数→半角、
長音符の畳み込み、空白の畳み込みなど neologdn と同等の処理を Rust で行います。
import jpnorm
jpnorm.normalize("ハンカク ト 全角 ABC") # => 'ハンカク ト 全角 ABC'
jpnorm.normalize("あ〜〜〜") # => 'あ〜'
neologdn と意図的に違う点は次のとおりです (ゴールデンテストで管理しています)。
- 日本語に隣接する空白を neologdn は削除しますが、jpnorm は 1 つに畳むだけで残します
(
== 概要 ==は neologdn では==概要==)。削除したい場合はcjk_spacing="remove" 〜~を neologdn は削除しますが、jpnorm は〜に統一して残します‘’“”¥を neologdn は独自変換しますが、jpnorm は既定では触りません (unify_quotes=Trueで統一可)- jpnorm は NFKC を掛けるので、
℃→°C、㎞→km、Ⅰ→I、…→...になります (neologdn は残します)。避けたい場合はnfkc=False - 横棒
―(U+2015) を neologdn は長音ーにしますが、jpnorm はダッシュ-にします - 罫線
─━を neologdn は常にーにしますが、jpnorm はかなの直後 (ハ─ト→ハート) だけーにし、それ以外 (日本全史─ジャパン) は-にします
移行後に「URL は保護したい」「絵文字は消したい」となったら、そこからフラグを足すだけです。
n = Normalizer("neologdn_compat", protect_urls=True, emoji="remove")
プリセット早見表
| 名前 | いつ使うか | NFKC | 記号統一 | 旧字体・異体字・々 | 外来語統一 | 小文字化 | 元号→西暦 | URL 保護 | 絵文字 | 漢数字→数字 | 記号除去 | 日英間の空白 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
none |
自分でフラグを積む | 残す | 残す | |||||||||
for_display |
UI 表示・投稿プレビュー | 長音のみ | 残す | 残す | ||||||||
neologdn_compat |
neologdn 置き換え (既定) | ✓ | ✓ | 残す | 残す | |||||||
for_search |
検索索引・RAG | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 除去 | 残す | ||
for_compare |
精度評価・名寄せ・重複検出 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 除去 | ✓ | ✓ | 削除 |
一覧は Normalizer.presets() で取得できます。迷ったら、表示なら for_display、
それ以外は for_search から始めて、必要に応じて for_compare に寄せるのがおすすめです。
細かく調整する
プリセットをベースに、キーワード引数で個別フラグを上書きできます。
キーは Normalizer.config が返す dict と同じで、Normalizer(**n.config) で複製できます。
n = Normalizer(
"for_search",
emoji="keep", # 絵文字を残す
kana="kata_to_hira", # カタカナをひらがなに統一
url_wrap=("<", ">"), # URL を <...> で囲む (Slack/Markdown の自動リンク)
repeat_limit=3, # 同一文字の連続を 3 つまでに短縮
)
n.normalize("スゴーーーーイ😀 https://example.com")
# => 'すごーい😀 <https://example.com>'
n.config["nfkc"] # => True
| キー | 型 | 内容 |
|---|---|---|
normalize_newlines |
bool | CRLF / CR / NEL / LS / PS を LF に統一 |
remove_zero_width / remove_control / remove_bidi_control |
bool | 不可視・制御文字の除去 |
nfkc |
bool | Unicode NFKC (全角英数→半角など) |
halfwidth_kana_to_fullwidth |
bool | 半角カナ→全角カナ |
kana |
"keep" / "hira_to_kata" / "kata_to_hira" |
ひらがな⇄カタカナ統一 |
case |
"keep" / "lower" / "upper" |
英字の大文字小文字 |
kyujitai_to_shinjitai |
bool | 旧字体→新字体 (國→国、體→体、310 字) |
unify_itaiji |
bool | 人名・地名の異体字を代表字に (髙→高、﨑→崎、濵→浜) |
remove_variation_selectors |
bool | 異体字セレクタ (IVS) の除去 |
expand_iteration_marks |
bool | 々ゝゞヽヾ の展開 (人々→人人) |
unify_loanword_kana |
bool | ヴァ→バ、ウェ→ウエ、ティ→テイ、ヂ→ジ など |
strip_trailing_prolonged |
bool | 4 文字以上のカタカナ語の末尾長音を落とす (サーバー→サーバ) |
era_to_western |
bool | 令和6年 / R6年 / 令和六年 → 2024年 (明治40年代 平成30年間 のような期間は変換しない) |
cjk_spacing |
"keep" / "remove" / "insert" |
日本語と英数字の間の空白を残す / 消す / 入れる |
unify_hyphens / unify_tildes / unify_prolonged / unify_quotes |
bool | 記号バリエーションの統一 |
collapse_prolonged_run |
bool | 連続する長音符・チルダを 1 つに |
repeat_limit |
int / None | 同一文字の最大連続数 (英数字は対象外) |
collapse_spaces / trim |
bool | 空白の畳み込み・前後トリム |
expand_cjk_compat / remove_cjk_compat |
bool | 機種依存文字 (㈱①㌔) の展開 / 除去 |
remove_symbols |
bool | 句読点・記号の除去。数字に挟まれた記号は数値を区別するため残す (3.14) か空白にする (2025/1/1 → 2025 1 1) |
kansuji_to_arabic / arabic_to_kansuji |
bool | 漢数字⇄算用数字 (排他)。1万2千 1.5億 のような混在も解釈 |
canonicalize_numbers |
bool | 1,200 / 1200.00 → 1200。ハイフン区切りのコード (03-1234-5678) は触らない |
protect_urls / protect_emails / protect_mentions / protect_hashtags |
bool | 保護領域 |
url_wrap |
(str, str) / None | 保護した URL を prefix/suffix で囲む |
emoji |
"keep" / "remove" |
絵文字の扱い |
emoji_placeholder |
str / None | 絵文字を指定文字列に置換 |
normalize / normalize_batch は処理中に GIL を解放するので、スレッドプールで並列化できます。
コマンドラインで使う
echo "ハンカクカナ と 全角 !!" | jpnorm
# ハンカクカナ と 全角 !!
jpnorm -p for_search --set emoji=keep --set kana=kata_to_hira "スゴーーーイ😀"
# すごーい😀
jpnorm -p for_compare --files --dict brands.json input.txt > normalized.txt
jpnorm --json "カナ" # {"input": "カナ", "output": "カナ"}
jpnorm -p for_compare --show-config # 実際に使う設定を JSON で表示
jpnorm --list-presets
パフォーマンス
neologdn (C++ 実装) と同じ入力で比較したスループットです
(scripts/bench-vs-neologdn.py、Apple Silicon、Python 3.12)。
| 入力 | neologdn | jpnorm neologdn_compat | jpnorm for_search |
|---|---|---|---|
| tweet (~100B) | 15 MB/s | 42 MB/s (2.9x) | 29 MB/s (2.0x) |
| paragraph (~500B) | 17 MB/s | 70 MB/s (4.1x) | 41 MB/s (2.4x) |
| large (~32KB) | 17 MB/s | 88 MB/s (5.3x) | 45 MB/s (2.7x) |
for_search は URL 保護・絵文字除去・機種依存文字展開が加わるぶん neologdn_compat より遅くなります。
normalize / normalize_batch は GIL を解放するので、スレッドプールでさらに並列化できます。
他のライブラリとの違い
| jpnorm | neologdn | jaconv / mojimoji | unicodedata.normalize("NFKC") |
|
|---|---|---|---|---|
| 半角カナ・全角英数の統一 | ✓ | ✓ | ✓ | ✓ |
| 長音・ハイフン・チルダの統一 | ✓ | ✓ | ||
| 旧字体・異体字・繰り返し記号 (々) | ✓ | |||
| カタカナ外来語のゆれ (ヴ、末尾長音) | ✓ | |||
| 元号→西暦、混在数値 (1万2千) | ✓ | |||
| 用途別プリセット / フラグ設定 | ✓ | |||
| URL / メール / @mention の保護 | ✓ | |||
| 絵文字の除去・置換 | ✓ | |||
| 漢数字→算用数字、数値正規化 | ✓ | |||
| カスタム辞書・Sudachi 同義語 | ✓ | |||
| 精度比較ユーティリティ | ✓ | |||
| 実装 | Rust | C++ | Python / C | C |
jaconv や mojimoji は「文字種変換だけしたい」場面では十分軽量です。 jpnorm は複数の処理を用途に合わせて組み合わせたいときに向いています。
Rust から使う
コアは jpnorm-core クレートとして独立しており、Python 無しでも使えます
(現時点では crates.io 未公開のため git 依存で指定してください)。
[dependencies]
jpnorm-core = { git = "https://github.com/YoshitakaOyama/jpnorm" }
use jpnorm_core::{EmojiAction, Normalizer, Preset};
let n = Normalizer::builder()
.preset(Preset::ForSearch)
.configure(|c| c.emoji_action = EmojiAction::Keep) // プリセットの一部を打ち消す
.kata_to_hira()
.build();
assert_eq!(n.normalize("カナ😀"), "かな😀");
// 保護領域の位置も取れる (検索ハイライト等に)
let r = n.normalize_with_segments("@alice と https://example.com だよ");
println!("{:?}", r.segments);
開発
git clone https://github.com/YoshitakaOyama/jpnorm.git
cd jpnorm
uv sync --group dev # Rust 拡張をビルドして .venv に入れる
uv run pytest # Python テスト
cargo test --workspace # Rust テスト
cargo clippy --workspace --all-targets -- -D warnings
uv run ruff check . && uv run mypy
cargo bench -p jpnorm-core # ベンチマーク (criterion)
uv run --with neologdn scripts/bench-vs-neologdn.py # neologdn との比較表
wasm-pack build crates/jpnorm-wasm --target web --release --out-dir ../../playground/pkg --no-typescript
python -m http.server -d playground 8765 # プレイグラウンドをローカルで開く
Rust ソースを変更したら uv sync で再ビルドされます。
neologdn とのゴールデン比較テストは tests/golden/neologdn.jsonl を使い、
uv run --with neologdn scripts/gen-neologdn-golden.py で再生成できます。
リリースは CHANGELOG.md を更新し、v* タグを push すると wheel のビルド・PyPI 公開・
GitHub Release 作成まで自動で行われます。
ライセンス
MIT または Apache-2.0 のデュアルライセンス。好きな方を選んでください。
Metadata
Release files for jpnorm 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jpnorm-0.1.2.tar.gz | 102.0 kB | Details |
Built distributions (wheels)
Total release size: 10.9 MB
Release files / jpnorm-0.1.2.tar.gz
| Download URL | jpnorm-0.1.2.tar.gz |
|---|---|
| Size | 102.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5bfa4872b41132772d7e775ae12e25753aece1f320a87e2cc0a0e5e1ee39d243
|
|
BLAKE2b-256 checksum How to use checksums |
211918c237c691609548d859d9f2fe0f19f0570dac0d7a7eafd24763c693398d
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp314-cp314-win_amd64.whl
| Download URL | jpnorm-0.1.2-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 340.8 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cf485ff03a4149f5a7291d35f09b7e5ab5b3f8fb84fed5b28c6be7085f54dfbd
|
|
BLAKE2b-256 checksum How to use checksums |
4310cd3e79ba906382aa2e0a0ed80fc26e822feaa59058c03bf1d475896ecdd2
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | jpnorm-0.1.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 466.7 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
991667e75a0517cf3ab0ec6d47b646fc0ed68fdd1f773bb888fe7b7d6b4948a7
|
|
BLAKE2b-256 checksum How to use checksums |
3a88d016ff28b0d76289bcabafe1f164c19cc3d7564b23d1ecb505b0a5f61b35
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | jpnorm-0.1.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 467.0 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
cd9bc4960f7678ab14f4f77909ec050cd05a9d8ca7193c6d2f5ff4c24275e2a9
|
|
BLAKE2b-256 checksum How to use checksums |
b9ca870c0f6ddc1adf49ab8c4b40b195976466f041daf07b365200068d674533
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | jpnorm-0.1.2-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 434.3 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8f62b061790a2b01b35eb910bdf71ad2288bf05105c2ac1613b29c4a0fe51ff8
|
|
BLAKE2b-256 checksum How to use checksums |
10550da3c5e7b1e74ce77f32dc53af1f5bf1d02e8e0ef02e6de7286bf14f78a7
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl
| Download URL | jpnorm-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl |
|---|---|
| Size | 441.9 kB |
| Tags | CPython 3.14 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
8bb4e4213d7911e133c0ff61868d409fb890053118e2fae1d8511485ca06ea85
|
|
BLAKE2b-256 checksum How to use checksums |
0295383bf277dc84ed06926021e72bbb7ab9f8c880ba3759bb82d235555e0f58
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp313-cp313-win_amd64.whl
| Download URL | jpnorm-0.1.2-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 341.0 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ab151694659503dd8ed4992a51d35ea42c0c8a9dc52735af124b6b0040d81405
|
|
BLAKE2b-256 checksum How to use checksums |
0ca2aac3f4d3857719b1a8df1417f4cfe9d5565b7e6feecd47aa256cb2998bd3
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | jpnorm-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 466.4 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
f343a7e69aa4cbc67c8415546ea20d4d27ff390d69823f5f5703a1a9fc3bde70
|
|
BLAKE2b-256 checksum How to use checksums |
aa2e21bbebff3635f19850558f3d102df7b38c0402cf16f4a910cbd985da90d9
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | jpnorm-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 466.8 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
9c1037e66c9c0237ac19615bbf0bf4089db9f3aef74924dc011970f431d906b4
|
|
BLAKE2b-256 checksum How to use checksums |
feae0e0829003f966081de926443d29f19ba493c9f1635c9fa69eec6c30920b6
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | jpnorm-0.1.2-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 434.3 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d79d8423c89ea65fc584b04f353b6fbd496f1fba72b9352f064afb6bbd1347d8
|
|
BLAKE2b-256 checksum How to use checksums |
d44a31b6255a29138d95ef8ddca837e4790caf49490dbcf860b72a69b957ab2e
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl
| Download URL | jpnorm-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl |
|---|---|
| Size | 441.6 kB |
| Tags | CPython 3.13 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
63d25dcbffd94f1547c07e3fb2713258c2bb38ff325e58986671b91ef07bddf1
|
|
BLAKE2b-256 checksum How to use checksums |
e10ee96a8636beb0e05570e9082274fdbc388db43acb5eba4ade0af0486dc2a6
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp312-cp312-win_amd64.whl
| Download URL | jpnorm-0.1.2-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 340.9 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
fb71d63b882636498fd61690c09e3d2d71412c20da82df8cd090307def585181
|
|
BLAKE2b-256 checksum How to use checksums |
0c1c84457aa44885505573be60a4b8a1ae022e8c6f63584ec6f0673584144dab
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | jpnorm-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 466.6 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
007e44a94ad5e77a859c5c8f3d1e588e16a9893b53cf82af8b838fcbc52f395f
|
|
BLAKE2b-256 checksum How to use checksums |
c397ae81a2333178d6b05e9524e7a89be478fc0686c8066f0494a65e54ca85a1
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | jpnorm-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 467.1 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
aa08f1b442ddc6f9724256a58d2291a8bf932086a1c8c9b96d4168aecac383e3
|
|
BLAKE2b-256 checksum How to use checksums |
64b7e4e7af688be995198b56b3b93077e4bf654779b2747f641f72d9e76fe04d
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | jpnorm-0.1.2-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 434.5 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
70002cda87366efe0c3411d6994c40f966e9dd492e5c8c4c00143402f8bf1968
|
|
BLAKE2b-256 checksum How to use checksums |
56d4b546a4c92d2c942b5477e3d54f9ace8f146c451fed68410c709f78cf92d5
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl
| Download URL | jpnorm-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl |
|---|---|
| Size | 441.8 kB |
| Tags | CPython 3.12 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
c3ea027fe64467ef9e99820e320314a005e2c116d4be2ade9a3244729da3d87d
|
|
BLAKE2b-256 checksum How to use checksums |
b84bb7f63d447e92032ee5d0ec26653b0a58f64afb7b4766071cb806881b2c21
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp311-cp311-win_amd64.whl
| Download URL | jpnorm-0.1.2-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 343.7 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2cae337019605be42f61aa213751c7d46f1267d775b55246ba56f8eb16c5ed24
|
|
BLAKE2b-256 checksum How to use checksums |
b9f3ab74f9f92de72445ba43e277300afd7a49442e93a44281806a74cf67e3a3
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | jpnorm-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 466.8 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
b405634eea7067cebe6a6655bda3e1b6b1aa50cef6da5c71ee0e6ac09fe33faf
|
|
BLAKE2b-256 checksum How to use checksums |
c6f8cabef7c2c2042a69a780cdf6784129dec0e069ed0b21df7e169d1646bedd
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | jpnorm-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 467.7 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
f8d5255368e7b13ee6ce98a32b8a102fe268258312ec76d86bd6242bd05cdcd8
|
|
BLAKE2b-256 checksum How to use checksums |
85ca76da84bb531e9ca1368df432d226f9cfc1539b8ca792e06eccb5e04ed4e3
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | jpnorm-0.1.2-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 437.1 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b6986ed830d4a48bd6ff0aeed00e082164a4ab0508e916eb44f87b0b24936f0e
|
|
BLAKE2b-256 checksum How to use checksums |
b70cb0832906967c9342ac84d2d5bf398711dadd0bac6f6a4faa05c70a88967d
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl
| Download URL | jpnorm-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl |
|---|---|
| Size | 440.0 kB |
| Tags | CPython 3.11 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
59c206a3c2cd5a65ba68b211f89a271aa76e4d99e11b15d9a377efe8a97a1172
|
|
BLAKE2b-256 checksum How to use checksums |
6511151902aa7af7c84f6869d1cb6c91dacbed626d8267dd9cb8a0d818165af1
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp310-cp310-win_amd64.whl
| Download URL | jpnorm-0.1.2-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 343.7 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
20175e04f43a5fd5654495c3669d8b83b9ddac3b7bfbf45b617101d490de6d7d
|
|
BLAKE2b-256 checksum How to use checksums |
05f3b08340bc831173625dfcd5b2be23a1c74e36859472ac79b1df3db01a283c
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | jpnorm-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 466.9 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
b5cf3e47cf4ae9715970e4993199bf08943866262dbea057869f25976b5b0a4e
|
|
BLAKE2b-256 checksum How to use checksums |
032f01044c37f79eb07e08f05fb1a40d3e4ca8102e0f6ab8b7c110bdaa5a2d7a
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | jpnorm-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 467.8 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
a5b80a84a901ca8baf8638ee51188d337270ed30e526cdc4c8a16a9e3cda09ed
|
|
BLAKE2b-256 checksum How to use checksums |
4faab4ced0af78986789ea1de61bd4d1c6e1ee96c8d3662eb513c8a9cf09986a
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | jpnorm-0.1.2-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 436.9 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6cfc7c3117751a6b55b6b25ed128f0618cd40a0b77f4e567d8308f33d3f081ae
|
|
BLAKE2b-256 checksum How to use checksums |
dcc372b1016cdef61beaa2b1b3797a1bd46dca68e17b6a201680983ecdb7fdfe
|
| 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 6, 2026.
Transparency logRelease files / jpnorm-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl
| Download URL | jpnorm-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl |
|---|---|
| Size | 439.9 kB |
| Tags | CPython 3.10 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
6a49547e9b28bfe6b6235be9638a480fd003b49cd14c63e275ffce35f3490f95
|
|
BLAKE2b-256 checksum How to use checksums |
ba28af9fb77c1e9e7ab4045b95721cea518149ac32404dceaa188f0042d5cebd
|
| 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 6, 2026.
Transparency log