Skip to main content

Twisty Puzzle

License: MIT Python 3.10+ image Pixi Badge Ruff Static Badge

Logo

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.

All 85 cataloged puzzles, grouped by family

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.

The desktop interface

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)

Source distribution for twistypuzzle 0.1.1
File Size Uploaded
twistypuzzle-0.1.1.tar.gz 335.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for twistypuzzle 0.1.1
File
twistypuzzle-0.1.1-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
twistypuzzle-0.1.1-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
twistypuzzle-0.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
twistypuzzle-0.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
twistypuzzle-0.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details
twistypuzzle-0.1.1-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
twistypuzzle-0.1.1-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
twistypuzzle-0.1.1-cp310-abi3-win_arm64.whl CPython 3.10 abi3 Windows ARM64 Details
twistypuzzle-0.1.1-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
twistypuzzle-0.1.1-cp310-abi3-win32.whl CPython 3.10 abi3 Windows x86-32 Details
twistypuzzle-0.1.1-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
twistypuzzle-0.1.1-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.10 abi3 Linux glibc 2.17+ IBM System/390x Details
twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.10 abi3 Linux glibc 2.17+ PowerPC 64-le Details
twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.10 abi3 Linux glibc 2.17+ ARMv7l Details
twistypuzzle-0.1.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
twistypuzzle-0.1.1-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
twistypuzzle-0.1.1-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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

Release history Release notifications | RSS feed

This release

0.1.1 This release

20 release files

0.1.0

20 release files

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