This release is a pre-release and may not be stable for production use.
pencilmark
pencilmark rates sudoku puzzles the way a human solver experiences them. It solves a puzzle step by step with human techniques, easiest first, and reports how hard it is, how long it takes, which band it belongs to and which techniques you need. It works for classic sudoku of any standard size and for many variants (killer, thermo, arrow, kropki, XV, sandwich, multi-grid boards and more). It also solves puzzles, checks uniqueness, imports puzzles from SudokuPad, f-puzzles, penpa-edit and Logic Masters links, and generates new puzzles to a target band or difficulty.
The engine is written in C++ (pybind11). Results are deterministic: the same puzzle always gets the same card.
Install
pip install pencilmark
pip install "pencilmark[verify]" # optional: OR-Tools CP-SAT as a fallback uniqueness checker
Python 3.10 or newer. Building from source needs a C++17 compiler.
Quick start
import pencilmark
card = pencilmark.rate("....4.8.3.6...8..29.86.5..1235.........7..2.........96..2......8.12..7...9.......")
card["band"], card["difficulty"], card["time"] # ('Medium', 5.9, 10.7)
card = pencilmark.rate(puzzle, steps=True) # add the step-by-step solve with explanations
cards = pencilmark.rate_many(puzzles, jobs=4) # several puzzles in parallel, input order kept
sol = pencilmark.solve(puzzle) # list of digits; raises NotUnique / NoSolution
exp = pencilmark.to_export(puzzle, title="My puzzle") # "sudoku-puzzle" exchange format (docs/FORMAT.md)
A puzzle can be a classic string (. or 0 for blanks), a sudoku-puzzle dict, a puzzle JSON dict or string, or a
path to a .json file.
Command line:
$ echo '....4.8.3.6...8..29.86.5..1235.........7..2.........96..2......8.12..7...9.......' | pencilmark rate - --report
#1 Medium - difficulty 5.9 - time 10.7 min (80% of players within 16.4 min)
contains: Naked Pair (or PPR/HPR), X-Wing (or KTE/SCL)
pencilmark rate puzzles.txt --json # full card per line (python -m pencilmark works too)
pencilmark solve puzzles.txt # the solution, or 'not unique' / 'no solution'
More in docs/USAGE.md.
The card
rate returns a dict (format "sudoku-grade") with these fields by default (grader, format, format_version are
always there); rate(puzzle, fields=[...]) / --fields asks for others by their key names, and only requested fields
are computed (docs/FORMAT.md section 11):
| Field | Meaning |
|---|---|
difficulty |
how hard each step feels, continuous from 0 (one empty cell) with no ceiling; a typical newspaper medium is about 5 |
time |
expected minutes for an average player (time_p80 on request: 80% of players finish within it) |
band, band_index |
Very Easy (0), Easy, Medium, Hard, Very Hard, Extreme (5); "Unknown" (null) only with allow_guessing=True, when the engine had to guess |
contains |
techniques met going easy to hard: code, chip, name, band, uses, alternatives; with contains_complete and contains_truncated |
issues, reject |
publishing checks such as a difficulty spike or an unused rule (code, severity reject / warning, text, and rules: the offending rules' indices in the exported puzzle); reject is true when any issue is a reject |
| on request | time_p80, steps (technique, placement r2c8=3 or eliminations r4c5#7; explain="short" / "teach" adds explanations), se / se_diuf, describe, symmetry |
A chip like XWG/KTE/SCL means any one of those techniques gets you through at that point.
Guessing is off by default: where no technique applies, the engine proves an elimination by full search (Trial and
error, band Extreme), so every uniquely solvable puzzle gets a band. allow_guessing=True (CLI --allow-guessing) lets it
guess there instead, which is faster on the hardest puzzles; the card then says Unknown, with contains_complete: false
and stopped_at_step. With max_seconds set, the contents search is capped and the card
may say contains_truncated: true. A puzzle without exactly one solution has no card: rate raises NotUnique /
NoSolution.
Exchange format
to_export writes, and every entry point reads, the "sudoku-puzzle" format, format_version 1, specified in
docs/FORMAT.md (JSON Schema: docs/sudoku-puzzle.schema.json):
{"format": "sudoku-puzzle", "format_version": 1,
"meta": {"title": "Heartstring", "author": "...", "source": "example.org", "type": "Killer Sudoku"},
"board": {"rows": 9, "cols": 9},
"digits": 9,
"givens": [0, 0, 5, 4, 0, ...],
"solution": [6, 1, 5, 4, 2, ...],
"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "cage", "sum": 15, "cells": ["r1c4", "r1c5", "r2c4"]},
{"type": "edge", "kind": "kropki", "color": "white", "cells": ["r5c5", "r5c6"]}]}
- Every constraint is a rule, houses included: a
gridgives a sudoku grid's rows and columns, abox_gridadds its regular boxes, so a classic is onebox_gridand a jigsaw is agridplusboxrules. Nothing is implied. Cells are namedr{row}c{col}, 1-based.givens:0= empty,null= no cell (multi-grid gaps). - Each rule has one exact meaning and a default drawing, so a renderer needs nothing else;
styleanddecorationsare cosmetic only.metais free-form information that never changes solving. - Strict reading: an unknown key or rule type makes the reader refuse the file (
FormatError) instead of dropping a rule. pencilmark.dumpswrites the canonical text (one grid row per line, one rule per line);pencilmark.fingerprintgives a content hash that ignores metadata and styling;pencilmark.describenames the variant and lists its rules.
Other formats
For convenience pencilmark also reads and writes sudokuwiki.org packed strings, exports ipuz, and loads SudokuPad,
f-puzzles, Penpa+ and Logic Masters links. None of these is needed to use the sudoku-puzzle format; see
docs/INTEROP.md. How rules map onto the engine, and how to add one, is in
docs/ENGINE.md.
Supported rules
Classic sudoku from 4x4 to 25x25, irregular (jigsaw) regions, diagonals and extra regions, multi-grid layouts (samurai, twodoku, butterfly, windmill and more), killer cages, little killers, sandwich, X-sums, skyscrapers, frame sums, arrows, thermometers (normal and slow), German and Dutch whispers, renban, region-sum, palindrome, zipper, between, entropic, modular and parity lines, kropki, XV, greater-than, difference / ratio dots, anti-knight, anti-king, non-consecutive, odd / even, low / high, Rossini, Vudoku, equal sums, counting rules, and given candidates (Sukaku). Rules that cannot be translated exactly are refused, never dropped silently.
Generator
from pencilmark.gen import generate
r = generate({"size": 9, "target_band": "Hard", "seed": 1})
r["puzzle"], r["card"], r["info"]
Targets: band, difficulty range, required techniques, symmetry, given counts, and rule elements (cages, thermos, whispers, renban, between lines, arrows, kropki, XV, parity). Every result is checked for uniqueness. Multi-grid boards are not generated.
Puzzle sources
from pencilmark import sources
pj = sources.load("https://sudokupad.app/...") # SudokuPad, f-puzzles, penpa-edit, Logic Masters, short links
card = pencilmark.rate(pj)
Loaders that fetch pages identify themselves, obey robots.txt and pause between requests. Override the user agent with
the PENCILMARK_UA environment variable.
Limitations
- Difficulty and time are models fitted to human solving data. Differences under one point of difficulty are not meaningful, and a single solve can vary a lot from the predicted time.
- Bands depend on the technique catalogue; a puzzle that needs a technique the engine does not have is solved with Trial and error at that point and rated Extreme.
- Very hard puzzles with many-cell rules (killers, arrows, palindromes, thermos) can take minutes while the contents list
is minimised; use
max_secondsto cap it (the card then sayscontains_truncated: true). - The Sudoku Explainer-style ratings (
se=True) are approximate and meaningful for classic sudoku only.
License
MIT, see LICENSE.
pencilmark was written with Claude.
Metadata
Release files for pencilmark 1.0.0rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pencilmark-1.0.0rc1.tar.gz | 591.6 kB | With provenance | Details for pencilmark-1.0.0rc1.tar.gz |
Built distributions (wheels)
Total release size: 32.5 MB
Release files / pencilmark-1.0.0rc1.tar.gz
| Download URL | pencilmark-1.0.0rc1.tar.gz |
|---|---|
| Size | 591.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35b7ec0ed96d972e566b09817f3294ec671c9a80fa2122ae54230e2755c338bf
|
|
BLAKE2b-256 checksum How to use checksums |
ff8b708d38a6fd19ae8f8f6364dfd4037a9cb2b739e3d9b9f5140c60ef0293f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp314-cp314-win_amd64.whl
| Download URL | pencilmark-1.0.0rc1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5d58510513c99b636a282ea9c080c64f97244349cef33f4c40409bbf8add2973
|
|
BLAKE2b-256 checksum How to use checksums |
f9ab41edbdd75d4679d83bdcdea97af87987ff40d6b7174da7d37b8c1daf6693
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
cab27c258676beb6a2ad1fed2a988d2444aee492553fb41f61e9cc6cdecb55a9
|
|
BLAKE2b-256 checksum How to use checksums |
4729a8234381f80cbb62db7ff00cf330b7537b97a21092e2afa4dc089a0b2ef7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | pencilmark-1.0.0rc1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
669179a648f4275a81f7c322e746efeba2238a252a9da079f92fd0c1433a9741
|
|
BLAKE2b-256 checksum How to use checksums |
a559e69e747d1f1129888a50eee8ce2b1be0cb4059e30621f1286c82784cf7c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp314-cp314-macosx_11_0_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp314-cp314-macosx_11_0_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.14 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
9d2a156ff6df7bb5a740ba3127be45dd4a9ee67626e0640c5a2e1ba2004dc193
|
|
BLAKE2b-256 checksum How to use checksums |
0023f5a75b97fc63f446be6497c81c09b12c3963b1858bd4a8fb976ec1abdb02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | pencilmark-1.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
03f706f1c5e6445ea4bf414593c16c132b8ea6b44194b367bf400ba8f8338531
|
|
BLAKE2b-256 checksum How to use checksums |
919423a946791046d429b43d0ecca57669ec86872c216c461b029512cd7bf0dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp313-cp313-win_amd64.whl
| Download URL | pencilmark-1.0.0rc1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2be6ae583a72546859659a71931041fc7cafb476ad8a78c9b82f16801b58a9db
|
|
BLAKE2b-256 checksum How to use checksums |
fccfdba2d0c7c3835e7e04c9d68b97af10535aa46cba9dfe69c9bac8eaf032c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b59747f9ec2e8d77a236c0a03531182bc7607e4b669fe668afe3019b71914f3e
|
|
BLAKE2b-256 checksum How to use checksums |
b23563083f738efe4042b99a0df42b32caf34a4cef44e341d6d2f147d952a9f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | pencilmark-1.0.0rc1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
3fdd1e1304329ecbdc29bcf44c000d28d4ac4e9a7d34a3f51f44207816995da7
|
|
BLAKE2b-256 checksum How to use checksums |
e2fa2b0994426af671e199a33a6c54e348e1a4727b3e421083783187720beb1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp313-cp313-macosx_11_0_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp313-cp313-macosx_11_0_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
873af1f5441514b6b1651eeff13f4bea7ec7b76777d44ec3674a3e8b6ce364e6
|
|
BLAKE2b-256 checksum How to use checksums |
376ce7c8556d14d67eac216c9128820b2d247063d9a1a0091806d1b36e9c07df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | pencilmark-1.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4ab5fec4fb493c33f044c3f5d7698d8bff8ad32e0809f4a58608885e375fd837
|
|
BLAKE2b-256 checksum How to use checksums |
51cc4019cee439d66d8853c8911c1110b9376e7f43d53d5f45c0c4f318f759b8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp312-cp312-win_amd64.whl
| Download URL | pencilmark-1.0.0rc1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4bff37cf202aa7a27a23a171a564c3f2174e574847fff14d3ada924b39681487
|
|
BLAKE2b-256 checksum How to use checksums |
081ec1d6aa9477a40adcafdc5731766d9246bc3490bbe8ebce01ee94a7e8e306
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5a40a1fef5694b362e78ee0f96b7e07cd1b2653e1dce280f682025e73ba06715
|
|
BLAKE2b-256 checksum How to use checksums |
10b8eb5b60c94ea3318fcbf828f91cdf91754a69211a1e3ee02115b6f7e9e915
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | pencilmark-1.0.0rc1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
90d1510050ba87cc78e6607d52195e576ccbddb7a9ac7caed074e6fbe20484bf
|
|
BLAKE2b-256 checksum How to use checksums |
ae408b432f0b454d2f65b8b2d93a3508a80cd25513d7cc4b0ce32d4628fbaf68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp312-cp312-macosx_11_0_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp312-cp312-macosx_11_0_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
538d77fb0a43e649cc7d2d0dea19a0d48a5705c380cf1b24a8ca897ac508c0c8
|
|
BLAKE2b-256 checksum How to use checksums |
ade6b6a7710f45194b2663aff9139f130fa29bb434bc3d2ec17ecdef3351e050
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | pencilmark-1.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a0d08875a707556db9d488b7bacd67f1f462160f15c96fa1218ffbc6ea164525
|
|
BLAKE2b-256 checksum How to use checksums |
8e7e39bb9fa6e61cc4a4ca1ae0653583df192ef3e272b67076ad9e5035f1c702
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp311-cp311-win_amd64.whl
| Download URL | pencilmark-1.0.0rc1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5e61f46925769221f0726d3803074d5f5601bc645b5cebbf37469577450efd67
|
|
BLAKE2b-256 checksum How to use checksums |
3d2c8fce910bc923656b599e8e68741e8f3ce5bd035b147d4b32887ac8c8f2c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
20efc67ceb4bcc3397dfe317cc2b2cf7967cdde1cf60b3d250a821127f0763d0
|
|
BLAKE2b-256 checksum How to use checksums |
98dcea418a5548b84fe579d2d9322eac872710c2b2341ca7ae7f070d86da300c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | pencilmark-1.0.0rc1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
fd0fbc63ecaf2dd71e1636c9a901a9d5a6504c0c4203d2eb4e1241adff9b8645
|
|
BLAKE2b-256 checksum How to use checksums |
8cb76879cbf3acad212ad313840b5d5609d527e2f7aee54bd6f4f1a9836098c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp311-cp311-macosx_11_0_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp311-cp311-macosx_11_0_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
daae5063883fd81c11da0b94164cf30a176fcc72cd2c2f759a5bc559d875ea3f
|
|
BLAKE2b-256 checksum How to use checksums |
edb5f4810dc2064015dc9b7642f9cb05b26da136c47311b0e5d1e1bb585052a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | pencilmark-1.0.0rc1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f89f1b82070f08ee7c3727f4e3280869c199834bbe1dcd8b370d8fd362942ccd
|
|
BLAKE2b-256 checksum How to use checksums |
731e9019f219cd74263661f66002754dd7cdfac64dc17755ffd883574f03755f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp310-cp310-win_amd64.whl
| Download URL | pencilmark-1.0.0rc1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3d25ad04f9af2d2766e8c3009c02457eb0b762e200baa2c607a3396184163463
|
|
BLAKE2b-256 checksum How to use checksums |
d22cfa28f1bb6a16631648e9040dc85d422735b6c3ca5cc88353da99f52463cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
774dcab5b9255eea1b59baa32bd056b71e764e8829f9fc0f29c1e8b12215bbe3
|
|
BLAKE2b-256 checksum How to use checksums |
e7d8ec433b8ada8074648ae1f17d3949caa4bc3890c64c1e4248ad92915142b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | pencilmark-1.0.0rc1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
ea1827527e753b999591edb21a664850a7434531a2afaaa73b843aaeab11449d
|
|
BLAKE2b-256 checksum How to use checksums |
0025ca3a0b5fd9918125df60174909028f698b2390e6047ae7f570e7d6387644
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp310-cp310-macosx_11_0_x86_64.whl
| Download URL | pencilmark-1.0.0rc1-cp310-cp310-macosx_11_0_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.10 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
dd23bab878493876603fc2682a7f3385ef8a917a2453422293a902930cb277b5
|
|
BLAKE2b-256 checksum How to use checksums |
7b2be456d79e22354bf3969b5c7704721cd1d59ed63b645741ae29bff706c282
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logRelease files / pencilmark-1.0.0rc1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | pencilmark-1.0.0rc1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a977e401addf72b5bc29be2876be44cb9603bf00de643b82ab9292d1c477015f
|
|
BLAKE2b-256 checksum How to use checksums |
e06dd87ccc1dfde568aed1b80e4d3338efb214222fda65a4074b7e8a508f82c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 26, 2026.
Transparency logSecurity for pencilmark 1.0.0rc1
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.
Attestation for pencilmark-1.0.0rc1.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 26, 2026.
Transparency logA 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.