Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

pencilmark

PyPI Python Wheels License: MIT Docs

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 19.8 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/GRADE.md):

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 the median player (on request time_mean or any percentile time_pNN, e.g. time_p80: 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
on request issues / reject (publishing checks, below), time_mean / time_pNN, 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.

Publishing checks are off unless you ask for them. They flag puzzles a publisher would usually not pick: a difficulty spike, a rule that is never used, too many givens, ... (code, severity reject / warning, text, and rules: the offending rules' indices in the exported puzzle); reject is true when any issue is a reject. Each check's limit is adjustable:

card = pencilmark.rate(puzzle, fields=["difficulty", "band", "issues", "reject"], quality={"trivial": 0.4, "trial": False})

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 whole call is capped and the card says completed: false if the limit passed. 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 grid gives a sudoku grid's rows and columns, a box_grid adds its regular boxes, so a classic is one box_grid and a jigsaw is a grid plus box rules. Nothing is implied. Cells are named r{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; style and decorations are cosmetic only. meta is 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.dumps writes the canonical text (one grid row per line, one rule per line); pencilmark.fingerprint gives a content hash that ignores metadata and styling; pencilmark.describe names 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_seconds to cap it (the card then says completed: false).
  • 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.0rc2

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

Source distribution (sdist)

Source distribution for pencilmark 1.0.0rc2
File Size Uploaded Provenance Actions
pencilmark-1.0.0rc2.tar.gz 607.7 kB With provenance Details for pencilmark-1.0.0rc2.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for pencilmark 1.0.0rc2
File Actions
pencilmark-1.0.0rc2-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for pencilmark-1.0.0rc2-cp314-cp314-win_amd64.whl
pencilmark-1.0.0rc2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pencilmark-1.0.0rc2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pencilmark-1.0.0rc2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for pencilmark-1.0.0rc2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
pencilmark-1.0.0rc2-cp314-cp314-macosx_11_0_x86_64.whl CPython 3.14 CPython 3.14 macOS 11.0+ x86-64 Details for pencilmark-1.0.0rc2-cp314-cp314-macosx_11_0_x86_64.whl
pencilmark-1.0.0rc2-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for pencilmark-1.0.0rc2-cp314-cp314-macosx_11_0_arm64.whl
pencilmark-1.0.0rc2-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for pencilmark-1.0.0rc2-cp313-cp313-win_amd64.whl
pencilmark-1.0.0rc2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pencilmark-1.0.0rc2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pencilmark-1.0.0rc2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for pencilmark-1.0.0rc2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
pencilmark-1.0.0rc2-cp313-cp313-macosx_11_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 11.0+ x86-64 Details for pencilmark-1.0.0rc2-cp313-cp313-macosx_11_0_x86_64.whl
pencilmark-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for pencilmark-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl
pencilmark-1.0.0rc2-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for pencilmark-1.0.0rc2-cp312-cp312-win_amd64.whl
pencilmark-1.0.0rc2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pencilmark-1.0.0rc2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pencilmark-1.0.0rc2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for pencilmark-1.0.0rc2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
pencilmark-1.0.0rc2-cp312-cp312-macosx_11_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 11.0+ x86-64 Details for pencilmark-1.0.0rc2-cp312-cp312-macosx_11_0_x86_64.whl
pencilmark-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for pencilmark-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl
pencilmark-1.0.0rc2-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for pencilmark-1.0.0rc2-cp311-cp311-win_amd64.whl
pencilmark-1.0.0rc2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for pencilmark-1.0.0rc2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pencilmark-1.0.0rc2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for pencilmark-1.0.0rc2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
pencilmark-1.0.0rc2-cp311-cp311-macosx_11_0_x86_64.whl CPython 3.11 CPython 3.11 macOS 11.0+ x86-64 Details for pencilmark-1.0.0rc2-cp311-cp311-macosx_11_0_x86_64.whl
pencilmark-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for pencilmark-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl
pencilmark-1.0.0rc2-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for pencilmark-1.0.0rc2-cp310-cp310-win_amd64.whl
pencilmark-1.0.0rc2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pencilmark-1.0.0rc2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pencilmark-1.0.0rc2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for pencilmark-1.0.0rc2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
pencilmark-1.0.0rc2-cp310-cp310-macosx_11_0_x86_64.whl CPython 3.10 CPython 3.10 macOS 11.0+ x86-64 Details for pencilmark-1.0.0rc2-cp310-cp310-macosx_11_0_x86_64.whl
pencilmark-1.0.0rc2-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for pencilmark-1.0.0rc2-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 32.9 MB

Release files / pencilmark-1.0.0rc2.tar.gz

Download URL pencilmark-1.0.0rc2.tar.gz
Size 607.7 kB
Tags Source
SHA-256 checksum
How to use checksums
ec275398560e700abcad96bda33675ad308eff63f49e976785e667cd359ad2d8
BLAKE2b-256 checksum
How to use checksums
fda9ffe28e35ec1394e9abd23c7ba2519bb9cbc9db22cc49441890e18efe5975
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp314-cp314-win_amd64.whl

Download URL pencilmark-1.0.0rc2-cp314-cp314-win_amd64.whl
Size 1.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
fbd3fadbb1ebfc103feaa66ec494d0ba78e35f00c8748704de25bff699aec3d5
BLAKE2b-256 checksum
How to use checksums
e1514a3a8a63de14944ab88d39c50a8848b26cdbe6fc5248bd4a0a8508d88de1
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
ccb43aae98d935a8ea7a36c9730da7a6a34ed0a3b69f4e5590f3ce20155e043f
BLAKE2b-256 checksum
How to use checksums
2a97ba6fefc53216ce4fa899a4cbe676dc6412970294f79b46f7ac43aa6ec5f3
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL pencilmark-1.0.0rc2-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
ed003c95b0f3bc38bafcc9f16a9b13fd04a9f1dbb392f3ef1a238c1c1acb1af7
BLAKE2b-256 checksum
How to use checksums
e5334cdabe3f3249e306d89a8f63553c1d98cbcb1a8d65ab2a1a1c963692bf7b
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp314-cp314-macosx_11_0_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
20ea0f35f5f1c17689597343d129c4d84489c8efd2a7a86a1997c3f044547f44
BLAKE2b-256 checksum
How to use checksums
5154665810a597d6a957a40fbd463532f232104852e562b3995a7ca26a35d2a9
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp314-cp314-macosx_11_0_arm64.whl

Download URL pencilmark-1.0.0rc2-cp314-cp314-macosx_11_0_arm64.whl
Size 1.3 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d9138abc6937e1b8acccc5594229c0e4e5a4ff6b2663665780444d7d386e7f32
BLAKE2b-256 checksum
How to use checksums
b5b7033623b5af9eb0484b63c541fa30ffb537fa6ba6a071fc718db61c33cf72
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp313-cp313-win_amd64.whl

Download URL pencilmark-1.0.0rc2-cp313-cp313-win_amd64.whl
Size 1.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
620acb981bfcf06a0ac146cd9e3ab457f6610a6c068e2446bb76a74c3177cb43
BLAKE2b-256 checksum
How to use checksums
4626099232bedfcc5348482d7fe06ddd2988985d7491395b5610d43a2cc30c66
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
e8cd74b6e22000f3a8880a4de546f4389216b7f2ed0ed3966f9277608ceda0ed
BLAKE2b-256 checksum
How to use checksums
da14f246ec3cdfab4afcc4b1adb9333837b51006a61537187e76203b2d04582f
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL pencilmark-1.0.0rc2-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
f47da449c4e64e2ab8122ba1a9c3cdf5b4e7cf2a7764120da3fdf0a3221fc928
BLAKE2b-256 checksum
How to use checksums
f3fa7edcc66c732d17d6e890fa7f59ebb2749c143afd510dc0b8989a5081eebd
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp313-cp313-macosx_11_0_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
d56b61f61181f36097c336b45cc2191dbe502f7c761addb775e60446e738495b
BLAKE2b-256 checksum
How to use checksums
39e8ac78305d438d387ca814e536b9144504a1aa4ffc717959d205b665819bd5
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl

Download URL pencilmark-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl
Size 1.3 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
87c11b539b6d578e46509fb6bb907f28c5910ba39f17a892528c67e94aa8d766
BLAKE2b-256 checksum
How to use checksums
143b6a11d7b440873708462aab962ed6839b6afe612609ab9538f0018d015a9e
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp312-cp312-win_amd64.whl

Download URL pencilmark-1.0.0rc2-cp312-cp312-win_amd64.whl
Size 1.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
f27b7067015df13e7fe9571d165e173353ba0361f8509491ce3cd57f817f5992
BLAKE2b-256 checksum
How to use checksums
e27e80848b773c6fdb129369029be493b6d8822f84ff6155b6c75ced4df7033c
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
41a64a3e0124e53279f5ca3a6de0b80816ef54d1f62cd00d68994c5ead2d75c9
BLAKE2b-256 checksum
How to use checksums
f580c91e2052c597b158d2033a3997c8a4ba02a91b1aabd8d10ad1c8d833273c
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL pencilmark-1.0.0rc2-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
cb76434c6ce676edbcf1768749dde45f935499a5466a998f34198a5f404baf49
BLAKE2b-256 checksum
How to use checksums
9c387881760f4017d3291d0ab954d0cac49b837755347537ecce15af2e2f5d5c
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp312-cp312-macosx_11_0_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
8f95152aa5ef086af47f3aef4cbc5176eccb54467112f323831b021d07683d4a
BLAKE2b-256 checksum
How to use checksums
5bde2daf0927c4ae7f806dec25285eb121413d3ab5fa43aec28192b642bee676
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl

Download URL pencilmark-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl
Size 1.3 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b2ab51c212eba4be3a05ffa6f711da5c0eedb5b340a76b4b1f713ee3957ca4f7
BLAKE2b-256 checksum
How to use checksums
f3a75579ff5cf19443493775638a464ff0d9dee44d673096df88d0b906ddd3c0
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp311-cp311-win_amd64.whl

Download URL pencilmark-1.0.0rc2-cp311-cp311-win_amd64.whl
Size 1.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
79f718d5fa71f7f69cdd151a43a25c08d8f8e6e1686e141f511d793bdc93c2f4
BLAKE2b-256 checksum
How to use checksums
68d372d3a912d61e4d42eb39c95a09a6fea78ca31bda367f3be00e4f0a16343b
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
b9eed9a934bd369ce158606df4bbe1ca7b43a04e480eb2dbfb8e1192dc46bdfd
BLAKE2b-256 checksum
How to use checksums
5121066ad2f8c50ab0145bc999e3e3856f33b7df91fa0aec01fb32f0197f62c4
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL pencilmark-1.0.0rc2-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
835da5c7264fecfea6a40a32db6dcf938439cba40898dd0f1a21ea2dd8913c01
BLAKE2b-256 checksum
How to use checksums
274cad4b618d567313fe94335ecc153d7245c415e13a088a051ad31558e48f17
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp311-cp311-macosx_11_0_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
d7506437e8854fbbf3874275d2de47f7d90ed20704eab6948241046a4c3b7562
BLAKE2b-256 checksum
How to use checksums
0bc820bff2b4613c29363642780f298a7564fa055acc1c87f75fde81a59fd417
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl

Download URL pencilmark-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl
Size 1.3 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
316668fa0bfbf406c1e710acddda32cfd3b05a7460278da28e94ba90f31ca684
BLAKE2b-256 checksum
How to use checksums
9119f680fbd0d32fcbfcbc035890ac5239d19933591fcc4a51d85aa06fd1ea02
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp310-cp310-win_amd64.whl

Download URL pencilmark-1.0.0rc2-cp310-cp310-win_amd64.whl
Size 1.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
75376d940f13a9502a614be09fc4b3b3ae48d54df82534161884ea95c1dbca94
BLAKE2b-256 checksum
How to use checksums
8d05202f49a433d04ae8456e08bd888c942d3a4a602ee6138ee91e147baee5fc
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
977c14642170934673c7dbba00a707eb7c0b21d64d55b7fd758cf1bb5549fa45
BLAKE2b-256 checksum
How to use checksums
34d5295cb8aa5104ccbeb1f11a83230606178350fe80c190229f68c5d3fa3be9
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL pencilmark-1.0.0rc2-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
b34ad04d57a9a5b5c52285388d578a58c25485147ef2ef52b3990af3165ed54d
BLAKE2b-256 checksum
How to use checksums
72a91f2f033a2c4436ea037fbe41c5b1c188ed9e41af43789ee3a5857a1074bd
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp310-cp310-macosx_11_0_x86_64.whl

Download URL pencilmark-1.0.0rc2-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
946f222d6c5a82e118794697d9165987475565a8551fe0bbbca39c3eb0b58dd7
BLAKE2b-256 checksum
How to use checksums
527e3577b02ec335ffb34e32ab0662098459ee585efe4fee84d9f78630f705d0
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 29, 2026.

Transparency log

Release files / pencilmark-1.0.0rc2-cp310-cp310-macosx_11_0_arm64.whl

Download URL pencilmark-1.0.0rc2-cp310-cp310-macosx_11_0_arm64.whl
Size 1.3 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
68e0aa1fe2f6a8d191254fa59aa5634938efdddfb7ce1410b4d7f54e108a53f4
BLAKE2b-256 checksum
How to use checksums
d4654bd779fff0b4232daa271f0e3e8c53e88e0cbc0dfa86f068fca9dc3c310c
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 29, 2026.

Transparency log

Security for pencilmark 1.0.0rc2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

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

Select from 26 files

Attestation for pencilmark-1.0.0rc2.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 29, 2026.

Transparency log

A note on package security

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

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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