Skip to main content

Python module providing tools manipulating cubing algorithms.

Project description

Cubing Algs

Python module providing tools for cubing algorithm manipulations.

Installation

pip install cubing-algs

Features

  • Parse and validate Rubik's cube algorithm notation
  • Transform algorithms (mirror, compress, rotate, etc.)
  • Calculate metrics (HTM, QTM, STM, ETM, QSTM)
  • Support for wide moves, slice moves, and rotations
  • Big cubes notation support
  • SiGN notation support
  • Display and tracks facelets on 3x3x3 cube
  • Commutator and conjugate notation support
  • Pattern library with classic cube patterns
  • Scramble generation for various cube sizes
  • Virtual cube simulation and state tracking

Basic Usage

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.mirror import mirror_moves
from cubing_algs.transform.size import expand_moves

algo = parse_moves("F R U2 F'")
print(algo.transform(mirror_moves, expand_moves))
# F U U R' F'

Parsing

Parse a string of moves into an Algorithm object:

from cubing_algs.parsing import parse_moves

# Basic parsing
algo = parse_moves("R U R' U'")

# Parsing multiple formats
algo = parse_moves("R U R` U`")       # Backtick notation
algo = parse_moves("R:U:R':U'")       # With colons
algo = parse_moves("R(U)R'[U']")      # With brackets/parentheses
algo = parse_moves("3Rw 3-4u' 2R2")   # For big cubes

# Parse CFOP style (removes starting/ending U/y rotations)
from cubing_algs.parsing import parse_moves_cfop
algo = parse_moves_cfop("y U R U R' U'")  # Will remove the initial y

Commutators and Conjugates

The module supports advanced notation for commutators and conjugates:

from cubing_algs.parsing import parse_moves

# Commutator notation [A, B] = A B A' B'
algo = parse_moves("[R, U]")  # Expands to: R U R' U'

# Conjugate notation [A: B] = A B A'
algo = parse_moves("[R: U]")  # Expands to: R U R'

# Nested commutators and conjugates
algo = parse_moves("[R, [U, D]]")  # Nested commutator
algo = parse_moves("[R: [U, D]]")  # Conjugate with commutator

# Complex examples
algo = parse_moves("[R U: F]")     # R U F U' R'
algo = parse_moves("[R, U D']")    # R U D' R' D U'

Supported notation:

  • [A, B] - Commutator: expands to A B A' B'
  • [A: B] - Conjugate: expands to A B A'
  • Nested brackets are fully supported
  • Can be mixed with regular move notation

Transformations

Apply various transformations to algorithms:

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.mirror import mirror_moves
from cubing_algs.transform.size import compress_moves
from cubing_algs.transform.size import expand_moves
from cubing_algs.transform.sign import sign_moves
from cubing_algs.transform.sign import unsign_moves
from cubing_algs.transform.rotation import remove_final_rotations
from cubing_algs.transform.slice import reslice_moves
from cubing_algs.transform.slice import unslice_wide_moves
from cubing_algs.transform.wide import rewide_moves
from cubing_algs.transform.wide import unwide_rotation_moves
from cubing_algs.transform.symmetry import (
    symmetry_m_moves,
    symmetry_s_moves,
    symmetry_e_moves,
    symmetry_c_moves
)
from cubing_algs.transform.offset import (
    offset_x_moves,
    offset_y_moves,
    offset_z_moves
)
from cubing_algs.transform.degrip import (
    degrip_x_moves,
    degrip_y_moves,
    degrip_z_moves,
    degrip_full_moves
)

algo = parse_moves("R U R' U'")

# Mirror an algorithm
mirrored = algo.transform(mirror_moves)  # U' R U' R'

# Compression/Expansion
compressed = algo.transform(compress_moves)  # Optimize with cancellations
expanded = algo.transform(expand_moves)  # Convert double moves to single pairs

# SiGN notation
sign = algo.transform(sign_moves)  # Convert to r, u, f notation
standard = algo.transform(unsign_moves)  # Convert to Rw, Uw, Fw notation

# Remove final rotations
clean = algo.transform(remove_final_rotations)  # Remove trailing x, y, z moves

# Slice moves
wide = algo.transform(unslice_wide_moves)  # M -> r' R, S -> f F', E -> u' U
resliced = algo.transform(reslice_moves)  # L' R -> M x, etc.

# Wide moves
rotation = algo.transform(unwide_rotation_moves)  # f r u -> B z L x D y
rewided = algo.transform(rewide_moves)  # L x -> r, etc.

# Symmetry
m_sym = algo.transform(symmetry_m_moves)  # M-slice symmetry (L<->R)
s_sym = algo.transform(symmetry_s_moves)  # S-slice symmetry (F<->B)
e_sym = algo.transform(symmetry_e_moves)  # E-slice symmetry (U<->D)
c_sym = algo.transform(symmetry_c_moves)  # Combined M and S symmetry

# Offset (change viewpoint)
x_offset = algo.transform(offset_x_moves)  # As if rotated with x
y_offset = algo.transform(offset_y_moves)  # As if rotated with y
z_offset = algo.transform(offset_z_moves)  # As if rotated with z

# Degrip (move rotations to the end)
x_degrip = algo.transform(degrip_x_moves)  # Move x rotations to the end
y_degrip = algo.transform(degrip_y_moves)  # Move y rotations to the end
z_degrip = algo.transform(degrip_z_moves)  # Move z rotations to the end
full_degrip = algo.transform(degrip_full_moves)  # Move all rotations to the end

Metrics

Compute algorithm metrics:

from cubing_algs.parsing import parse_moves

algo = parse_moves("R U R' U' R' F R2 U' R' U' R U R' F'")

# Access metrics
print(algo.metrics._asdict())
# {
#   'pauses': 0,
#   'rotations': 0,
#   'outer_moves': 14,
#   'inner_moves': 0,
#   'htm': 14,
#   'qtm': 16,
#   'stm': 14,
#   'etm': 14,
#   'qstm': 16,
#   'generators': ['R', 'U', 'F']
# }

# Individual metrics
print(f"HTM: {algo.metrics.htm}")
print(f"QTM: {algo.metrics.qtm}")
print(f"STM: {algo.metrics.stm}")
print(f"ETM: {algo.metrics.etm}")
print(f"QSTM: {algo.metrics.qstm}")
print(f"Generators: {', '.join(algo.metrics.generators)}")

Cube Patterns

Access a library of classic cube patterns:

from cubing_algs.patterns import get_pattern, PATTERNS

# Get a specific pattern
superflip = get_pattern('Superflip')
print(superflip)  # U R2 F B R B2 R U2 L B2 R U' D' R2 F R' L B2 U2 F2

checkerboard = get_pattern('EasyCheckerboard')
print(checkerboard)  # U2 D2 R2 L2 F2 B2

# List all available patterns
print(list(PATTERNS.keys()))

# Some popular patterns
cube_in_cube = get_pattern('CubeInTheCube')
anaconda = get_pattern('Anaconda')
wire = get_pattern('Wire')
tetris = get_pattern('Tetris')

Available patterns include:

  • Superflip - All edges flipped
  • EasyCheckerboard - Classic checkerboard pattern
  • CubeInTheCube - Cube within a cube effect
  • Tetris - Tetris-like pattern
  • Wire - Wire frame effect
  • Anaconda, Python, GreenMamba, BlackMamba - Snake patterns
  • Cross, Plus, Minus - Cross patterns
  • And many more! (70+ patterns total)

Scramble Generation

Generate scrambles for various cube sizes with advanced customization options:

from cubing_algs.scrambler import scramble, scramble_easy_cross, build_cube_move_set

# Generate scramble for 3x3x3 cube (default 25 moves)
scramble_3x3 = scramble(3)
print(scramble_3x3)

# Generate scramble for 4x4x4 cube (includes wide moves)
scramble_4x4 = scramble(4)
print(scramble_4x4)  # Example: Rw U 2R D' Fw2 R' Uw F2 ...

# Generate scramble for 6x6x6 cube (includes multi-layer moves)
scramble_6x6 = scramble(6)
print(scramble_6x6)  # Example: 3Rw 2F' 4Uw2 3Fw R 2Bw' ...

# Generate scramble with specific number of moves
custom_scramble = scramble(3, iterations=20)
print(f"Custom 20-move scramble: {custom_scramble}")

# Generate easy cross scramble (only F, R, B, L moves - 10 moves)
easy_scramble = scramble_easy_cross()
print(f"Easy cross scramble: {easy_scramble}")  # Example: F R B' L F' R2 B L' F R

# Build custom move set for specific cube size
move_set_3x3 = build_cube_move_set(3)
print(f"3x3 moves: {move_set_3x3[:12]}")  # ['R', "R'", 'R2', 'U', "U'", 'U2', ...]

move_set_4x4 = build_cube_move_set(4)
print(f"4x4 additional moves: {[m for m in move_set_4x4 if 'w' in m][:9]}")  # ['Rw', "Rw'", 'Rw2', ...]

move_set_6x6 = build_cube_move_set(6)
multi_layer = [m for m in move_set_6x6 if any(c.isdigit() for c in m)]
print(f"6x6 multi-layer moves: {multi_layer[:12]}")  # ['2R', "2R'", '2R2', '3R', ...]

Scramble Features:

  • Cube sizes: Supports 2x2x2 through 7x7x7+ cubes
  • Automatic move count: Based on cube size (configurable ranges)
    • 2x2x2: 9-11 moves
    • 3x3x3: 20-25 moves
    • 4x4x4: 40-45 moves
    • 5x5x5+: 60-70 moves
  • Smart move validation: Prevents consecutive moves on same face or opposite faces
  • Big cube support:
    • Wide moves (Rw, Uw, etc.) for 4x4x4+
    • Multi-layer moves (2R, 3Rw, etc.) for 6x6x6+
  • Easy cross scrambles: Only F, R, B, L moves for beginners
  • Customizable iterations: Override default move counts

Move Set Generation: The build_cube_move_set() function creates appropriate move sets:

  • 3x3x3: Basic face turns (R, U, F, etc.) with modifiers (', 2)
  • 4x4x4+: Adds wide moves (Rw, Uw, Fw, etc.)
  • 6x6x6+: Adds numbered layer moves (2R, 3R, 2Rw, 3Rw, etc.)

Validation Logic:

  • No consecutive moves on the same face (R R' is invalid)
  • No consecutive moves on opposite faces (R L is invalid)
  • Ensures natural, realistic scramble sequences

Virtual Cube Simulation

Track cube state and visualize the cube:

from cubing_algs.vcube import VCube
from cubing_algs.parsing import parse_moves

# Create a new solved cube
cube = VCube()
print(cube.is_solved)  # True

# Apply moves
cube.rotate("R U R' U'")
print(cube.is_solved)  # False

# Apply algorithm object
algo = parse_moves("F R U R' U' F'")
cube.rotate(algo)

# Display the cube (ASCII art)
cube.show()

# Get cube state as facelets string
print(cube.state)  # 54-character string representing all facelets

# Get move history
print(cube.history)  # List of all moves applied

# Create cube from specific state
custom_cube = VCube("UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB")

# Work with cube coordinates (corner/edge positions and orientations)
cp, co, ep, eo, so = cube.to_cubies
new_cube = VCube.from_cubies(cp, co, ep, eo, so)

# Get individual faces
u_face = cube.get_face('U')  # Get U face facelets
center_piece = cube.get_face_center_indexes()  # Get all face centers

VCube features:

  • Full 3x3x3 cube state tracking
  • ASCII art display with multiple orientations
  • Move history tracking
  • Conversion between facelets and cubie coordinates
  • Integrity checking to ensure valid cube states
  • Support for creating cubes from custom states

Move Object

The Move class represents a single move:

from cubing_algs.move import Move

move = Move("R")
move2 = Move("R2")
move3 = Move("R'")
wide = Move("Rw")
wide_sign = Move("r")
rotation = Move("x")

# Properties
print(move.base_move)  # R
print(move.modifier)   # ''

# Checking move type
print(move.is_rotation_move)   # False
print(move.is_outer_move)      # True
print(move.is_inner_move)      # False
print(move.is_wide_move)       # False

# Checking modifiers
print(move.is_clockwise)         # True
print(move.is_counter_clockwise) # False
print(move.is_double)            # False

# Transformations
print(move.inverted)   # R'
print(move.doubled)    # R2
print(wide.to_sign)    # r
print(wide_sign.to_standard)  # Rw

Optimization Functions

The module provides several optimization functions to simplify algorithms:

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.optimize import (
    optimize_repeat_three_moves,
    optimize_do_undo_moves,
    optimize_double_moves,
    optimize_triple_moves
)

algo = parse_moves("R R R")
optimized1 = algo.transform(optimize_repeat_three_moves)  # R'

algo = parse_moves("R R'")
optimized2 = algo.transform(optimize_do_undo_moves)  # (empty)

algo = parse_moves("R R")
optimized3 = algo.transform(optimize_double_moves)  # R2

algo = parse_moves("R R2")
optimized4 = algo.transform(optimize_triple_moves)  # R'

Chaining Transformations

Multiple transformations can be chained together:

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.mirror import mirror_moves
from cubing_algs.transform.size import compress_moves
from cubing_algs.transform.symmetry import symmetry_m_moves

algo = parse_moves("R U R' U' R' F R F'")
result = algo.transform(mirror_moves, compress_moves, symmetry_m_moves)

# Same as:
# result = algo.transform(mirror_moves)
# result = result.transform(compress_moves)
# result = result.transform(symmetry_m_moves)

Transform until fixed point

Chained transformations can be run until a fixed point:

from cubing_algs.transform.optimize import optimize_do_undo_moves
from cubing_algs.transform.optimize import optimize_double_moves

algo = parse_moves("R R F F' R2 U F2")
result = algo.transform(optimize_do_undo_moves, optimize_double_moves)
# R2 R2 U F2

algo = parse_moves("R R F F' R2 U F2")
result = algo.transform(optimize_do_undo_moves, optimize_double_moves, to_fixpoint=True)
# U F2

Understanding Metrics

The module calculates the following metrics:

  • HTM (Half Turn Metric): Counts quarter turns as 1, half turns as 1
  • QTM (Quarter Turn Metric): Counts quarter turns as 1, half turns as 2
  • STM (Slice Turn Metric): Counts both face turns and slice moves as 1
  • ETM (Execution Turn Metric): Counts all moves including rotations
  • QSTM (Quarter Slice Turn Metric): Counts quarter turns as 1, slice quarter turns as 1, half turns as 2

Examples

Generating a mirror of an OLL algorithm

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.mirror import mirror_moves
from cubing_algs.vcube import VCube

oll = parse_moves("F U F' R' F R U' R' F' R")  # 14 Anti-Gun
oll_mirror = oll.transform(mirror_moves)
print(oll_mirror)  # R' F R U R' F' R F U' F'

cube = VCube()
cube.rotate('z2')
cube.rotate(oll)
cube.show('oll')  # Display OLL pattern

Converting a wide move algorithm to SiGN notation

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.sign import sign_moves

algo = parse_moves("Rw U R' U' Rw' F R F'")
sign = algo.transform(sign_moves)
print(sign)  # r U R' U' r' F R F'

Finding the shortest form of an algorithm

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.size import compress_moves

algo = parse_moves("R U U U R' R R F F' F F")
compressed = algo.transform(compress_moves)
print(compressed)  # R U' R2 F2

Changing the viewpoint of an algorithm

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.offset import offset_y_moves

algo = parse_moves("R U R' U'")
y_rotated = algo.transform(offset_y_moves)
print(y_rotated)  # F R F' R'

De-gripping a fingertrick sequence

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.degrip import degrip_y_moves

algo = parse_moves("y F R U R' U' F'")
degripped = algo.transform(degrip_y_moves)
print(degripped)  # R F R F' R' y

Working with commutators and patterns

from cubing_algs.parsing import parse_moves
from cubing_algs.patterns import get_pattern
from cubing_algs.vcube import VCube

# Parse and expand a commutator
comm = parse_moves("[R, U]")  # R U R' U'

# Apply a pattern to a virtual cube
cube = VCube()
pattern = get_pattern('Superflip')
cube.rotate(pattern)
cube.show()  # Display the superflip pattern

# Generate and apply a scramble
from cubing_algs.scrambler import scramble
scramble_algo = scramble(3, 25)
cube = VCube()
cube.rotate(scramble_algo)
print(f"Scrambled with: {scramble_algo}")

Advanced scramble generation and testing

from cubing_algs.scrambler import scramble, scramble_easy_cross, build_cube_move_set
from cubing_algs.vcube import VCube

# Test different scramble types
cube = VCube()

# Standard 3x3x3 scramble
standard_scramble = scramble(3)
cube.rotate(standard_scramble)
print(f"Standard scramble ({standard_scramble.metrics.htm} HTM): {standard_scramble}")

# Easy cross scramble for beginners
cube = VCube()
easy_scramble = scramble_easy_cross()
cube.rotate(easy_scramble)
print(f"Easy cross scramble: {easy_scramble}")
cube.show(orientation='DF')  # Visual check of scrambled state with DF orientation

# Big cube scramble with specific length
big_cube_scramble = scramble(5, iterations=50)
print(f"5x5x5 scramble (50 moves): {big_cube_scramble}")

# Analyze move distribution
move_set = build_cube_move_set(4)
face_moves = [m for m in move_set if not 'w' in m]
wide_moves = [m for m in move_set if 'w' in m]
print(f"4x4x4 face moves: {len(face_moves)}")  # 18 moves (6 faces × 3 modifiers)
print(f"4x4x4 wide moves: {len(wide_moves)}")  # 18 moves (6 faces × 3 modifiers)

Advanced algorithm development workflow

from cubing_algs.parsing import parse_moves
from cubing_algs.transform.mirror import mirror_moves
from cubing_algs.transform.symmetry import symmetry_m_moves
from cubing_algs.vcube import VCube
from cubing_algs.scrambler import scramble

# Start with a commutator
base_alg = parse_moves("[R U R', D]")  # R U R' D R U' R' D'

# Generate variations
mirrored = base_alg.transform(mirror_moves)
m_symmetric = base_alg.transform(symmetry_m_moves)

# Test on virtual cube
cube = VCube()
cube.rotate(base_alg)
print(f"Original: {base_alg} ({base_alg.metrics.htm} HTM)")
print(f"Mirrored: {mirrored} ({mirrored.metrics.htm} HTM)")
print(f"Is solved after: {cube.is_solved}")

# Test algorithm on scrambled cube
test_cube = VCube()
test_scramble = scramble(3, 15)
test_cube.rotate(test_scramble)
print(f"Applied scramble: {test_scramble}")

# Apply algorithm and check result
test_cube.rotate(base_alg)
print(f"Cube state after algorithm: {test_cube.state[:9]}...")  # First 9 facelets

# Create conjugate setup
setup = parse_moves("R U")
full_alg = parse_moves(f"[{setup}: {base_alg}]")
print(f"With setup: {full_alg}")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cubing_algs-1.0.12.tar.gz (176.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cubing_algs-1.0.12-cp314-cp314t-musllinux_1_2_x86_64.whl (201.0 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.9 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cubing_algs-1.0.12-cp314-cp314-musllinux_1_2_x86_64.whl (201.0 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cubing_algs-1.0.12-cp313-cp313-musllinux_1_2_x86_64.whl (200.9 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cubing_algs-1.0.12-cp312-cp312-musllinux_1_2_x86_64.whl (200.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cubing_algs-1.0.12-cp311-cp311-musllinux_1_2_x86_64.whl (200.7 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cubing_algs-1.0.12-cp310-cp310-musllinux_1_2_x86_64.whl (200.7 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cubing_algs-1.0.12-cp39-cp39-musllinux_1_2_x86_64.whl (200.5 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cubing_algs-1.0.12-cp38-cp38-musllinux_1_2_x86_64.whl (200.4 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

cubing_algs-1.0.12-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (200.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file cubing_algs-1.0.12.tar.gz.

File metadata

  • Download URL: cubing_algs-1.0.12.tar.gz
  • Upload date:
  • Size: 176.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cubing_algs-1.0.12.tar.gz
Algorithm Hash digest
SHA256 c55ec70067cc4b0870648e0bf9b43d0809ac4043034db4d3b4ff531823812ea0
MD5 7d3104b28f499a921beaea118794cd95
BLAKE2b-256 9054100827ff147a8246308bc169c089f1e0f81790424450c4707e9e78a58edb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12.tar.gz:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b895c4a5311006f4fcb2c540dac748207c1f0f5d7fe2678b1d0dd3aabe205da6
MD5 26b23dd29c7d174db47f39fd0a019447
BLAKE2b-256 abf303e973b140859145afc25ed8840feeeaff02131848836401191bca5b0b06

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a20aa5c4bc208d428b7091b834d560ce2aeedba3f1559807f3023aa585ab1920
MD5 174ac0690d865683862c4d5f53bb2b40
BLAKE2b-256 5f6a5b3884938ce652b008b3ff229029f7c4f798d8527bedad3d2604025d64aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5ca3298f44bde22b1353df919281d08751ce03deece233042d6b69f8852bf3e
MD5 d72dc90d0c42d746596e8f46e4d1d7e3
BLAKE2b-256 6bd234da91923759d8b529fc589f00062013fa411ac52dbf5dc60a4bb0d90dc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d463566effc19170050fb9993008e42e7c587cdbfaf886c81950c90ae7e63d1
MD5 ce8e1b5d539e08b9a7bef126edaf01f7
BLAKE2b-256 badc9ab4e5cdee8a7336d20f3807569d74c401799747120c62ab1873b63955b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 396ca311580239393cc745ca4d90991535ed4c9656bdcab05ef88bea70bc49d4
MD5 89e30275a3a54c2bc137f22192fa7bc3
BLAKE2b-256 718adc36952cc2f35c7f04f7663e6e8d4a7de8f64dfa81b76c6bb99a65d31b83

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1a7cef90daef8284cf3d90d5369b69b7157e76d4f0b88c475f3431bc3398f05d
MD5 44b5f5b6281fe3099c338bc5aecbffff
BLAKE2b-256 7cdf6abb314fd0d84fac38e5f50ee4fb33c40ed7b4d2b4542032a752750525eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c90f33f6376f4a4a0156e021551828a0ddfdfd10efdbe8034f226efe0887aed7
MD5 7b24e53474dd891b38e31f33f520748c
BLAKE2b-256 4f423b3264b058c7d26de27990b59900240a329d2448518c36318ae4d731d971

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 600cc5cffbe941a3ed1c0a0c3e54e175804f09a84d9c0cb43f19831235ae2902
MD5 9d2bf9299e3f39b8d399d6e8e3bc9d56
BLAKE2b-256 d9c63b6cca3185a863765b93760ec582b67b6a68e0186ced864665197095c557

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 562bd1bb43a0d35d94406833031872cfedbdb5fd21350195a611ab7476d89919
MD5 12b42bbd524acf81a68eb07820482325
BLAKE2b-256 7453f51e99c89d9d4fac8b3793341e1e2923e6f135f618ec7903fb1354a1244e

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7df87f80b59573f9219246e05b329373087bbe578b5be4d050d1f8d135b161d
MD5 a4d7d355d7d7e6d47b4a610aeab61993
BLAKE2b-256 360284cde62a68368ecd8a1e99b2f0b973b8b560c2d74394f177e0da998d5f80

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8b6e3cdda4d2777e5a12c86d4ffe36fb0c0fb5b11bde68924b819b2b7a0cd3b5
MD5 96f913c7b8f184143ee7ecfdc3d106f4
BLAKE2b-256 ee7fa63e885445ed63dd2834d3863d1e645adcaacc60b82d509b73010c87aac4

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 011c249a8c8633efd69361f0ddac6e012ee7771e87101727916aae0cc7f8c477
MD5 58f7cc36df476309436b2b0630e12225
BLAKE2b-256 3f3e95b8830f238830328075934d2f2310586e473fdb2bff1c20490884530c1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f5557c62205559c195ef4e66793ef5dce55cb08b949e4c70ec9a27dc87e738e4
MD5 a7f49d076151b3838bf7dba903183c8d
BLAKE2b-256 6bc9dec954ba42959ae4fbb4020837f48ee633240610caae420c0b7101d42fef

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 204dd8d7e53d65295f36cc7969966d978b3df7652c5c2fdf1be4e5839c797f3d
MD5 a8fdf6d699d94fdd09cbca20724ffdd6
BLAKE2b-256 f7ec0567990b6134687a07e9cfa3211e34d31d12ef7da5641e6cbf3dbeb05589

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 23f08e07484891884620bdee5bdc880e7c324fe4cbcd6da95a348ef9e5cd050b
MD5 93a663ce8b1dadea7590669ee11f8fd9
BLAKE2b-256 0e6dc8e275f6dd5d96e09d26dfdbc176d5d2887e0358b0546c3cf2e009e3c179

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp38-cp38-musllinux_1_2_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cubing_algs-1.0.12-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.12-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 15deee5da8fb57364e9f838b47d27bfd5e6632829fca8a534729a61915be4a87
MD5 0ea8244c579a8f5ff401bd12e445b9eb
BLAKE2b-256 6e5c0d1e1dac484594e25002e5f991c752cfa3352a7a0d73b852d9f439c3da02

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.12-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Fantomas42/cubing-algs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page