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.77.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.77-pp311-pypy311_pp73-win_amd64.whl (491.2 kB view details)

Uploaded PyPyWindows x86-64

bitbully-0.0.77-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.77-pp311-pypy311_pp73-macosx_11_0_arm64.whl (263.8 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

bitbully-0.0.77-pp310-pypy310_pp73-win_amd64.whl (490.0 kB view details)

Uploaded PyPyWindows x86-64

bitbully-0.0.77-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.77-pp310-pypy310_pp73-macosx_11_0_arm64.whl (262.7 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

bitbully-0.0.77-cp314-cp314-win_amd64.whl (502.6 kB view details)

Uploaded CPython 3.14Windows x86-64

bitbully-0.0.77-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.77-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.77-cp314-cp314-macosx_11_0_arm64.whl (264.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

bitbully-0.0.77-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.77-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (368.4 kB view details)

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

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

Uploaded CPython 3.13macOS 11.0+ ARM64

bitbully-0.0.77-cp312-cp312-win_amd64.whl (492.6 kB view details)

Uploaded CPython 3.12Windows x86-64

bitbully-0.0.77-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.77-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.77-cp312-cp312-macosx_11_0_arm64.whl (264.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

bitbully-0.0.77-cp311-cp311-win_amd64.whl (491.8 kB view details)

Uploaded CPython 3.11Windows x86-64

bitbully-0.0.77-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.77-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.77-cp311-cp311-macosx_11_0_arm64.whl (263.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

bitbully-0.0.77-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.77-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.77-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.77.tar.gz.

File metadata

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

File hashes

Hashes for bitbully-0.0.77.tar.gz
Algorithm Hash digest
SHA256 49736c8816450e5ae607fb4b952f5809061e27c51c806279f762f8c73b07b6b2
MD5 9471d013dd8b14666027c7df4bec4ade
BLAKE2b-256 4dce7be14d49b6d10887f978f01b69c460abc910b4ee07dc124c647905b85ae4

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77.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.77-pp311-pypy311_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 9a9dd416778e54ce5ddb751f74100db5d87ac9334a52000704856a08ff79052b
MD5 a1e0354c434d1d5db31538b3e6fc816d
BLAKE2b-256 7fabb432bb0eaf7119fce33ae664d7c0112989e07c10bb7b349f2f56d4fbbdaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 401d958cebcf6f064f482f2655898bf3cdb5167febe8c981c8a63241a57ee325
MD5 45a970c75d4a43e10028eaf8a67a3c40
BLAKE2b-256 3670c4bea60d5f295aa299a4a30ded96d78cdf64ac11f1dcb45af3c8e090d939

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-pp311-pypy311_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 238b422a7fc74a7466e2f04c078938da4f445e185d8a0ef2bf0c183dc044d787
MD5 7606684c46d44c751e0a36a210f61a9a
BLAKE2b-256 b7e15936b2ccebeeb3d068f9b22048be05f23ad87298df6f93aedd315afae280

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 5184665574017b1c79ff13031965adf7dff0d7c7924fdebfbcaeb83b67e9fc2e
MD5 d7bb58a8042801db93ec8a0281cd8e5f
BLAKE2b-256 1bf56e706bff508241816e74c45f14092408b20607894c75a945407b648aacc7

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7736ba37deb29193d1cd282a2e0f49423291c7fe707a96eee07bc2045f06dfcd
MD5 e92cf79d29f5d112df60b7bce5a8967d
BLAKE2b-256 e4c5be0722c083647cbe1c119e3bccc1b05f41f9cf361ca7e757caba1814d758

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 29c8e906b1a769bbf51e1c3d2e677be61bdd133e72d2da7038558e04b412039b
MD5 da92479ca234fa4a93441f303bdbc8de
BLAKE2b-256 3413ffa531d4c49162e26496898a7a36843956c38c10a158a10ea480c98285f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp314-cp314-win_amd64.whl.

File metadata

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

File hashes

Hashes for bitbully-0.0.77-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 9d473a0fab89c85bcd2dbe8690ae62de60aeca9ed9dfbb4148d0393156681d0a
MD5 e967673cde0c96de13afbd3c0210bf20
BLAKE2b-256 1906e2f7429714c6bd9c78a988535fb0b638191a179bbd3937483de8bb51fe42

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 caf0cdbb239858897f28644361e010acbd2852cf170c54078f38303982d53048
MD5 6ee5a9f10cb7611d9fd97e6e709b1d58
BLAKE2b-256 a01393207e8e800aeddcbe44eb7b9ea15052d861e540a8daa9631219dbbc1a6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fa4786e14ebab23db808727785e9e3935222399774bda4c656c46f8e61c48997
MD5 aa21e715aa334c7fbf5785b73d7601f7
BLAKE2b-256 4ff05952c001b7a7b7bf090361c1080f967872c79367a0522332bbff35cd753a

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1937fcdfa5aa501310f4ea02610f0d84593e3ddade9374925e91c2f153ad17db
MD5 f235c690b6bec768c32480ec7cd251c9
BLAKE2b-256 7060011b6fd273646f37385a7f040a67afb5134c223bd3f51dfcdb3e3a201844

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: bitbully-0.0.77-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.12

File hashes

Hashes for bitbully-0.0.77-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d77286e76e7ac8db0b35b158de161bb470d37f8f9b68273ea3474b57826317ad
MD5 b2d9f24f4d9f89dc73b690c51f4355b4
BLAKE2b-256 1bad888d6a0df94ef64b3daf244d1d3353ea65bb1b8f77e2f8c61c28a1137334

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5e68bc6798b1aef53f06d9cb2dff140a9eec3a9553223d25b288b9788563d466
MD5 1fc4d6e406dbac0575e39d3f848f8420
BLAKE2b-256 7606369c7e59d18ed4fafca36398747052be85dc601373d87eb74a546b0c7a0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f60bbd2bfcae1785cb32bf01bd190545505436e6139ad1e51a3f6fba57f772b1
MD5 2200e4d3626a832d74dbef45102d9e95
BLAKE2b-256 3585d73194904f49b90e48095b1fe8702810780e4cd42e8c23e4267f53c78dda

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 55db921fbdb68a5ea8a4d46149c26047531acecc64700d32fe66745afb42d9fb
MD5 eb5061e9d26e3acd1d89069a1d986818
BLAKE2b-256 994f5403cbacaa06c6b51ea7f77a23c011331819422372147b13ec855b17fef7

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp312-cp312-win_amd64.whl.

File metadata

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

File hashes

Hashes for bitbully-0.0.77-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 702008210caadbc98e67b597a2b65db242ba3ff053b073c6c7811af46abe3827
MD5 6dc28cf8776fc22bcf86f44e2e58e540
BLAKE2b-256 af5c21f50caa27d0b9fbb15854c8d47836c2a7bc7cb5d4cb4c3267cec358f262

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ce763a137c66d2db2211cbcc4930d60882d35659ae002826c29e331578521b56
MD5 2e54ffaa6a83f5b7a5e6b5cbd9315cb0
BLAKE2b-256 cb6a6eb787fb0c8e5ea207600eb70e7186e73e0b9fde8b0013f9f43c29e6abaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1f319312df6dd3728d8dd8fe469306d537c3acf88792e03b170911dbf06b498
MD5 91088f723cede744f850bfcb051f2e09
BLAKE2b-256 d62dfde21460014bdd36d080c7e0b58d5e1f4a4cfae44927741deaa95938f3fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c4a2fec0995ec5907b937cc4c282f2fcaabef27a9ea5393e2a81ac8f371a80d
MD5 98da6eec745fb6f03100d6a02b7f7c5e
BLAKE2b-256 69c92e71a0d22b2caa061dca6a3c9f85ec8e3601f8574812087aaa2bef382184

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp311-cp311-win_amd64.whl.

File metadata

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

File hashes

Hashes for bitbully-0.0.77-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 090bb06910770a1f4703326e886e70e6b9ddef4128b88b21031f5dc990906c23
MD5 c81be71df82fb7938e64969e73468300
BLAKE2b-256 950cb561c43171adb30041f827a0b89eb2a47267cfd5b54200026eec216ff9ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 52c4b1c5b3d09e4f5a36d11d0ae292e2a6e0bab457dd45d8e22c0b01b65ec377
MD5 25c98f23db0d183f2e7200cfd8a2eb88
BLAKE2b-256 47c6d067fc4d65ad7751f0654725529b3799c937f7474b9da97bcaa27edaa92a

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 02fdfe99614d3c4033fe1326faf44453c312f1ba0933cc71326344665bd1b41d
MD5 29c15f5ad149572e52fcbce3e709c9d0
BLAKE2b-256 cf76a335c5f96dd4e4d7b31bc3e471672b61f16e5d9a57e1288fac00a94e6791

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2ab1bc741a4b24d5eb5f4e42702ece58a58c42e0929a452bb2e07ed2770a1666
MD5 4c24d76b45439dc97bee40130b1ad515
BLAKE2b-256 351d52103b8dfa2d1512bb9157e16a8589a3789e6a06a3ae173afed1db23978c

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: bitbully-0.0.77-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.12

File hashes

Hashes for bitbully-0.0.77-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5982e4f6e9a50b22b1d17e37b660e85b00ee98f57f23455736e70c51578a2b8d
MD5 320fe29895a6b81d1a873b1557ae5771
BLAKE2b-256 10f739f2634ccaf736c5818ee705973b55c7d40d29189ca13b38c76caf5eea7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a2d2b73b4089623ae2ffd193b609897dad8faa4011b2498b304c761538101574
MD5 c4e428f28838f9c63a3f4958ec2264bf
BLAKE2b-256 999222ae0ea3ecda4eb7e07450ff8b3ba034be7f17778cb861a73152d56b166f

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b18f955072ae6d8d748178d714821eb41302673a1c6e82d44057b39781034a3f
MD5 a94a209d15de76d1b7d628d0ffc0fb3b
BLAKE2b-256 799e62d6713c818c369380c820e4313eadfcaad7365ccedd28a26db1e7009027

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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.77-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bitbully-0.0.77-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aaa223f958e81298f9489e4ddc6b1591ac26a97fd520d50cfe2faad407ac799a
MD5 49c048328e039736c8ea1bd527735448
BLAKE2b-256 cc029d4317d5f6e70cbb6ef40fce004fbaffac6df770ea6f4eeb309eb0c48b4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitbully-0.0.77-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