Skip to main content

Python module providing tools manipulating cubing algorithms.

Project description

Cubing Algs

Python module providing comprehensive tools for Rubik's cube algorithm manipulation, analysis, and simulation.

Installation

pip install cubing-algs

Features

  • Dual Representation System: Work with both facelet (visual) and cubie (mathematical) representations
  • Algorithm Analysis: Comprehensive metrics, impact analysis, ergonomics, and structure detection
  • Powerful Transformations: Mirror, rotate, compress, and compose algorithms with a clean pipeline API
  • Virtual Cube Simulation: Full 3x3x3 cube state tracking with orientation support
  • Advanced Notation: Commutators [A, B], conjugates [A: B], wide moves, slice moves, rotations
  • Pattern Library: 70+ classic cube patterns (Superflip, Checkerboard, etc.)
  • Scramble Generation: Smart scrambles for 2x2x2 through 7x7x7+ cubes
  • Big Cube Support: Multi-layer notation for larger cubes
  • Performance Optimized: C extension for move execution, LRU caching for conversions

Quick Start

from cubing_algs import Algorithm, VCube

# Parse a classic algorithm
sexy_move = Algorithm.parse_moves("R U R' U'")

# Analyze it
print(f"Moves: {sexy_move.metrics.htm} HTM")        # 4 HTM
print(f"Pattern: {sexy_move.structure.compressed}") # [R, U] (commutator)
print(f"Cycles: {sexy_move.cycles}")                # 6 (repeats 6 times to solve)
print(f"Comfort: {sexy_move.ergonomics.comfort_rating}")  # Execution difficulty

# Test on virtual cube
cube = VCube()
cube.rotate(sexy_move)
cube.show()  # Display the result
print(f"Solved: {cube.is_solved}")  # False

Core Concepts

Dual Representation System

This library uses two complementary representations of cube state:

Facelet Representation (54-character string):

  • Visual representation of all 54 stickers on the cube
  • Format: UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB
  • Position 0-53 represent: U face (0-8), R face (9-17), F (18-26), D (27-35), L (36-44), B (45-53)
  • Based on the Kociemba facelet format, widely used in cube solving algorithms
  • Used for visualization, display, and move execution (via optimized C extension)

Cubie Representation (permutation + orientation arrays):

cp = [0,1,2,3,4,5,6,7]           # Corner Permutation (8 corners)
co = [0,0,0,0,0,0,0,0]           # Corner Orientation (0, 1, or 2)
ep = [0,1,2,3,4,5,6,7,8,9,10,11] # Edge Permutation (12 edges)
eo = [0,0,0,0,0,0,0,0,0,0,0,0]   # Edge Orientation (0 or 1)
so = [0,1,2,3,4,5]               # Spatial Orientation (6 centers)
  • Mathematical representation for analysis and group theory operations
  • Used for integrity checking and advanced analysis

Both representations can be converted bidirectionally with caching for performance.

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 using the transform pipeline:

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

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

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

# Compression (optimize with cancellations)
compressed = parse_moves("R R U U U").transform(compress_moves)  # R2 U'

# Expansion (convert double moves to single pairs)
expanded = parse_moves("R2 U'").transform(expand_moves)  # R R U'

# Chain multiple transformations
result = algo.transform(mirror_moves, compress_moves, symmetry_m_moves)

# Transform until fixed point (apply repeatedly until stable)
messy = parse_moves("R R F F' R2 U F2")
clean = messy.transform(compress_moves, to_fixpoint=True)  # U F2

Available Transformations

Basic transformations:

  • mirror_moves - Mirror across M plane (R ↔ L)
  • compress_moves - Optimize with move cancellations (R R → R2, R R' → ∅)
  • expand_moves - Convert double moves to pairs (R2 → R R)

Notation conversions:

  • sign_moves - Convert to SiGN notation (Rw → r)
  • unsign_moves - Convert to standard notation (r → Rw)
  • translate_moves - Translate between notation systems
  • translate_pov_moves - Translate point-of-view notation

Rotations:

  • remove_rotations - Remove all rotation moves
  • remove_starting_rotations - Remove leading rotation moves
  • remove_ending_rotations - Remove trailing rotation moves
  • compress_ending_rotations - Compress rotations at end (x x → x2)
  • unwide_rotation_moves - Expand wide moves (r → R M' x)
  • rewide_moves - Combine to wide moves (R M' x → r)

Slice moves:

  • unslice_wide_moves - Expand slice moves (M → r' R)
  • unslice_rotation_moves - Expand slice to rotation moves
  • reslice_moves - Combine to slice moves (L' R → M x)
  • reslice_m_moves, reslice_s_moves, reslice_e_moves - Reslice specific axes

Symmetries:

  • symmetry_m_moves - M-slice symmetry (L ↔ R)
  • symmetry_s_moves - S-slice symmetry (F ↔ B)
  • symmetry_e_moves - E-slice symmetry (U ↔ D)
  • symmetry_c_moves - Combined M and S symmetry

Viewpoint/Offset:

  • offset_x_moves, offset_y_moves, offset_z_moves - Change viewpoint (90° rotation)
  • offset_x2_moves, offset_y2_moves, offset_z2_moves - Change viewpoint (180° rotation)
  • offset_xprime_moves, offset_yprime_moves, offset_zprime_moves - Change viewpoint (-90° rotation)

Degrip (move rotations to end):

  • degrip_x_moves, degrip_y_moves, degrip_z_moves - Move specific axis rotations to end
  • degrip_full_moves - Move all rotations to the end

AUF (Adjust U Face):

  • remove_auf_moves - Remove AUF moves from algorithm

Timing:

  • untime_moves - Remove timing notation (@200ms, etc.)
  • pause_moves - Add pause moves
  • unpause_moves - Remove pause moves (.)

Trimming:

  • trim_moves - Remove setup and undo moves

Optimization:

  • optimize_repeat_three_moves - R R R → R'
  • optimize_do_undo_moves - R R' → (empty)
  • optimize_double_moves - R R → R2
  • optimize_triple_moves - R R2 → R'

See the Transformations section for import examples.

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'")  # T-Perm

# 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}")   # 14
print(f"QTM: {algo.metrics.qtm}")   # 16
print(f"Generators: {', '.join(algo.metrics.generators)}")  # R, U, F

Metric definitions:

  • HTM (Half Turn Metric): Counts quarter turns as 1, half turns as 1 (also known as OBTM - Outer Block Turn Metric)
  • QTM (Quarter Turn Metric): Counts quarter turns as 1, half turns as 2 (also known as OBQTM - Outer Block Quantum Turn Metric)
  • STM (Slice Turn Metric): Counts both face turns and slice moves as 1 (also known as BTM/RBTM - Block/Range Block Turn Metric)
  • ETM (Execution Turn Metric): Counts all moves including rotations
  • RTM (Rotation Turn Metric): Counts only rotation moves (x, y, z)
  • QSTM (Quarter Slice Turn Metric): Counts quarter turns as 1, slice quarter turns as 1, half turns as 2 (also known as BQTM - Block Quarter Turn Metric)

Metric aliases: The MetricsData object also provides these property aliases for convenience:

  • obtmhtm
  • obqtmqtm
  • btm / rbtmstm
  • bqtmqstm

Algorithm Analysis

Beyond basic metrics, algorithms provide comprehensive analysis capabilities:

from cubing_algs.parsing import parse_moves

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

# Structure analysis - detect commutators and conjugates
print(algo.structure.compressed)         # "[R, U]" (commutator notation)
print(algo.structure.commutator_count)   # 1
print(algo.structure.conjugate_count)    # 0
print(algo.structure.total_structures)   # 1
print(algo.structure.max_nesting_depth)  # 1

# Impact analysis - spatial effects on cube
print(algo.impacts.affected_facelet_count)  # Number of facelets that change position
print(algo.impacts.average_distance)        # Average movement distance
print(algo.impacts.total_displacement)      # Total displacement of all facelets
print(algo.impacts.max_distance)            # Maximum distance any facelet moves

# Ergonomics analysis - execution comfort
print(algo.ergonomics.comfort_rating)       # Overall execution difficulty (0-10)
print(algo.ergonomics.estimated_time_ms)    # Estimated execution time
print(algo.ergonomics.regrip_count)         # Number of regrips needed
print(algo.ergonomics.finger_usage)         # Which fingers are used

# Cycle analysis
print(algo.cycles)  # 6 - How many repetitions return to solved state

# Minimum cube size
print(algo.min_cube_size)  # 2 - Minimum cube size to execute this algorithm

Analysis use cases:

  • Structure detection: Automatically identify commutator/conjugate patterns
  • Impact analysis: Understand which pieces are affected by an algorithm
  • Ergonomics: Evaluate execution difficulty and fingertrick requirements
  • Algorithm comparison: Compare different algorithms for the same case

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 import VCube
from cubing_algs.parsing import parse_moves

# Create a new solved cube
cube = VCube()
print(cube.is_solved)  # True
print(cube.orientation)  # "UF" - default orientation

# 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 with colors)
cube.show()

# Display with different options
cube.show(orientation='UB')        # View from different angle
cube.show(mode='oll')              # OLL pattern visualization
cube.show(palette='colorblind')    # Colorblind-friendly colors
cube.show(mask='F2L')              # Highlight specific pieces

# Get cube state
print(cube.state)       # 54-character facelet string
print(cube.orientation) # Current orientation (e.g., "UF")
print(cube.history)     # List of all moves applied

# Orientation features
oriented = cube.oriented_copy('UB')  # Create copy with U top, B front
print(oriented.orientation)  # "UB"

moves = cube.compute_orientation_moves('DR')  # Calculate moves to get D top, R front
print(moves)  # e.g., "x2 y"

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

# Work with cubie representation (mathematical)
cp, co, ep, eo, so = cube.to_cubies  # Convert to cubie format
new_cube = VCube.from_cubies(cp, co, ep, eo, so)  # Create from cubies

# Get individual faces
u_face = cube.get_face('U')  # Get U face facelets (9 characters)

VCube features:

  • Full 3x3x3 cube state tracking with dual representation
  • ASCII art display with colors, multiple orientations, and visual modes
  • Move history tracking
  • Orientation management (get current, create oriented copies, compute orientation moves)
  • Conversion between facelets and cubie coordinates
  • Integrity checking to ensure valid cube states
  • Support for creating cubes from custom states

Default orientation: The default orientation is 'UF', following the WCA (World Cube Association) standard:

  • U (Up/Top) face: White color
  • F (Front) face: Green color
  • R (Right) face: Red color
  • D (Down/Bottom) face: Yellow color (opposite White)
  • L (Left) face: Orange color (opposite Red)
  • B (Back) face: Blue color (opposite Green)

This standard orientation is used consistently across the library for cube initialization, display, and algorithm application.

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

Performance

The library is optimized for performance:

  • C Extension: Move execution uses an optimized C extension (cubing_algs.extensions.rotate) compiled with -O3 optimization
  • LRU Caching: Facelet ↔ cubie conversion uses LRU caching (512 entries) for repeated operations
  • Lazy Evaluation: Algorithm transforms are composable and don't execute until needed
  • Lightweight State: Virtual cube state is a simple 54-character string with minimal overhead
  • Cached Properties: Algorithm analysis properties (metrics, impacts, etc.) are computed once and cached

Performance characteristics:

  • Move execution: ~1-2 microseconds per move (C extension)
  • Facelet/cubie conversion: ~10-20 microseconds uncached, ~0.1 microseconds cached
  • Algorithm parsing: ~50-100 microseconds for typical algorithms

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 import VCube

oll = parse_moves("F U F' R' F R U' R' F' R")  # OLL 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(mode='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 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 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 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)

# Analyze algorithms
print(f"Original: {base_alg} ({base_alg.metrics.htm} HTM)")
print(f"Comfort: {base_alg.ergonomics.comfort_rating}/10")
print(f"Affected pieces: {base_alg.impacts.affected_facelet_count}")
print(f"Mirrored: {mirrored} ({mirrored.metrics.htm} HTM)")

# Test on virtual cube
cube = VCube()
cube.rotate(base_alg)
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}")

Development

This library is designed for both end-users and developers:

For users:

  • Comprehensive API with intuitive design
  • Full type hints for IDE support
  • Extensive examples and documentation

For developers:

  • Comprehensive test suite with pytest
  • C extension source in cubing_algs/extensions/rotate.c
  • Full type hints and docstrings throughout the codebase

Development commands:

# Install in development mode
pip install -e .[dev]

# Run tests
pytest cubing_algs

# Type checking
mypy --strict cubing_algs

# Linting
ruff check cubing_algs

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.16.tar.gz (260.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.16-cp314-cp314t-musllinux_1_2_x86_64.whl (291.8 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.7 kB view details)

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

cubing_algs-1.0.16-cp314-cp314-musllinux_1_2_x86_64.whl (291.7 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.7 kB view details)

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

cubing_algs-1.0.16-cp313-cp313-musllinux_1_2_x86_64.whl (291.7 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.6 kB view details)

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

cubing_algs-1.0.16-cp312-cp312-musllinux_1_2_x86_64.whl (291.7 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.6 kB view details)

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

cubing_algs-1.0.16-cp311-cp311-musllinux_1_2_x86_64.whl (291.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.4 kB view details)

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

cubing_algs-1.0.16-cp310-cp310-musllinux_1_2_x86_64.whl (291.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.3 kB view details)

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

cubing_algs-1.0.16-cp39-cp39-musllinux_1_2_x86_64.whl (291.3 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.2 kB view details)

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

cubing_algs-1.0.16-cp38-cp38-musllinux_1_2_x86_64.whl (291.2 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

cubing_algs-1.0.16-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (291.6 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.16.tar.gz.

File metadata

  • Download URL: cubing_algs-1.0.16.tar.gz
  • Upload date:
  • Size: 260.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.16.tar.gz
Algorithm Hash digest
SHA256 aea0d1303e08df23f17851071d4e48147a2b1b521155594215d2d2aa237a9767
MD5 d86df243e6506c5b969ea84a9b207497
BLAKE2b-256 8434dc32a9f3abe40256b172e5c29efe9c67f4688ec6d91a7cfd329f4581bcdb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16.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.16-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 945790c86c5ca9effb9b8a946b01964b4f0e135b65619c36e6f7ff18cb01d09d
MD5 f607491aa6bd01cf1521db4a7b3ce67f
BLAKE2b-256 67bac69ba0a4194b3f8b23b6da0a1c90b8e586694e399fc3a95d2bad870e2435

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a5814055b027d1ca58e037807ee5f909e265b2b3fc8bc16c824a1f14339e76ce
MD5 77b4414530e8f5f8103c291951dc8387
BLAKE2b-256 7a6f11cd27e17373da9e0348ed9541be9e2c96b9a62497cbcd22b484328f0418

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 31912cde13b81e8ad7b4a69b1b096eae5817fe92a19f890fe5f0b873d8c0b52f
MD5 b2e8705b9cea9b6917cc1e27d980c8aa
BLAKE2b-256 bed812822ea9d6c64b65fb655577cb8646c14570b0e05880cc137fe4e9f2e2b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea1a51a88ff8201d9d40ddea5b3971f14007329bcea07e4b4b7f61cebd62a4c6
MD5 d4566953a54e967436f2dfc0df73bf0b
BLAKE2b-256 fdd134957da79865ad0c750ba1022189ae56d190bc86d94b0913ce23199343c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6ea7903edc7f9b65ceac66a9c5304f6488cbdbe8abbe47fb5d794288a8f75410
MD5 918d731666d92dd6680b0418392f937a
BLAKE2b-256 5a51876cf99245b23d359db5842c6683d09ca04dd76095fd5e5370de2979a0c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 97faba704b35562d792ca0b731c0f2b00ca5080a239c482b421df7ed5549da59
MD5 39c7a5e73b4efb419dddb7d9e74d8690
BLAKE2b-256 aa2abc8408de129c746a836cfb7370a273f056be0d5302aa824e972b6b8952f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 20a42c4a97632906e0da64a1bb5df8b896cb634891435ab0975b065f933aeabc
MD5 397afc63904acb783d388e6c9487f691
BLAKE2b-256 2081a4ac857124cee256784727f96a6ef33e11740345f195f0aa554e529fca25

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 12765d0bf27a86d80e3b8ddadff8b6176ac97406816421473da61c9bf155c13b
MD5 fd44c6a4a40147bcac24de5236e0067a
BLAKE2b-256 71577d732af09345081fa79c4c20825662feeab903a7047013ba40242a375196

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4a3e69bc2cf47ad87c3d6a1bc01d070c34fe42cc64213beba767156e6c295b95
MD5 c1547e2659173feeebf4a268be3c1e6d
BLAKE2b-256 86d795058fd175ff63b9d16c026feece9ec2df9bf9e8f18d27e3e886e28082ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7320e5d6dff589ce41347ee0165f7859a447da9ea38ab1dd3c1e66c207d07375
MD5 e34e73cf6357ba2908f6318ba6d0ebe8
BLAKE2b-256 bdba47510bfa1b988eee254824caeb7ee02801d0e99b1f1629a2422393e5c56b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d9d02041873635ae3139a40c4cd0bf54de1a89133926db86a965a9a23056135f
MD5 c82ddf6b94c792f317b9d588c48c65bd
BLAKE2b-256 803a496b271491acc545322199378a8cb42fa246e82bca2a0c6e733861ecfbe0

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d1d0b5ef1e163b21992fd241c8710d6c949b298444b5a74f8c77fbee55d729f
MD5 b2ea754b879507504b6a759ac99d1bed
BLAKE2b-256 dd436f6025c889770345377bd6fd0874538e8c5ec4f65d3be98052fa48a30739

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6eeeca0851f0fb3790d88bd252fbcb624db69f0b810079e459075a98a8f92dc4
MD5 0fde1c56bd0aa82e1b90e19cd34d41da
BLAKE2b-256 9662a963839f73c5bd8b12269fe72165fba5d520624adf348b7882da3ec39394

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dd4e7f67fdc40db7a4cf2400bc1c0ab8ba513fb7a6b4b8c7990c710eb987ed91
MD5 667eef7aec01a03199caf5812be107f3
BLAKE2b-256 9fb735a57b8db12c18a672002dba529f1a51b5e180333722a500c5c04d0483f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cubing_algs-1.0.16-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fabd6a91b3eafcdeef23da2eb4a0c7972421dd6ba2ede63ca95c7a76bf617623
MD5 3a64eeaa5b23a62bcb82d4a416833484
BLAKE2b-256 c195d2c93830bd1e1e82e2195539ae8d788be758d3681bea52057637dec4bb0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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.16-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.16-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c3800743b06c9632ee65c9732226a8fc8e479395e0f0353d7b93053228380928
MD5 65a29564add8f01591c8a0a69ac3365d
BLAKE2b-256 8a14574ed392954b36ecc12e206b8c46489a7fa26b2035d30fad5d52ee269ee2

See more details on using hashes here.

Provenance

The following attestation bundles were made for cubing_algs-1.0.16-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