Twisty Puzzle
An exact-arithmetic twisty puzzle simulator and software renderer. Polyhedral geometry, cutting planes, and rotations are evaluated via exact algebraic number arithmetic over $\mathbb{Q}(\theta)$, eliminating floating-point drift.
This codebase is a Rust implementation (with Python bindings) of hydropyrum/puzzle.
Contents
Install
pip install twistypuzzle # core simulator library
pip install "twistypuzzle[gym]" # optional Gymnasium environments
pip install "twistypuzzle[gui]" # optional desktop application
The core library has no third-party runtime dependencies. The optional [gym] extra installs Gymnasium and NumPy for reinforcement learning environments, while [gui] installs the standalone desktop application.
Using the Library
A twisty puzzle is defined by an outer polyhedral shell intersected by planar cuts. Puzzles can be instantiated by catalog name, recipe query string, or explicit shape objects:
import twistypuzzle as tp
p1 = tp.Puzzle("Rubik's Cube (3x3x3)")
p1.render(512, 512).save("cube_1.png")
p2 = tp.Puzzle("?shell=C$1&cut=C$1/3")
p2.render(512, 512).save("cube_22.png")
p3 = tp.Puzzle(shell=tp.Shape.polyhedron("C"), cuts=tp.Shape.polyhedron("C", "1/3"))
p3.render(512, 512).save("cube_3.png")
Cutting plane offsets accept exact algebraic expressions such as "1/3", "sqrt(5)/5", or tp.Fraction(1, 3). Exact representations prevent rounding errors inherent in IEEE 754 floating-point approximations.
p.scramble(20) # queue 20 pseudo-random turns
p.settle() # complete active animation and queued moves
p.apply("A B' C2") # apply notation sequence
p.turn(0, +1) # rotate grip 0 by one angular stop in positive direction
p.turn_to(0, 2) # rotate grip 0 directly to stop index 2
p.undo() # invert the most recent turn
Every view setting is both a keyword and a property, and render accepts the same keywords for a single frame without mutating persistent simulator settings:
p = tp.Puzzle("Megaminx", background=(255, 255, 255, 255), supersample=2)
p.show_arrows = True
frame = p.render(512, 512, yaw=-28, pitch=20)
The state
Current puzzle state can be retrieved as an integer array:
>>> p = tp.Puzzle("Rubik's Cube (3x3x3)")
>>> p.solved_stickers == [i // 9 for i in range(54)]
True
>>> p.stickers()[:9]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
sticker_ids() returns the permutation array instead of colors, distinguishing states that identical colors cannot differentiate. ground_atoms() returns the corresponding first-order relational atoms ("color", "s0", "c0").
Jumbling puzzles do not have a fixed sticker array. A puzzle that jumbles (such as a Radiolarian, a jumble prism, or the Big Chop) has legal turns that leave pieces where no piece sits when solved, precluding a static numbering of sticker slots. Of the 85 cataloged puzzles, 36 do not jumble. tp.non_jumbling_entries() lists them.
Many puzzles at once
PuzzleBatch maintains multiple states of one puzzle and updates them concurrently. Batch transitions and rendering execute concurrently in native Rust with the Python GIL released:
b = tp.PuzzleBatch("Rubik's Cube (3x3x3)", 1024, seed=0)
b.reset(scramble=20) # reset and apply 20-move random walk per instance
solved, applied = b.step(actions) # apply one action per instance
b.reset_where(solved, scramble=20) # reset instances that reached the solved state
b.undo() # invert the most recent move per instance
b.apply("A B2' C") # apply notation sequence across all instances
b.set_states(states) # inject externally generated state arrays
Batch execution exploits shared geometric precomputation across instances of a common recipe. For non-jumbling puzzles, actions are fixed slot permutations, allowing moves to be evaluated via vectorized array gathers instead of re-evaluating 3D geometry. Similarly, frame rendering evaluates pixel-to-slot mapping tables once and subsequently renders via direct table lookups.
Benchmark measurements on an Apple M-series system (256 instances of a 3x3x3 cube):
| Execution Model | Transition Latency (per move) | Render Latency (64×64 frame) |
|---|---|---|
| Individual geometric simulation | 1310 µs | 250 µs |
PuzzleBatch (permutation gather & lookup table) |
0.36 µs | 6.5 µs |
cargo run --release --example bench_batch benchmarks throughput on the local system.
Batch operations return instances of Array: contiguous memory buffers that numpy.asarray wraps without copying, and that tolist() unpacks directly without requiring NumPy.
import numpy as np
np.asarray(b.observations()) # (1024, 54) uint8, the color in each slot
np.asarray(b.sticker_ids()) # (1024, 54) uint8, which sticker is in it
np.asarray(b.one_hot()) # (1024, 324) uint8 indicators
np.asarray(b.action_masks()) # (1024, 12) bool
np.asarray(b.render(64, 64)) # (1024, 64, 64, 4) uint8 frames
b.render(32, 32, channels=3, channels_first=True, dtype="f4") # (1024, 3, 32, 32) in [0, 1]
Puzzles that jumble or feature dynamic layer locking lack static permutation tables. Such instances simulate individual 3D geometry per step. The API remains identical across execution modes, with b.is_tabular reporting whether permutation gathering is active.
Numbered face by face
The core simulator indexes sticker slots according to geometric cut traversal order. For cube puzzles, standard literature and external solvers typically index stickers by facelet: six faces in a fixed sequence, each traversed in a grid. The Layout class computes this bidirectional mapping from puzzle geometry:
c = tp.Layout() # the 3x3x3, or any n×n×n cube
c.faces # ['U', 'D', 'L', 'R', 'B', 'F']
c.move_names[:4] # ['U-1', 'U1', 'D-1', 'D1']
c.goal_colors.tolist() # arange(54) // 9
c.goal_ids.tolist() # arange(54)
c.move_index("R"), c.move_index("R'") # (7, 6), where "R1" and "R-1" name the same two
Faces follow the standard sequence U, D, L, R, B, F with U at +y, R at +x, and F at +z. Within a face, facelets are ordered row-major with ROW × COL defining the outward surface normal. Move indexing is face-major, with 2k representing counterclockwise rotation as viewed from the exterior and 2k+1 representing clockwise rotation. tests/data/facelet_cube.txt specifies the 12 base permutations and 128 validation move sequences, against which the layout implementation is verified.
Non-cube puzzles are indexed canonically in color order: solved states correspond to contiguous color sequences 0,0,...,1,1,.... Faces correspond to color classes, facelets to sticker slots, and moves to primitive actions.
m = tp.Layout("Megaminx")
m.is_cube, m.face_count, m.facelet_count # (False, 12, 132)
m.move_names[:4] # ['A', "A'", 'B', "B'"]
Layout operates directly on permutations without 3D geometric modeling, providing a standalone transition engine:
states = c.scrambled(4096, (1, 30), seed=0) # random walks with length sampled in [1, 30]
states = c.next_states(states, moves) # batched single-move state transitions
path, moves = c.trajectories(20, 4096, seed=0) # state trajectories across all random walks
c.one_hot(states) # (4096, 324) indicators
c.inverse_moves(moves) # inverse move indices
triples = c.with_moves(macro_sequences) # composite macro-action sequences
The to_facelets and from_facelets functions translate between slot and face representations. Calling batch.set_facelets(layout, states) loads external states into a simulator batch for simulation, inspection, and rendering, while batch.render_states(states, 32, 32) renders them directly. Reachability from the solved state is not evaluated (reachability determination is computationally intractable for general permutation puzzles). Unreachable configurations are simulated and rendered faithfully without reaching the solved state.
As narrow as the puzzle allows
Memory representations dynamically select the narrowest integer width capable of representing puzzle bounds. A 3x3x3 contains 54 slots and 6 colors, allowing states, slot indices, actions, and permutation tables to reside in uint8 arrays. A 9x9x9 contains 486 slots, promoting slot indices to uint16 while retaining uint8 for color indices. Array.typestr specifies the memory layout, and observation_space mirrors it. No artificial bounds constrain puzzle complexity: geometries with more than 256 faces automatically widen integer representation.
This optimization extends throughout the native backend. Permutation tables and state buffers for puzzles with <= 256 slots remain 8-bit, reducing memory bandwidth by 75% compared to 32-bit representations during large-scale simulation.
Gymnasium Environment
import gymnasium as gym
import twistypuzzle.gym # registers the ids
env = gym.make("twistypuzzle/Puzzle-v0", scramble=8)
envs = gym.make_vec("twistypuzzle/Puzzle-v0", num_envs=256, scramble=8)
Episodes initialize at states generated via bounded random walks from the solved configuration: random walks of length k guarantee solvability in at most k steps, providing structured difficulty curricula. scramble=(1, 30) samples a random episode depth.
make_vec defaults to the native batched environment, executing complete vector transitions, state gathers, and episodic auto-resets in a single call into Rust with GIL release. Standard "sync" and "async" vector wrappers remain supported.
Five encodings, for one environment or a vector of them:
observation= |
shape for a 3x3x3 | Description |
|---|---|---|
"colors" |
(54,) uint8 |
discrete color index per slot |
"ids" |
(54,) uint8 |
sticker index permutation, distinguishing states that identical colors cannot differentiate |
"onehot" |
(324,) uint8 |
binary indicator vector of colors |
"facelets" |
(54,) uint8 |
facelet color encoding under canonical face-major layout |
"image" |
(6, 32, 32) float32 |
two opposite corner viewpoints, 3 channels each, normalized to [0.0, 1.0] |
reward="cost" assigns a step penalty of -1 per move, so the cumulative episode return equals the negative trajectory length. reward="sparse" yields a terminal reward of +1 upon reaching the solved state.
GUI (Desktop Application)
pip install "twistypuzzle[gui]"
twistypuzzle-gui # interactive graphical window
twistypuzzle-gui Megaminx --scramble 20 --seed 7 # initialize with scramble
twistypuzzle-gui '?shell=C$1&cut=C$1/3' --theme dark
twistypuzzle-gui --list # display catalog entries
twistypuzzle-gui --help # complete command options
The wheel installs that executable as the twistypuzzle-gui command, and python -m twistypuzzle_gui (or twistypuzzle_gui.launch(...)) delegates invocations to the executable.
The GUI employs software rasterization without external GPU dependencies, rendering frames on demand when state updates occur. When stationary, no CPU cycles are spent rendering, and animated turns or pointer drag interactions activate a 60 Hz timer. Frame scratch buffers are reused across frames. Rendering at 1280x1280 with 2x supersampling processes 2560x2560 pixels (~50 MB framebuffer), and persistent scratch memory avoids 60 Hz allocation and zeroing cycles.
Benchmark measurements on an Apple M-series system (single 1280x1280 frame of a 3x3x3 cube):
| Execution Configuration | Frame Duration | Allocations per Frame |
|---|---|---|
| Rasterize and resolve, per-frame buffer allocation | 7.2 ms | 56.6 MB |
| Rasterize and resolve, persistent scratch buffer reuse | 6.2 ms | 0 B |
pixi run bench-frame benchmarks frame rendering throughput. Environment variables SIZE, SUPERSAMPLE, RECIPE, and FRAMES configure benchmark parameters.
Window surfaces utilize zero-copy double-buffering. The rasterizer renders directly into the target surface buffer submitted to the window system, eliminating intermediate blit copies. Alternating between two surface buffers ensures the drawing thread never contends with the surface currently held by the display compositor, reducing surface refresh overhead from 0.88 ms to 0.07 ms.
Development
Use Pixi to manage the workspace and toolchains:
pixi run develop # compile and install the Python extension
pixi run test # run all Rust and Python test suites
pixi run gui # launch the desktop interface
pixi run build-wheel # build release wheel into target/wheels/
Or use the repository Makefile:
make help # list available targets
make all # format checks + lint + Rust/Python tests
make wheel # build wheel into dist/
make gui # run desktop interface
make docker-ci # run container matrix from docker-bake.hcl
Running tests directly:
cargo test --release # Rust test suite
cargo test --release --features bigint-only # Rust test suite without small-integer fast path
pytest tests/python # Python test suite
License
Released under the MIT License.
Metadata
Release files for twistypuzzle 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| twistypuzzle-0.1.1.tar.gz | 335.7 kB | Details |
Built distributions (wheels)
Total release size: 19.3 MB
Release files / twistypuzzle-0.1.1.tar.gz
| Download URL | twistypuzzle-0.1.1.tar.gz |
|---|---|
| Size | 335.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b5e64c5db80b73a1632ead4606b355bd38fee91f3ef4f1f6484310e91b53daa
|
|
BLAKE2b-256 checksum How to use checksums |
7e7874e42b799b7fbbb04a16aaf89ca606f7b644e9afe4717daa61eb26bd9681
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp314-cp314t-win_arm64.whl
| Download URL | twistypuzzle-0.1.1-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 930.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
786bcf2cdaedaa6c8e3c118a5325e0680d4a8b1bb4c245148b5e4ccd8b342010
|
|
BLAKE2b-256 checksum How to use checksums |
481c4132f5a9ca30df7bc7e75690f0584bea141f3aac019c8018c482462e6a18
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp314-cp314t-win_amd64.whl
| Download URL | twistypuzzle-0.1.1-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 1.0 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e6ad0b226025deb4ba48dd022ad68bd2487db14548b1fa0429b169336ba5b783
|
|
BLAKE2b-256 checksum How to use checksums |
7a8807caee26e910da7ff4ffa497a7cda1f66b0f3df9cea4a09fd8347ceafce6
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | twistypuzzle-0.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
920405d45861460ebf8f4362b4e5bffcb23e2d3c3460b47c24a8095af77f62f7
|
|
BLAKE2b-256 checksum How to use checksums |
9906fc9b41a42b2706515512916e6ff800efb6944080842aaac983d067d2ab5e
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | twistypuzzle-0.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 975.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
c0ddb15a424144aec6da6ab7551c2d474e401b99eb3b1d41ddd09e015ac0acdd
|
|
BLAKE2b-256 checksum How to use checksums |
6bbe4616437739d4727c6deb5aa7c5057e63a05d63812d5d9430162fef7173a9
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | twistypuzzle-0.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 926.6 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
414cb0a2ac5bf2b4a9cc2dda37e719f6b1bf86f992c74bc4e2a46f68efaebda5
|
|
BLAKE2b-256 checksum How to use checksums |
734760765b5558be33fd31e99104150f7d3eaeee8f9360f3f33cdc64262fffb8
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | twistypuzzle-0.1.1-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 895.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
428e692afddeca32af85443cecb9d5f2f858a4070aca7c77fd2f4dda27a41163
|
|
BLAKE2b-256 checksum How to use checksums |
31699fc4cc0b5b422dee80952f1545da3d68db6a1ff7c9e75f8db488669aa6c3
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | twistypuzzle-0.1.1-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 957.8 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2c4d89d2b144fd767d347d590c2cc3322d156c86632fbc9691936b7fcc400915
|
|
BLAKE2b-256 checksum How to use checksums |
8b0fd32d84d9eeb790639336a88357f3698db1036ed7a708bc99017ae64110f3
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-win_arm64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-win_arm64.whl |
|---|---|
| Size | 942.8 kB |
| Tags | CPython 3.10 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
6447de8709b2e31bb5baafe53624c7d428f1ee004569eec9e6090e5d8fe0c628
|
|
BLAKE2b-256 checksum How to use checksums |
02c0c4acf646d3dc1f40f6aad70793d8bf6e061b395cf996b571730ccd03d2a7
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-win_amd64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 1.0 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
64b8dd4902452890f689a668d54bd3b966ccaaa4e058f7de7117456d34eb4c0c
|
|
BLAKE2b-256 checksum How to use checksums |
bd1f33ea77295e870c2e7e380916a76aa9089e2431f9e12c1154a28844644815
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-win32.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-win32.whl |
|---|---|
| Size | 909.9 kB |
| Tags | CPython 3.10 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
63b7ae6750d957c31edf072917ee9dd9a1a10f6291a9eb1601b79458659eb8a1
|
|
BLAKE2b-256 checksum How to use checksums |
89cb61b6c34971005e71e2ca64fd0c98773a0d27cd5c5c71d0e855cb3bac7aca
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-musllinux_1_2_x86_64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
34fa6253149ea4dfd120c72f78c5adfc103c56422c696cf73aa0f76eb7cfc75f
|
|
BLAKE2b-256 checksum How to use checksums |
ae65be53a702fa892b7181250ea417b7402415b04a19522841f4038ed0f5ee00
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-musllinux_1_2_aarch64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
94190742531b6f5c7418ee5e6ecd3eb8d0ad295c5c3c12db1b0202ec48e2d8f2
|
|
BLAKE2b-256 checksum How to use checksums |
717dc6cf8905dab7ec9f201304e78abc68fd6d83732dec36639fdddffe85a392
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 983.1 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
0fd071df47001e6756af6fca49296cc651402659d5ca5d82053ea2ea01d79571
|
|
BLAKE2b-256 checksum How to use checksums |
19e3ff5dbb697bfa7284106e74dce6a82bc42ba9c2386780e02188309c8d436c
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ IBM System/390x abi3 |
|
SHA-256 checksum How to use checksums |
618e47ef83b548ae54be6fcbb6586ad51015e522be052f1b7365b26f619052ae
|
|
BLAKE2b-256 checksum How to use checksums |
80d92c5edbbcbf8293231a83c451815b5ab4f072a8f4afa0a2e1ea5010e92cf1
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ PowerPC 64-le abi3 |
|
SHA-256 checksum How to use checksums |
81950f3b190f2bc09079612c210615ef0ba4d6b6d4a1bc417006946dd04a154d
|
|
BLAKE2b-256 checksum How to use checksums |
77456bf4dbc532e6d47293544c87860c34e9cd869855d709aa9afeefa95ac136
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 945.5 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARMv7l abi3 |
|
SHA-256 checksum How to use checksums |
404cc8244cd6bff0fc67b36d9948eddaa50be7986fffa3f82333f275d343dc59
|
|
BLAKE2b-256 checksum How to use checksums |
eaa7b034e2b37bb5ccb9ea2c070bf602bc7cd413d09e60ff6c4e53979e4644d1
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 933.9 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
7d4ccff965e98f0e602b570597532e86c281188021396deec02ad5eedc2464c9
|
|
BLAKE2b-256 checksum How to use checksums |
94afe3b5b82f27f43e41e46141356cb1d4ebec9161eec3f4e650e7fe4b92b023
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 909.6 kB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e8ee3973c655c538f382d8f015f3046a98a4f3d0a92541e7b5f339144ea57ccc
|
|
BLAKE2b-256 checksum How to use checksums |
40a64c4a63fe63ed8d9ef2e2328918d4a103eb93beaf70e0a772301349e644e5
|
| 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 Sep 21, 2026.
Transparency logRelease files / twistypuzzle-0.1.1-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | twistypuzzle-0.1.1-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 952.3 kB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
5a21eb2c5a9120c8738eed3dde227f92efd6318325e22e1507b06cb0da8b3243
|
|
BLAKE2b-256 checksum How to use checksums |
44c3b74c8e3ecf8c8d31128c20534daee984c612b54754c94368a3423e834f6c
|
| 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 Sep 21, 2026.
Transparency log