Skip to main content

A fast Connect-4 Solver for Python & C++

Project description

BitBully: A fast and perfect-playing Connect-4 Agent for Python 3 & C/C++

bitbully-logo-full


GitHub Repo stars GitHub forks Python Python Python Docs pre-commit PyPI - Version PyPI - Downloads PyPI - License Coverage Status Wheels Doxygen CMake Build Buy Me a Coffee

BitBully is a high-performance Connect-4 solver implemented in C++ with Python bindings, built around advanced search algorithms and highly optimized bitboard operations. It is designed for efficient game solving and analysis, targeting both developers interested in performance-critical implementations and researchers working on game-tree search.

BitBully evaluates millions of positions per second in pure C++ and supports constant-time opening-book lookups for early-game positions. Even without opening databases, it can solve the entire game in under 200 seconds on relatively modest hardware.

Connect4 opening Connect4 mid-game Connect4 victory

From opening to victory: three key stages of a Connect 4 match — early game, mid-game tension, and the final winning position.

Quickstart

Installation

pip install bitbully

Usage

import bitbully as bb

agent = bb.BitBully()
board = bb.Board()

while not board.is_game_over():
    board.play(agent.best_move(board))

print(board)
print("Winner:", board.winner())

Table of Contents

Features

  • Fast Solver: Implements MTD(f) and null-window search algorithms for Connect-4.
  • Bitboard Representation: Efficiently manages board states using bitwise operations.
  • Advanced Features: Includes transposition tables, threat detection, and move prioritization.
  • Python Bindings: Exposes core functionality through the bitbully_core Python module using pybind11.
  • Cross-Platform: Build and run on Linux, Windows, and macOS.
  • Open-Source: Fully accessible codebase for learning and contribution.

Who is this for?

  • Just want to play or analyze Connect-4 in Python? → Read Quickstart + Usage (High-level Python API)

  • Interested in performance, algorithms, or C++ integration? → See Low-level C++ bindings (advanced)

  • Working on research, solvers, or databases? → See Opening Books and BoardCore

Installation

Prerequisites

  • Python: Version 3.10 or higher, PyPy 3.10 or higher

Build and Install

From PyPI (Recommended)

The easiest way to install the BitBully package is via PyPI:

pip install bitbully

This will automatically download and install the pre-built package, including the Python bindings.


Python API Docs

Please refer to the docs here: https://markusthill.github.io/BitBully/.

The docs for the opening databases can be found here: https://markusthill.github.io/bitbully-databases/

Usage

⚠️ Note bitbully_core exposes low-level C++ bindings intended for advanced users. Most users should use the high-level bitbully Python API with the classes Board and BitBully.

BitBully currently supports standard Connect-4 (7 columns × 6 rows). Generalized board sizes are not supported.

🚀 BitBully: Getting Started with a Jupyter Notebook

Open In Colab

This notebook introduces the main building blocks of BitBully:

  • Board: represent and manipulate Connect Four positions
  • BitBully: analyze positions and choose strong moves

All examples are designed to be copy-pasteable and easy to adapt for your own experiments.

Jupyter Notebook: notebooks/getting_started.ipynb

🎮 Play a Game of Connect-4 with a simple Jupyter Notebook Widget

Open In Colab

screenshot_gui

BitBully includes an interactive Connect-4 widget for Jupyter built with ipywidgets + Matplotlib. GuiC4 renders a 6x7 board using image sprites, supports move evaluation, provides undo/redo, can trigger a computer move using the BitBully engine (optionally with an opening book database). It's intended for quick experimentation and demos inside notebooks (best with %matplotlib ipympl).

Jupyter Notebook: notebooks/game_widget.ipynb

High-level Python API (recommended)

Empty board + play moves incrementally

import bitbully as bb

board = bb.Board()
assert board.play(3)          # single move (int)
assert board.play([2, 4, 3])  # multiple moves (list)
assert board.play("001122")   # multiple moves (string)

print(board)

Initialize directly from a move sequence

import bitbully as bb

board_a = bb.Board([3, 3, 3, 1, 1])
board_b = bb.Board("33311")

assert board_a == board_b
print(board_a)

Create positions (moves, strings, arrays) and round-trip them

import bitbully as bb

# From a move list
b1 = bb.Board([3, 3, 3, 1, 1])

# From a compact move string
b2 = bb.Board("33311")

assert b1 == b2
print(b1)

# From a 2D array (row-major 6x7 or column-major 7x6 both work)
arr = b1.to_array()  # default: column-major 7x6
b3 = bb.Board(arr)

assert b1 == b3

Legal moves and remaining moves

import bitbully as bb

board = bb.Board("33333111")

print(board.legal_moves())                 # all legal columns
print(board.legal_moves(order_moves=True)) # ordered (center-first)
print("Moves left:", board.moves_left())
print("Tokens:", board.count_tokens())

Some board utilities

import bitbully as bb

board = bb.Board("332311")
print(board)

print("Can win next (any):", board.can_win_next())
print("Can win next in col 4:", board.can_win_next(4))

assert board.play(4)  # play winning move
print(board)

print("Has win:", board.has_win())
print("Game over:", board.is_game_over())
print("Winner:", board.winner())  # 1

Solver Quickstart: evaluate a position and pick a move

import bitbully as bb

agent = bb.BitBully()          # loads default opening book ("12-ply-dist")
board = bb.Board()             # empty board

print(board)

scores = agent.score_all_moves(board)
print("Move scores:", scores)

best_col = agent.best_move(board)
print("Best move:", best_col)

Play a small game loop (agent vs. itself)

import bitbully as bb

agent = bb.BitBully()
board = bb.Board()

while not board.is_game_over():
    col = agent.best_move(board, tie_break="random")
    assert board.play(col)

print(board)
print("Winner:", board.winner())  # 1, 2, or None for draw

Tie-breaking strategies for best_move

import bitbully as bb
import random

agent = bb.BitBully()
board = bb.Board("341")  # arbitrary position

print(board)

print("Center tie-break:", agent.best_move(board, tie_break="center"))
print("Leftmost tie-break:", agent.best_move(board, tie_break="leftmost"))

rng = random.Random(42) # optional own random generator
print("Random tie-break (seeded):", agent.best_move(board, tie_break="random", rng=rng))

Different Search Algorithms

import bitbully as bb

agent = bb.BitBully()
board, _ = bb.Board.random_board(n_ply=14, forbid_direct_win=True)

s1 = agent.mtdf(board)
s2 = agent.negamax(board)
s3 = agent.null_window(board)

assert s1 == s2 == s3
print("Score:", s1)

Low-level C++ bindings (advanced)

Use the BitBullyCore and BoardCore classes directly in Python:

BoardCore Examples

The low-level BoardCore API gives you full control over Connect-4 positions: you can play moves, generate random boards, mirror positions, and query win conditions or hashes.

Create and Print a Board
import bitbully.bitbully_core as bbc

board = bbc.BoardCore()
print(board)          # Human-readable 7x6 board
print(board.movesLeft())   # 42 on an empty board
print(board.countTokens()) # 0 on an empty board

Play Moves and Check for Winning Positions
import bitbully.bitbully_core as bbc

board = bbc.BoardCore()

# Play a small sequence of moves (columns 0–6)
for col in [3, 2, 3, 2, 3, 4, 3]:
    assert board.play(col)

print(board)

# Check if the side to move has an immediate winning move
print(board.canWin())      # False
print(board.hasWin())      # True, since the last move created 4-in-a-row

You can also check if a specific column is a winning move:

board = bbc.BoardCore()
board.setBoard([3, 3, 3, 3, 2, 2, 4, 4])

print(board.canWin())  # True
print(board.canWin(1))  # True  – playing in column 1 wins
print(board.canWin(3))  # False – no win in column 3

Set a Board from a Move List or Array
import bitbully.bitbully_core as bbc

board = bbc.BoardCore()

# From a move sequence (recommended)
assert board.setBoard([0, 1, 2, 3, 3, 2, 1, 0])

# Convert to 7x6 array (columns × rows)
array = board.toArray()
print(len(array), len(array[0]))  # 7 x 6

# From a 7x6 array of tokens (1 = Yellow, 2 = Red)
array_board = [[0 for _ in range(6)] for _ in range(7)]
array_board[3][0] = 1  # Yellow in center column bottom row
b2 = bbc.BoardCore()
assert b2.setBoard(array_board)

Generate Random Boards
import bitbully.bitbully_core as bbc

board, moves = bbc.BoardCore.randomBoard(10, True)

print(board)   # Random, valid board
print(moves)   # List of 10 column indices
print(board.canWin())  # Usually False for random boards in this setup

Mirroring Boards and Symmetry
import bitbully.bitbully_core as bbc

board = bbc.BoardCore()
board.setBoard([0, 1, 2])      # Left side

mirrored = board.mirror()      # Mirror around center column
print(board)
print(mirrored)

# Double-mirroring returns the original position
assert board == mirrored.mirror()

Hashing, Equality, and Copies
import bitbully.bitbully_core as bbc

b1 = bbc.BoardCore()
b2 = bbc.BoardCore()

moves = [0, 1, 2, 3]
for m in moves:
    b1.play(m)
    b2.play(m)

assert b1 == b2
assert b1.hash() == b2.hash()
assert b1.uid() == b2.uid()

# Copying a board
b3 = b1.copy()           # or bbc.BoardCore(b1)
assert b3 == b1

b3.play(4)               # Modify the copy
assert b3 != b1
assert b3.hash() != b1.hash()

These examples are based on the internal test suite and show typical ways of interacting with BoardCore programmatically.

BitBullyCore: Connect-4 Solver Examples

The BitBullyCore module provides a high-performance Connect-4 solver written in C++ and exposed to Python. You can evaluate positions, score all legal moves, or run the full MTD(f) search.


Solve a Position with MTD(f)
import bitbully.bitbully_core as bbc

# Construct a position: alternate moves into the center column
board = bbc.BoardCore()
for _ in range(6):
    board.play(3)  # Column 3

solver = bbc.BitBullyCore()
score = solver.mtdf(board, first_guess=0)

print("Best score:", score)

mtdf returns an integer score from the perspective of the side to move (positive = winning, negative = losing).


Score All Moves in a Position

scoreMoves(board) returns a list of 7 integers: the evaluated score for playing in each column (0–6). Illegal moves (full columns) are still included in the list.

import bitbully.bitbully_core as bbc

board = bbc.BoardCore()
board.setBoard([3, 4, 1, 1, 0, 2, 2, 2])

solver = bbc.BitBullyCore()
scores = solver.scoreMoves(board)

print("Move scores:", scores)
# Example output:
# [-3, -3, 1, -4, 3, -2, -2]

Using the Solver in a Loop (Move Selection)
import bitbully.bitbully_core as bbc
import time

board = bbc.BoardCore()
solver = bbc.BitBullyCore()

for move in [3, 4, 1, 1, 0, 2, 2, 2]:  # Example opening
    board.play(move)

start = time.perf_counter()
scores = solver.scoreMoves(board)
best_move = max(range(7), key=lambda c: scores[c])
print(f"Time: {round(time.perf_counter() - start, 2)} seconds!")
print("Scores:", scores)
print("Best move suggestion:", best_move)
# best move is into column 4

Further Examples using the BitBully Solver

You can initialize a board using an array with shape (7, 6) (columns first) and solve it:

from bitbully import bitbully_core

# Define a Connect-4 board as an array (7 columns x 6 rows)
# You may also define the board using a numpy array if numpy is installed
# 0 = Empty, 1 = Yellow, 2 = Red
# Here, the left column represents the bottom row of the board
board_array = [
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [1, 2, 1, 2, 1, 0],
    [0, 0, 0, 0, 0, 0],
    [2, 1, 2, 0, 0, 0],
    [0, 0, 0, 0, 0, 0]
]

# Convert the array to the BoardCore board
board = bitbully_core.BoardCore()
assert board.setBoard(board_array), "Invalid board!"

print(board)

# Solve the position
solver = bitbully_core.BitBullyCore()
score = solver.mtdf(board, first_guess=0)
print(f"Best score for the current board: {score}") # expected score: 1

Run the Bitbully solver with an opening book (here: 12-ply opening book with winning distances):

from bitbully import bitbully_core as bbc
import bitbully_databases as bbd
import importlib.resources

db_path = bbd.BitBullyDatabases.get_database_path("12-ply-dist")
bitbully = bbc.BitBullyCore(db_path)
b = bbc.BoardCore()  # Empty board
bitbully.scoreMoves(b)  # expected result: [-2, -1, 0, 1, 0, -1, -2]

Further Usage Examples for BitBully Core

Create all Positions with (up to) n tokens starting from Board b:

from bitbully import bitbully_core as bbc

b = bbc.BoardCore()  # empty board
board_list_3ply = b.allPositions(3, True)  # All positions with exactly 3 tokens
len(board_list_3ply)  # should be 238 according to https://oeis.org/A212693

Opening Book Examples

BitBully Databases provide fast lookup tables (opening books) for Connect-4, allowing you to query evaluated positions, check if a board is known, and retrieve win/loss/distance values.

Load an Opening Book
import bitbully_databases as bbd
import bitbully.bitbully_core as bbc

# Load the 8-ply opening book (no distances)
db_path = bbd.BitBullyDatabases.get_database_path("8-ply")
book = bbc.OpeningBookCore(db_path, is_8ply=True, with_distances=False)

print(book.getBookSize())  # e.g., 34515
print(book.getNPly())      # -> 8

Accessing Entries

Each entry consists of (key, value) where:

  • key is the Huffman-encoded board state
  • value is the evaluation (win/loss/draw or distance)
k, v = book.getEntry(0)
print(k, v)

Evaluating a Board Position
import bitbully.bitbully_core as bbc

board = bbc.BoardCore()
board.setBoard([2, 3, 3, 3, 3, 3, 5, 5])  # Sequence of column moves

value = book.getBoardValue(board)
print("Evaluation:", value)

Check Whether a Position Is in the Opening Book

The books only contain one variant for mirror-symmetric positions:

board = bbc.BoardCore()
board.setBoard([1, 3, 4, 3, 4, 4, 3, 3])

print(book.isInBook(board))              # e.g., False
print(book.isInBook(board.mirror()))     # e.g., True, checks symmetric position

Benchmarking

This section describes how BitBully was benchmarked against a strong Baseline solver, how the reported numbers were obtained, and how to interpret the reported p-values.

Setup

The benchmark compares BitBully against the Baseline on identical Connect-4 positions, measuring wall-clock solve time per position.

Position generation

  • For a fixed search depth nply, random but legal Connect-4 positions are generated.
  • Each position is constructed by playing a random sequence of nply moves from the empty board (non-trivial positions, meaning that they do not contain a winning position for the player to move next.).
  • The same position is evaluated by both solvers.

Solvers

  • Opening books are deactivated for both solvers.
  • BitBully: evaluated using its mtdf search with transposition tables enabled. Transposition Table size: $2^{20}=1,048,576$ entries.
  • Baseline: evaluated using its standard solve routine, with transposition tables enabled. Transposition Table size: $2^{24}=16,777,216$ entries.
  • For correctness, both solvers must return the same game-theoretic score; execution aborts if a mismatch occurs.

Timing: Each solver is timed independently on the same board.

Repetitions

  • For each nply, the experiment is repeated nrepeats times (typically 25–2000, depending on search depth).
  • In this case, transposition-table resets are enabled to control caching effects.

Aggregation & Reported Metrics

From the recorded timings, the following statistics are computed:

  • Mean ± Standard Deviation: Arithmetic mean and sample standard deviation of solve times (in seconds).
  • Speed-up: Speed-up = mean(Baseline) / mean(BitBully). Values > 1 indicate that BitBully is faster on average.
  • Paired Statistical Test (p-value):A paired Wilcoxon signed-rank test is applied to the timing pairs.

Statistical Significance & p-Value Interpretation

To assess whether observed speed differences are statistically meaningful, a Wilcoxon signed-rank test is used:

Why Wilcoxon?

  • Timing distributions are often non-Gaussian and heavy-tailed.
  • Measurements are paired (same position, two solvers).
  • Wilcoxon is non-parametric and robust to outliers.

Test definition

  • Null hypothesis (H₀): BitBully is not faster than Baseline.
  • Alternative hypothesis (H₁): BitBully is faster than Baseline.

p-value meaning

  • The p-value is the probability of observing the measured (or more extreme) speed advantage if H₀ were true.
  • Very small p-values indicate overwhelming evidence that BitBully is faster.
  • Values ≥ 0.05 indicate that the observed difference is not statistically significant at the 5% level.

Notes & Caveats

  • We left the size of the transposition table for Baseline as-is, likely giving it a slight advantage over BitBully.
  • Benchmarks measure solve time, not node count or memory usage.
  • Results might depend on compiler optimizations, hardware, and cache behavior.
  • Small p-values are expected for large nrepeats when even modest speed differences are consistent.

The full benchmark code and analysis notebook are included in the repository for reproducibility.

Machine Setup

FUJITSU LIFEBOOK N532 from 2012.

WSL Setup:

+------------------+-------------------------------------------+
| OS               | Linux 6.6.87.2-microsoft-standard-WSL2    |
| Distribution     | Ubuntu 22.04.4 LTS                        |
| Architecture     | x86_64                                    |
| CPU              | x86_64                                    |
| Cores (phys/log) | 2 / 4                                     |
| RAM              | 8 GiB                                     |
| GPU              | None / Unknown                            |
| Python           | CPython 3.11.0rc1                         |
| Compiler         | gcc (Ubuntu 13.1.0-8ubuntu1~22.04) 13.1.0 |
| Fingerprint      | ea68f7b392a21300                          |
+------------------+-------------------------------------------+

Output of systeminfo on Windows CMD (reformatted):

┌────────────────────────┬────────────────────────────────────────────────┐
│ Manufacturer / Model   │ FUJITSU LIFEBOOK N532                          │
│ System Type            │ x64-based PC                                   │
│ BIOS                   │ AMI 1.12A (02.07.2012)                         │
├────────────────────────┼────────────────────────────────────────────────┤
│ Operating System       │ Windows 10 Pro                                 │
│ OS Version             │ 10.0.19045 (Build 19045)                       │
│ Install Date           │ 25.08.2020                                     │
│ Time Zone              │ UTC+01:00 (Central Europe)                     │
├────────────────────────┼────────────────────────────────────────────────┤
│ CPU                    │ Intel Core (Family 6, Model 58)                │
│ Nominal Frequency      │ ~2.9 GHz                                       │
│ CPU Count              │ 1 physical processor                           │
├────────────────────────┼────────────────────────────────────────────────┤
│ Physical Memory        │ 16 GB RAM                                      │
│ Available Memory       │ ~6 GB                                          │
│ Virtual Memory (Max)   │ ~20 GB                                         │
├────────────────────────┼────────────────────────────────────────────────┤
│ Virtualization         │ Hypervisor detected (Hyper-V / WSL active)     │
└────────────────────────┴────────────────────────────────────────────────┘

Results (BitBully vs Baseline)

  • Times in seconds: (Mean ± Std)
nply nrepeats BitBully [s] Baseline [s] Speed-up p-value Significant
(empty board) 0 25 197.5023 ± 7.8470 386.3228 ± 17.3956 1.96 2.98e-08 *
1 50 117.0179 ± 42.2797 151.0143 ± 55.6900 1.29 4.73e-05 *
2 250 59.7311 ± 60.7071 68.5259 ± 68.1356 1.15 0.000299 *
3 500 27.6295 ± 27.4619 31.9983 ± 33.9760 1.16 2.7e-10 *
4 500 11.0583 ± 12.9979 15.5146 ± 20.8694 1.4 2.33e-37 *
5 500 4.1296 ± 5.0585 5.8230 ± 7.2602 1.41 1.04e-47 *
6 1000 2.1579 ± 2.8749 3.2826 ± 4.6897 1.52 5.26e-92 *
7 1000 0.9930 ± 1.2125 1.4714 ± 2.2783 1.48 2.52e-72 *
8 1000 0.5269 ± 0.6483 0.8201 ± 1.2421 1.56 3.44e-62 *
9 1000 0.2537 ± 0.3188 0.3709 ± 0.6311 1.46 3.54e-41 *
10 1000 0.1523 ± 0.1849 0.2035 ± 0.2979 1.34 4.68e-20 *
11 1000 0.0808 ± 0.1201 0.1102 ± 0.1997 1.36 8.42e-17 *
12 1000 0.0487 ± 0.0761 0.0601 ± 0.1179 1.23 0.00366 *
13 1000 0.0254 ± 0.0429 0.0293 ± 0.0525 1.15 0.0028 *
14 2000 0.0176 ± 0.0286 0.0180 ± 0.0325 1.02 1
15 2000 0.0110 ± 0.0204 0.0104 ± 0.0221 0.94 1
16 2000 0.0065 ± 0.0131 0.0060 ± 0.0136 0.93 1

Interpretation of the Benchmarking Results

The benchmarking results highlight two distinct performance regimes: early-game (low ply) and mid-to-late-game (higher ply) positions.

Early game (0–6 ply). Starting from an empty board (nply = 0), BitBully requires on average ~198 seconds solving the whole game, while the Baseline solver needs ~386 seconds, resulting in an almost 2× speed-up. This gap remains clearly visible up to about 6 ply, where BitBully consistently outperforms the Baseline, with small p-values indicating strong statistical significance. This regime corresponds to the hardest positions in Connect-4: the branching factor is maximal and the solver must explore a large fraction of the game tree. Here, BitBully's search strategy, move ordering, and pruning heuristics pay off most.

Transition region (7–12 ply). As more tokens are placed on the board, the average solve time drops rapidly for both solvers—from seconds to tens of milliseconds. BitBully still maintains a consistent advantage (≈ 1.2×–1.5×), and the differences remain statistically significant. However, the absolute time savings shrink quickly: improving from 0.8 s to 0.5 s is far less noticeable than shaving minutes off an empty-board solve.

Late game (≥14 ply). Beyond roughly 14 ply, solve times become negligible (on the order of a few milliseconds or less) for both solvers. In this region, many positions are tactically forced, shallow, or immediately decidable via pruning. Measured differences are dominated by some BitBully overhead and partially by noise, and no statistically significant advantage can be established.

Advanced Build and Install

Prerequisites

  • Python: Version 3.10 or higher
  • CMake: Version 3.15 or higher
  • C++ Compiler: A compiler supporting C++-17 (e.g., GCC, Clang, MSVC)
  • Python Development Headers: Required for building the Python bindings

From Source

  1. Clone the repository:

    git clone https://github.com/MarkusThill/BitBully.git
    cd BitBully
    git submodule update --init --recursive # – Initialize and update submodules.
    
  2. Build and install the Python package:

    pip install .
    

Building Static Library with CMake

  1. Create a build directory and configure the project:

    mkdir build && cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release
    
  2. Build the a static library:

    cmake --build . --target cppBitBully
    

Contributing & Development

Whether you're fixing a bug, optimizing performance, or extending BitBully with new features, contributions are highly appreciated. The full development guide provides everything you need to work on the project efficiently:

📘 Complete Development Documentation https://markusthill.github.io/BitBully/develop/

It covers all essential workflows, including:

  • Repository setup: cloning, submodules, virtual environments
  • Development environment: installing dev dependencies, using editable mode
  • Code quality tools: ruff, mypy/pyrefly, clang-format, pre-commit, commitizen
  • Building the project: local wheels, CMake, cibuildwheel, sdist
  • Testing: running pytest, filtering tests, coverage, CI integration
  • Release workflow: semantic versioning, version bumping, tagging, PyPI/TestPyPI publishing
  • Debugging & tooling: GDB, Doxygen, mkdocs, stub generation for pybind11
  • Platform notes: Debian/Linux setup, gcov matching, MSVC quirks
  • Cheatsheets: Git, submodules, CMake, Docker, Ruby/Jekyll, npm, environment management

If you're contributing code, please:

  1. Follow the coding standards and formatting tools (ruff, mypy, clang-format).
  2. Install and run pre-commit hooks before committing.
  3. Write or update tests for all behavioral changes.
  4. Use Commitizen for semantic commit messages and versioning.
  5. Open an issue or discussion for major changes.

Pull requests are welcome — thank you for helping improve BitBully! 🚀

License

This project is licensed under the AGPL-3.0 license.

Contact

If you have any questions or feedback, feel free to reach out:

Further Ressources

Acknowledgments

Many of the concepts and techniques used in this project are inspired by the outstanding Connect-4 solvers developed by Pascal Pons and John Tromp. Their work has been invaluable in shaping this effort:


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

bitbully-0.0.76.tar.gz (8.1 MB view details)

Uploaded Source

Built Distributions

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

bitbully-0.0.76-pp311-pypy311_pp73-win_amd64.whl (491.2 kB view details)

Uploaded PyPyWindows x86-64

bitbully-0.0.76-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (366.9 kB view details)

Uploaded PyPymanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

bitbully-0.0.76-pp311-pypy311_pp73-macosx_11_0_arm64.whl (263.8 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

bitbully-0.0.76-pp310-pypy310_pp73-win_amd64.whl (489.9 kB view details)

Uploaded PyPyWindows x86-64

bitbully-0.0.76-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (365.3 kB view details)

Uploaded PyPymanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

bitbully-0.0.76-pp310-pypy310_pp73-macosx_11_0_arm64.whl (262.6 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

bitbully-0.0.76-cp314-cp314-win_amd64.whl (502.5 kB view details)

Uploaded CPython 3.14Windows x86-64

bitbully-0.0.76-cp314-cp314-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

bitbully-0.0.76-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (368.5 kB view details)

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

bitbully-0.0.76-cp314-cp314-macosx_11_0_arm64.whl (264.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

bitbully-0.0.76-cp313-cp313-win_amd64.whl (492.5 kB view details)

Uploaded CPython 3.13Windows x86-64

bitbully-0.0.76-cp313-cp313-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

bitbully-0.0.76-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (368.3 kB view details)

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

bitbully-0.0.76-cp313-cp313-macosx_11_0_arm64.whl (264.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

bitbully-0.0.76-cp312-cp312-win_amd64.whl (492.5 kB view details)

Uploaded CPython 3.12Windows x86-64

bitbully-0.0.76-cp312-cp312-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

bitbully-0.0.76-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (368.9 kB view details)

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

bitbully-0.0.76-cp312-cp312-macosx_11_0_arm64.whl (264.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

bitbully-0.0.76-cp311-cp311-win_amd64.whl (491.7 kB view details)

Uploaded CPython 3.11Windows x86-64

bitbully-0.0.76-cp311-cp311-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

bitbully-0.0.76-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (366.3 kB view details)

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

bitbully-0.0.76-cp311-cp311-macosx_11_0_arm64.whl (263.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

bitbully-0.0.76-cp310-cp310-win_amd64.whl (490.6 kB view details)

Uploaded CPython 3.10Windows x86-64

bitbully-0.0.76-cp310-cp310-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

bitbully-0.0.76-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (364.4 kB view details)

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

bitbully-0.0.76-cp310-cp310-macosx_11_0_arm64.whl (262.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file bitbully-0.0.76.tar.gz.

File metadata

  • Download URL: bitbully-0.0.76.tar.gz
  • Upload date:
  • Size: 8.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bitbully-0.0.76.tar.gz
Algorithm Hash digest
SHA256 12a7db98c33791157de857c2b6b6d8ef2a7c5a01aa5e64f5743286eca277f6db
MD5 f11b01f57924899823ed27458d4182e5
BLAKE2b-256 8963c0d9d5cb6eecfb11f0274a4e2cc1759bb837bada59e81f5804729ddb3f34

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76.tar.gz:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-pp311-pypy311_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 c84c39de2f23378e73d6b37f84191cf0354fa5ddf58505614d1ec73cefd618d5
MD5 e0db86d1694488c9f0efe21a8f8794d9
BLAKE2b-256 b14efa8e69e98c656bddbf00cef39680a84abd59571f86404de9928f07b77016

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-pp311-pypy311_pp73-win_amd64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4715cb413e9618ee795bd70a0148fb27c9d17288e123b28f8bfd763a8a8566dd
MD5 c2b49292945c1edf533ce096aaf296f9
BLAKE2b-256 63e084842a31ec005fe64c7c0fa63b88f20deecd43cf295c989066b2eb3c8a01

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-pp311-pypy311_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2512ac69c88ae1285b830c38ec252bca0325a0d51357cd351e7a29416fd11574
MD5 66a17a31b753fb72fa80156f70eb3cbb
BLAKE2b-256 ff46dfeec4d5104e2dab4a0e5bc5bba015d162f583ff2c17cfc01af8df98d839

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-pp311-pypy311_pp73-macosx_11_0_arm64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 68ddf060b02520206294f818e5e4eb30e594de1c2ff99f4af53d64e7faa10804
MD5 3436ae8d402a3be935b5a7e11a6097b6
BLAKE2b-256 1cfba7f7576ddf576bd7593298ee00f14a37afd7507a1596a08206dba3ba9542

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-pp310-pypy310_pp73-win_amd64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 38b8c263f7ef98e608f155c4eefaf0763c925a736fcf626dd9b6b2360c519b8f
MD5 be9323e61c1e5da2a9d20186fffa0868
BLAKE2b-256 a680a8629b9862250e50f22f718bba8c0b0a27249726c0c4c82c05326ad3f75b

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f9b01e8a80c0ecb71d02d71b6401fb33ce6618a2110106de5834a4003cff7be
MD5 b70ea9e83f62ad482b7ed27060452a1c
BLAKE2b-256 a2ddc93d4fe96d0860210605369275ac0363ea1e76e14c5cd757b5b805505d23

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-pp310-pypy310_pp73-macosx_11_0_arm64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: bitbully-0.0.76-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 502.5 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bitbully-0.0.76-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b1d57d3ad748deb634f2ae85579092027d1894fca8af23ee4d653aec671f7c13
MD5 325e91b6c1d0ae5d9709b970df35f3ee
BLAKE2b-256 1ff54462bdb39621510c1459e3d0dd908a312aa79243bacf89093930c3d42907

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp314-cp314-win_amd64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f12816219983e9fdec25294546714e3a9f427f552ea2696cbc00d3a931929eba
MD5 9cdc3e1558a5bb2b6f46090ecc8aba37
BLAKE2b-256 4bb3cc019cdc0d8af05db11bea890e1aca806a0a3094f936fc7df4ac23ebed14

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cf4aeba21b1e104068b859a6f686fe17f6758768e90974eaae01e53400ced42e
MD5 6e717bdc6c8eded227f545e859b20ea2
BLAKE2b-256 b7b92097093bc8856bef3e00bb4d86c3fa7a63c067d0e719dfe0a6acadf56767

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 01122f1e24c262c77007940e543a020c128612809e7faef2cd50122fe48264e2
MD5 9b1fe74ca5053d15bf6191cd31dff51f
BLAKE2b-256 01b4156ebb4f4157f5b7e7ae54d86a010c7e65c131858c6dae594cf15159223f

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: bitbully-0.0.76-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 492.5 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bitbully-0.0.76-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fdbc7fcba1d052fd88a29e83f4e424e4f680bb555856f26d3631a7b0b37ed57b
MD5 8d81d18dc802dd88feaf42c9b2552f66
BLAKE2b-256 18a0fbf3f74faa0abc9b68c3b9ddb606732a266596dfe37fcdc122c4d297f22b

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp313-cp313-win_amd64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d1c021d1c8b6aa355edeb61d35c3afe46cd6c34c2c0923b32a4073d01cc4d383
MD5 4d784ca72b1691cb9625efe5d2f08795
BLAKE2b-256 51030023990dafcbc699791bb7a78602c3b590c74fd20fef5832af18b237f952

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ce8f4732427a87326de78d7fe6a0d8749ee22de00e5e4ff195741112109cc4c1
MD5 68a9ec76952b097a9287209045609ab2
BLAKE2b-256 c7ac29aef441661819d18325a76b9d4e838b567745ed0e7d589a854cd34858f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25c7341b6f3cd853f21bd8e07106c556b3b8edb0c96549cabcc120ebbe0b13c2
MD5 5a8f46efc425a4ce90eddd8cd198bd8f
BLAKE2b-256 015e32689ffffb979f96457be17b6deea7f38e973f6348e95263125ab73b8d99

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: bitbully-0.0.76-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 492.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bitbully-0.0.76-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bd7309f3741cb6e1c097cf3b837d1024c8e4894f54557304bf00e71ce58c1a1e
MD5 6e704f0ece9086e1a915e780ea754b2e
BLAKE2b-256 c9a39903f3ad24e480f181e1c23779a9e778cac6a926370ddcde264053f0cd5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp312-cp312-win_amd64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2177023bcc174cff0af91316b4db66a9c2e2511fa524f663c012773033f40abe
MD5 00fc14fd8bfbd0b4e2ae861712426342
BLAKE2b-256 f718141127e4a98ceb5e8b22791a21c82558f74b8ff358859716f24abb1ec4d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a711be7c3afd2a22c6dda4ea6679e3b2a49107ca5c1ff3ef3309ea4aceb57afc
MD5 1965a927e785445c467b74a583c1dc20
BLAKE2b-256 57311302f351ee7f0a661917e82c49ece3468b279c10a64ccfaa88a870113a6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 837e679928b0c6660800a7d08dcba6e11909874dc8ce0685c5c3e829a91136e2
MD5 277216e28dc8e60e70b4a21671e47ef2
BLAKE2b-256 ab2a06a56078a88e1779795d7ea9a1bee235e863d26bc3b2705aad50461b8e1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: bitbully-0.0.76-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 491.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bitbully-0.0.76-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 529901c0cc34fd9451d3ff2563c55ba328bdffcd2bfc30747d20c7103dcee23b
MD5 e0d1f53205fee169ca57b3afe4b6b210
BLAKE2b-256 ea31cddb3d83d0aae2d93859d88e08a3ab770e7bc064deb978fd0dbecc065e00

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp311-cp311-win_amd64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 15a8ad58ff83a9beb5d5f9eb65ca7006c422b9078a6e5477e2fc7704a885883b
MD5 f4a8fd8b3a451ecab0055c786c2cd0eb
BLAKE2b-256 9fbb5881c4a07191626e958106e1d908688cb2eab26b7bb3fea92fc2b74e3786

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fb8bd85fe316903657bc3e2705e7526d1d8272b04e5a9e0863bddd8b74e8ba0e
MD5 750ebf2b9ae8ac465d39d7f3e7e5051e
BLAKE2b-256 689d914a6b3222a75cbc390d1c5612720abff24449e43241eb1c12f2e481ca3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6c48e94d2b389a1b18ce08749f840dfbf11d58039f4b1054e4f1ab2747e284fd
MD5 acd1eb51551a5eee230afce3a9b4fb7d
BLAKE2b-256 54dea93be83ee99edc5131de8f1de1310d90f0d727d579d4b55a22d0463aa0d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: bitbully-0.0.76-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 490.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bitbully-0.0.76-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4789988f15a417f73d65e00ce3836db18c21d0af47a10399bd869cdde88cc479
MD5 d7b90d4a0e483f7f050a00e7832d43fb
BLAKE2b-256 2f47954b74ba499f1de892c28c4696b6a0e716d50e5b79f8f9ab078c93c7cee3

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp310-cp310-win_amd64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4fa8cf556557a26dad6033395da0e871faafb481080c930e5686a47aac635e9e
MD5 51cfa0561e61fa059c3c9ecce725519f
BLAKE2b-256 77f590935d382a4ef94dc5d4806ec7708f9ed9b844315b08d4e5d6bd777a1a21

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cd5e4d12543c9b2be6264cbfb9d16c020e31bcb3b8de9728375ed3d538412dd7
MD5 83467919a9e60bb0d1c1e5f470870e9e
BLAKE2b-256 c1a730ad53f7a7ccc8fa1eec9d66a342ecadb42adbf8bef81aab7eb34759b06b

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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

File details

Details for the file bitbully-0.0.76-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.76-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d20062a7588f569c66fffc48c2855da2931159b2f9b1eebde4d37fe73bacaef
MD5 b45404544d7fa63e54f5d0971ffa274d
BLAKE2b-256 955cd4381fc3bcd4056ffb14b3dcd4b8a122d54a916c0d1e1c93017f96b21269

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.76-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: wheels.yml on MarkusThill/BitBully

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