Skip to main content

jpnorm

PyPI Python CI License

日本語テキストの「表記ゆれ」を、用途に合わせて 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 コマンドが入ります。

ユースケース別ガイド

索引を作るときと検索するときの両方で同じ 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 に寄せるのがおすすめです。

漢数字変換の限界: for_compare の漢数字→数字変換 (kansuji_to_arabic) はルールベースです。 「一二三」が数か人名か (加藤一二三)、「千歳」が年数か地名かは文脈次第で、辞書を引く形態素解析器でも 判定を誤ります。jpnorm は固有名詞・慣用語・概数 (数十年)・伏せ字 (〇〇) を変換しない側に倒していますが、 誤変換を 0 にはできません。人名・地名が多いデータでは kansuji_to_arabic=False で切るか、 カスタム辞書で保護してください。

細かく調整する

プリセットをベースに、キーワード引数で個別フラグを上書きできます。 キーは 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 で再生成できます。

tests/corpus/ には SNS・レビュー・ニュース・OCR・ビジネス文書風のテキストがあり、全プリセットの出力を tests/corpus/snapshot.jsonl と突き合わせます。挙動を変えたら uv run python scripts/update-corpus-snapshot.py で再生成し、差分を確認してからコミットしてください。 リリース前には uv run python scripts/wiki-diff.py で、Wikipedia の記事に対する出力を PyPI の最新リリースと比べられます (文字が消える方向の変化が増えていないかを見ます)。

リリースは CHANGELOG.md を更新し、v* タグを push すると wheel のビルド・PyPI 公開・ GitHub Release 作成まで自動で行われます。

ライセンス

MIT または Apache-2.0 のデュアルライセンス。好きな方を選んでください。

Metadata

Release files for jpnorm 0.1.3

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

Source distribution (sdist)

Source distribution for jpnorm 0.1.3
File Size Uploaded
jpnorm-0.1.3.tar.gz 104.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for jpnorm 0.1.3
File
jpnorm-0.1.3-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
jpnorm-0.1.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
jpnorm-0.1.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
jpnorm-0.1.3-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
jpnorm-0.1.3-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
jpnorm-0.1.3-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
jpnorm-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
jpnorm-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
jpnorm-0.1.3-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
jpnorm-0.1.3-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
jpnorm-0.1.3-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
jpnorm-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
jpnorm-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
jpnorm-0.1.3-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
jpnorm-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
jpnorm-0.1.3-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
jpnorm-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
jpnorm-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
jpnorm-0.1.3-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
jpnorm-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
jpnorm-0.1.3-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
jpnorm-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
jpnorm-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
jpnorm-0.1.3-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
jpnorm-0.1.3-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details

Total release size: 10.9 MB

Release files / jpnorm-0.1.3.tar.gz

Download URL jpnorm-0.1.3.tar.gz
Size 104.6 kB
Tags Source
SHA-256 checksum
How to use checksums
25affa6dac863d3e566b031076f2e233e33dc51a5e250e17a160f1f0023f8ca5
BLAKE2b-256 checksum
How to use checksums
8aab37ee5a1ab6e6e5a35a7a13b1dec85c6e8c3d93f4bd013dcde9fe07f6b3b6
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp314-cp314-win_amd64.whl

Download URL jpnorm-0.1.3-cp314-cp314-win_amd64.whl
Size 343.2 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
ccda282eb14d48e34e278261928c3aae4e46fe8cacad3b5ad76045a1606feae8
BLAKE2b-256 checksum
How to use checksums
951eb5102bb0dc32dbe18e57c73d194b0634c8fe054bc6f404ed0d845107afd0
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL jpnorm-0.1.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 468.8 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4dab803f803ebb7cdf9fc56e02b6eef602f02a7fabf49ce62a417a37c686566c
BLAKE2b-256 checksum
How to use checksums
6ae6cff200eb68ff41c225166664a986e912cdca674f839a50b9c832ae70989e
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL jpnorm-0.1.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 469.3 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
6d91a6cfe796247e63fe7a6754646fa1de9e2661228690c53a60f4d5a783f9b1
BLAKE2b-256 checksum
How to use checksums
984baade6f346310ff6c94ea6005aace68c020d9f6e0b36bc39365e697959dd9
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp314-cp314-macosx_11_0_arm64.whl

Download URL jpnorm-0.1.3-cp314-cp314-macosx_11_0_arm64.whl
Size 436.1 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
42360a09775cf8da83e7480f7397e8141ff8b1b7cebc7b6bbc5dc0ef4d86a5d2
BLAKE2b-256 checksum
How to use checksums
3cf77daabf1916869692f5e56e6d1d36c3fe0b3be1d064a8beca2a6d130b23ad
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp314-cp314-macosx_10_12_x86_64.whl

Download URL jpnorm-0.1.3-cp314-cp314-macosx_10_12_x86_64.whl
Size 444.1 kB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
554d83efcc1676a379e90802c7dfbf7b7534ebe934f0d454444099c1fb0a6008
BLAKE2b-256 checksum
How to use checksums
2379c5f22e5c3ecac36d5ea0603f4ef1f0bab9a92a85b7edb2c5ca20c22a55ca
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp313-cp313-win_amd64.whl

Download URL jpnorm-0.1.3-cp313-cp313-win_amd64.whl
Size 343.5 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
0326120556b9be2d9f87af3a26ba4b2a0d5e23dd071e7a5fe1ede5e36fade47a
BLAKE2b-256 checksum
How to use checksums
c0ddefa1cb0149cdf737ee9374abd15819115d0ccd7e527be9f836f2d9e64fa8
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL jpnorm-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 468.5 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
aaa5aa202b729e6fc1192d5a139347396a5d3d6477b866e25c3cafb1f44e8ac2
BLAKE2b-256 checksum
How to use checksums
a1ead08417308dd849e9f1930f3b3c7714adf53cea6551c8dabe1b673068d3b4
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL jpnorm-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 469.3 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
2398be546a7996c1ca3c73210b59c3d8b1e1d3b221cb8a00f6f1068b00c6545d
BLAKE2b-256 checksum
How to use checksums
f2f8c434861574962d09ec128c32e9040616dfaa8302578960f7aae4de38c0b9
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp313-cp313-macosx_11_0_arm64.whl

Download URL jpnorm-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
Size 436.0 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
fb1f0cb65a53ddc3404cf9f7cfe41d737db9b726081aba4f168e8b6b94ac04b6
BLAKE2b-256 checksum
How to use checksums
b195d9879b0dfea6d005b4ac8e48700a526633d3bbc2dcac4b95ba9a708ef79f
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp313-cp313-macosx_10_12_x86_64.whl

Download URL jpnorm-0.1.3-cp313-cp313-macosx_10_12_x86_64.whl
Size 443.9 kB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
4cdf7a1605d97bc81ea16507c2c6e2aabcae56d3f3bdddbc060830b90b5b5a79
BLAKE2b-256 checksum
How to use checksums
b33c97bfc8bf88ca65415c35c55164af2495a25949413cb09f437db9e5fc59f2
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp312-cp312-win_amd64.whl

Download URL jpnorm-0.1.3-cp312-cp312-win_amd64.whl
Size 343.5 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
30caccbcf08171990c863caa731b81981e5acf05dd59e2048ed6ca73e2c7326f
BLAKE2b-256 checksum
How to use checksums
887b6e37a28fa111a345e6e70ab541a7971e77e0e7869f3886d605481c45ab71
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL jpnorm-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 468.8 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2a5fea2c51783152b8e6535968729f4738060a0da83f86a448ec19fa814ac7bc
BLAKE2b-256 checksum
How to use checksums
40260d06eb06b6a0df300e107b9a0232d9fa99ab30f0dcd11be5ec0d350fd699
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL jpnorm-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 469.2 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
f11c8079eb2cedadd81ff28253bad36fe337055a72aed959450bee87874d2421
BLAKE2b-256 checksum
How to use checksums
ba70df60d6c504aa78e5471b1167ebd222ef27dacc06c0b710e3ec615147adba
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp312-cp312-macosx_11_0_arm64.whl

Download URL jpnorm-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Size 436.2 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ce729e5b3649c99477e444a744c3ded04af7b90a1f971406349c9e13f41475d0
BLAKE2b-256 checksum
How to use checksums
8e9cba71eb01abd6f1b0587722fed02fba9ca02f00ca9a06f8a035471030f971
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl

Download URL jpnorm-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl
Size 444.1 kB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
3757d9ec1937afadf4d0a1d02dd6fba344c5e8b2e5cf81257e765d0adcc33b57
BLAKE2b-256 checksum
How to use checksums
9fdf3ff19753740f89a2e77a75401ba519da5fb60cf194a88878cec9307f2909
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp311-cp311-win_amd64.whl

Download URL jpnorm-0.1.3-cp311-cp311-win_amd64.whl
Size 346.4 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
8e59074c4a9249fb3534853c407fc4f71dbe75a55dd6593aaa33901f69a7ac18
BLAKE2b-256 checksum
How to use checksums
873f98551e90dfa61809bdc0cb5f7f50a40e5f6f4b01f7da320f48ed5f5dd9a0
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL jpnorm-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 468.8 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
635572f622d4127979f62b1b24af050fbbd2eee7ee2eedb33966e67da49cc836
BLAKE2b-256 checksum
How to use checksums
8ce75b86a5b26f27ac6ecb2148113b5d99c4ac200c70d438e24bf81b7d079c0d
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL jpnorm-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 469.8 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
7c6899ccd6056dfa37478786b05db04facd8c26cf0ea6efb01b3aee6ada3b465
BLAKE2b-256 checksum
How to use checksums
8bbb451fea6b25450fbe2d28c0967909eac4613006611cba470c34eab9326b5b
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp311-cp311-macosx_11_0_arm64.whl

Download URL jpnorm-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Size 439.7 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b38f5112ab1138740e61dd3e6a046eeac0cca93c92cad5aa339e609857933147
BLAKE2b-256 checksum
How to use checksums
8e3e81e18e3767d3ac8d4156adb3c6502fcffe29c18b869fb4b81c7bdb57982e
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl

Download URL jpnorm-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl
Size 442.3 kB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
0c2a1910b829017ede6af92897061f05f4266fa9affc7b6f53e4e044af40c2e7
BLAKE2b-256 checksum
How to use checksums
718f41fe894963d4e91c4c66bf6554721e8c8ac47eed48df2f3b1513b542fc7b
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp310-cp310-win_amd64.whl

Download URL jpnorm-0.1.3-cp310-cp310-win_amd64.whl
Size 346.4 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4c8a4c421022d5505f0f9a4e6b5791c1562a662387137066248b6a6a15276238
BLAKE2b-256 checksum
How to use checksums
ded761c5ebdb366f2ab3ce58790a30503a3fce1a7a930e4dfc110661f221dfcb
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL jpnorm-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 469.1 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
60b3769bd3a7987b4237fb877eea04dd97833ec60a726d514f6916ea3f01a1c9
BLAKE2b-256 checksum
How to use checksums
7b2fafafbb96ccdc1a19fec555a8e226560915c1f24ed6e5f726ced07a664a51
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL jpnorm-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 470.0 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
6066a5ecd4e373739dc4296de9824697626eae3217976ef7e95478bd987cd16a
BLAKE2b-256 checksum
How to use checksums
906b5f268bbe054bdc43602a7ce770ca0940ca61e3c9ab4f9f32f7de7a4c6a05
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp310-cp310-macosx_11_0_arm64.whl

Download URL jpnorm-0.1.3-cp310-cp310-macosx_11_0_arm64.whl
Size 439.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
53f7c2efcd2d3150deabe2b358b8ef10f9f493da32d838c57534843fe7f8914b
BLAKE2b-256 checksum
How to use checksums
471483cced04ec65bf32d3581a5a03bd1a9edfb1ed2a014c8e47511cd57fb1ab
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 8, 2026.

Transparency log

Release files / jpnorm-0.1.3-cp310-cp310-macosx_10_12_x86_64.whl

Download URL jpnorm-0.1.3-cp310-cp310-macosx_10_12_x86_64.whl
Size 442.3 kB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
3f6f03150a99c532c9c9bb301547e11ee601900cf2eac6b610deb86199776d8e
BLAKE2b-256 checksum
How to use checksums
57c96b57f160384cf6defc7bf3f5305128697e884cb450dd792ba126d2273e8b
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 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

26 release files

0.1.0

26 release files

0.0.4

31 release files

0.0.3

31 release files

0.0.2

26 release files

0.0.1

25 release files

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