Skip to main content

High-performance C implementation of BPE tokenizer

Project description

CI

c-bpe

High-performance C implementation of BPE (Byte Pair Encoding) tokenizer with Python bindings.

This library provides fast and correct token counting for chunking algorithms with a focus on high performance. It implements novel algorithms for BPE tokenization that are both correct and significantly faster than existing solutions.

Attribution

This project is based on rs-bpe by gweidart, a Rust implementation of BPE tokenization. The C implementation ports the same novel algorithms to pure C for maximum portability and performance. The original Rust implementation is included in the rust/ directory for comparison benchmarking.

Installation

pip install c-bpe

c_bpe consistently outperforms tiktoken (March 7, 2026)

c_bpe throughput vs tiktoken

Key Features

  • Efficient token counting with linear time complexity even for adversarial inputs
  • Split text at exact token boundaries while respecting UTF-8 character boundaries
  • Incrementally count tokens while appending text to a chunk
  • Calculate token counts for sub-ranges of text with constant-time complexity
  • Python bindings with OpenAI-compatible interface

These operations are particularly important for LLM applications but are challenging to implement efficiently for BPE tokenization.

Motivation (problems this library aims to solve)

Existing BPE tokenizers often face performance and correctness issues when used for chunking operations:

Split-at-N-Tokens Problem

Naively splitting text after N tokens by first encoding the entire text and then selecting a boundary often produces suboptimal results:

  • The split point might not align with a UTF-8 character boundary
  • Dropping tokens until a character boundary is reached might result in chunks much shorter than desired
  • The algorithm wastes resources by encoding more text than necessary

Incremental Counting Problem

Incrementally counting tokens as text is appended is challenging with traditional implementations:

  • Recomputing the encoding after every append leads to quadratic complexity
  • Approximating counts by aggregating piece counts leads to incorrect results due to BPE's non-monotonic nature
  • Incorrect counting can cause problems when staying within token limits for LLM APIs

Interval Counting Problem

Counting tokens for arbitrary subranges traditionally requires reprocessing the entire substring:

  • Leads to poor performance for applications that need to count many subranges
  • Makes operations like binary search for token boundaries inefficient

Our library provides novel algorithms to solve these problems with superior performance characteristics.

Implementation

Core Algorithm

The novel O(n) algorithm preserves the exact output of the original BPE algorithm by tracking encodings of all text prefixes using mathematical properties of valid BPE encodings.

Instead of storing full token sequences for each prefix, only the last token of each prefix needs to be remembered. This is possible because:

  1. There exists exactly one valid encoding sequence for any input text
  2. Any substring of a valid encoding sequence is itself a valid encoding sequence
  3. Knowing the last token of a valid encoding sequence uniquely determines the full sequence

The algorithm determines the correct last token for each prefix by checking token compatibility with the preceding token, yielding a linear-time solution.

Backtracking Optimization

For average-case improvement, a backtracking-based algorithm:

  1. Tries the greedy approach first, using the longest matching token at each step
  2. Backtracks when necessary to produce a valid BPE encoding
  3. Uses a bitfield so worst-case runtime stays linear in input length

Data Structures

  • BytePairEncoding struct: Stores the concatenated token byte array, per-token start offsets, a BytesMap (bytes→token id), split_left/split_right arrays for token decomposition, a PairMap (pair→merged token), three Aho-Corasick automatons, and a next_prefix_match table.

  • PairMap: Open-addressing hash table (linear probing, 50% max load) for (token1, token2) → merged_id lookups. Uses a splitmix64 finaliser instead of byte-by-byte FNV-1a for the fixed 8-byte key, keeping the merge step cache-friendly.

  • BytesMap: Open-addressing hash table for bytes → token_id lookups. Uses FNV-1a hashing identical to Rust's fnv crate, ensuring consistent hash values across both implementations.

Aho-Corasick Automatons

Three Double-Array Aho-Corasick automatons are built over the token vocabulary at initialisation time:

  • longest_searcher (AC_KIND_LEFTMOST_LONGEST): leftmost-longest token match at each position — used for the backtrack encoder.
  • overlapping_searcher (AC_KIND_OVERLAPPING_FWD): all overlapping forward matches — used by AppendableEncoder to maintain per-byte AC state.
  • overlapping_searcher_rev (AC_KIND_OVERLAPPING_REV): all overlapping reverse matches — used by PrependableEncoder.

The Double-Array layout gives O(1) state transitions per input byte, making the automaton traversal extremely cache-friendly.

Special Purpose Encoders

  • AppendableEncoder: Stores one AppState per byte appended (ac_state, last_token, running count), allowing O(1) amortised count queries via the forward AC automaton.
  • PrependableEncoder: Mirror of AppendableEncoder using the reverse AC automaton — supports O(1) amortised queries while prepending.
  • IntervalEncoding: Precomputes a last_token, tree_id, tree_end, and tree_depth array per byte position, enabling typically-O(1) count(start, end) queries.
  • OpenAI-compatible Tokenizer: Hand-coded pre-tokenisation with PCRE2 UCD tables (regex splitting identical to tiktoken) feeding into the shared BPE encode/decode logic.

Performance

Our benchmarks show significant performance improvements over existing implementations:

Note: All benchmark results shown here were achieved using the Python bindings, not the direct native implementation. This provides a more realistic representation of the performance users will experience in Python applications.

Single-Text Tokenization

Text Size c_bpe vs tiktoken rs_bpe vs tiktoken
Small 2.9× faster 3.0× faster
Medium 1.7× faster 1.6× faster
Large 4.4× faster 2.3× faster

Encoding speed (benchmark.py results):

Encoding throughput

SMALL TEXT:
  tiktoken: 0.000102s
  c_bpe:    0.000035s
  rs_bpe:   0.000034s

MEDIUM TEXT:
  tiktoken: 0.001735s
  c_bpe:    0.001007s
  rs_bpe:   0.001092s

LARGE TEXT:
  tiktoken: 0.068093s
  c_bpe:    0.015330s
  rs_bpe:   0.029147s

Both libraries also provide significantly faster decoding and roundtrip operations:

Decoding speed:

Tokenizer timing comparison

SMALL TEXT:
  tiktoken: 0.000027s
  c_bpe:    0.000011s
  rs_bpe:   0.000018s

MEDIUM TEXT:
  tiktoken: 0.000200s
  c_bpe:    0.000076s
  rs_bpe:   0.000105s

LARGE TEXT:
  tiktoken: 0.003799s
  c_bpe:    0.001709s
  rs_bpe:   0.002504s

Batch Processing Performance

Batch Size c_bpe encode c_bpe decode rs_bpe encode rs_bpe decode
1 35× faster 165× faster 79× faster 94× faster
10 32× faster 92× faster 43× faster 100× faster
100 5× faster 94× faster 17× faster 52× faster
1000 22× faster 57× faster 13× faster 31× faster

Encode speedup vs tiktoken (all sizes):

Encode speedup vs tiktoken

Worst-Case Performance

While tiktoken shows quadratic growth for certain adversarial inputs, c_bpe maintains linear scaling even in worst-case scenarios. This is critical for production systems that need consistent performance guarantees.

Key Performance Advantages

  1. Memory Efficiency: Compact data structures (tightly-packed token byte arrays, power-of-2 hash tables at ≤50% load) and no redundant token storage
  2. Cache-Friendly Hash Tables: PairMap uses a splitmix64 finaliser for fixed 8-byte keys; BytesMap uses FNV-1a — both with linear probing for sequential memory access
  3. O(1) State Transitions: Double-Array Aho-Corasick automatons enable single-byte-per-step token matching without backtracking through the vocabulary
  4. Full LTO: Compiled with full Link-Time Optimisation (MSVC /GL+/LTCG / GCC -flto)
  5. No Correctness Trade-offs: Verified to produce token-for-token identical output to tiktoken

All benchmarks were run on standard hardware and results may vary based on your specific environment.

Python Usage Examples

Basic Tokenization

from c_bpe.bpe import openai

# Load OpenAI tokenizers (automatically caches for reuse)
cl100k_tokenizer = openai.cl100k_base()  # GPT-3.5/4 tokenizer
o200k_tokenizer = openai.o200k_base()    # o200k tokenizer

# Basic encoding
text = "Hello, world! This is an example."
tokens = cl100k_tokenizer.encode(text)
print(f"Encoded tokens: {tokens}")

# Basic decoding
decoded_text = cl100k_tokenizer.decode(tokens)
print(f"Decoded text: {decoded_text}")

# Simple token counting
token_count = cl100k_tokenizer.count(text)
print(f"Token count: {token_count}")

Efficient Token Limiting

One of the key features is the ability to efficiently count tokens up to a limit, which is useful when you need to stay within token constraints:

from c_bpe.bpe import openai

tokenizer = openai.cl100k_base()
max_tokens = 50

# Count tokens until limit is reached
text = "This is a long text that might exceed our token limit... " * 20
char_position = tokenizer.count_till_limit(text, max_tokens)

if char_position is not None:
    # We reached the limit before the end of the text
    truncated_text = text[:char_position]
    print(f"Truncated to {tokenizer.count(truncated_text)} tokens")
    print(f"Truncated text: {truncated_text}")
else:
    # The entire text is within our token limit
    print(f"Text is within token limit: {tokenizer.count(text)} tokens")

Batch Processing

c_bpe excels at batch processing, which is perfect for processing large datasets:

from c_bpe.bpe import openai
import time

# Load the tokenizer
tokenizer = openai.cl100k_base()

# Create a batch of texts
texts = [
    "This is the first document to encode.",
    "Here's another one with different content.",
    "A third document with some more text to process.",
    # Add more as needed...
]

# Configure parallel processing options (optional)
parallel_options = openai.ParallelOptions(
    min_batch_size=20,      # Minimum batch size to engage parallel processing
    chunk_size=100,         # Number of texts to process in each thread
    max_threads=0,          # 0 means use optimal thread count (based on CPU cores)
    use_thread_pool=True    # Reuse thread pool for better performance
)

# Encode batch with performance metrics
start_time = time.time()
result = tokenizer.encode_batch(texts, parallel_options)
end_time = time.time()

print(f"Processed {len(texts)} texts in {result.time_taken:.6f}s")
print(f"Total tokens: {result.total_tokens}")
print(f"Throughput: {result.total_tokens / result.time_taken:.1f} tokens/second")

# Access individual token lists
for i, tokens in enumerate(result.tokens):
    print(f"Text {i} has {len(tokens)} tokens")

Text Chunking

c_bpe can be used to efficiently chunk text based on token counts:

from c_bpe.bpe import openai

tokenizer = openai.cl100k_base()

def chunk_text(text, max_chunk_tokens=1024, overlap_tokens=50):
    """Split text into chunks of approximately max_chunk_tokens."""
    chunks = []

    # Get the full text token count
    total_tokens = tokenizer.count(text)

    if total_tokens <= max_chunk_tokens:
        return [text]

    # Keep track of where we are in the text
    start_pos = 0

    while start_pos < len(text):
        # Find where to end this chunk
        char_position = tokenizer.count_till_limit(text[start_pos:], max_chunk_tokens)

        if char_position is None:
            # The rest of the text fits within our limit
            chunks.append(text[start_pos:])
            break

        # Add the chunk
        end_pos = start_pos + char_position
        chunks.append(text[start_pos:end_pos])

        # Move to the next chunk, considering overlap
        if overlap_tokens > 0 and end_pos < len(text):
            # Move back by overlap tokens
            overlap_char_position = tokenizer.count_till_limit(
                text[start_pos:end_pos], max_chunk_tokens - overlap_tokens
            )
            if overlap_char_position is not None:
                start_pos += overlap_char_position
            else:
                start_pos = end_pos
        else:
            start_pos = end_pos

    return chunks

# Example usage
long_text = "This is a long document that needs to be split into chunks. " * 100
chunks = chunk_text(long_text, max_chunk_tokens=100, overlap_tokens=10)

print(f"Split text into {len(chunks)} chunks:")
for i, chunk in enumerate(chunks):
    token_count = tokenizer.count(chunk)
    print(f"Chunk {i}: {token_count} tokens, {len(chunk)} chars")

Building from Source

Prerequisites

Requirement c_bpe rs_bpe (companion)
Python ≥ 3.9
C11 compiler (GCC, Clang, or MSVC)
Rust toolchain (stable)
setuptools (pip install setuptools)
maturin (pip install maturin)

c_bpe (C extension)

# Clone the repository
git clone https://github.com/andrey-savov/c-bpe.git
cd c-bpe

# Create and activate a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate   # Linux/macOS
# .venv\Scripts\activate    # Windows

# Install in development mode (editable)
pip install -e .

# Or build the extension in-place without installing
python setup.py build_ext --inplace

The build auto-detects the compiler and applies platform-appropriate optimisations:

  • GCC/Clang: -O3 -march=native -flto -DNDEBUG
  • MSVC: /O2 /Ox /GL /DNDEBUG with /LTCG at link time

PCRE2 Unicode tables are bundled in third_party/; no external PCRE2 installation is required.

rs_bpe (Rust companion — for benchmarking)

The rust/ directory contains the original Rust implementation (rs-bpe) for comparison benchmarking:

cd rust

# Install maturin if not already present
pip install maturin

# Build and install in development mode
maturin develop --release

The Rust toolchain can be installed from rustup.rs.

Installing both side by side

Both packages can be installed in the same environment — they use separate namespaces (c_bpe and rs_bpe):

cd c-bpe
pip install -e .                                    # c_bpe
cd rust && pip install maturin && maturin develop --release   # rs_bpe

Verify:

from c_bpe.bpe import openai as c_openai
from rs_bpe.bpe import openai as rs_openai

c_tok  = c_openai.cl100k_base()
rs_tok = rs_openai.cl100k_base()

text = "Hello, world!"
assert c_tok.encode(text) == rs_tok.encode(text)
print("Both implementations installed and producing identical output.")

Running tests

# From the repository root, with both implementations installed:
pip install pytest pytest-benchmark

# Correctness tests
pytest tests/test_basic.py -v

# Benchmarks
pytest tests/test_benchmarks.py --benchmark-only -v

Acknowledgements

This project was developed with the assistance of Claude Code, using Claude Opus 4.6 and Claude Sonnet 4.6 models by Anthropic.

License

MIT License

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

c_bpe-1.0.2-cp313-cp313-win_amd64.whl (31.3 MB view details)

Uploaded CPython 3.13Windows x86-64

c_bpe-1.0.2-cp313-cp313-manylinux_2_28_x86_64.whl (31.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

c_bpe-1.0.2-cp313-cp313-macosx_11_0_arm64.whl (31.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

c_bpe-1.0.2-cp313-cp313-macosx_10_13_x86_64.whl (31.3 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

c_bpe-1.0.2-cp312-cp312-win_amd64.whl (31.3 MB view details)

Uploaded CPython 3.12Windows x86-64

c_bpe-1.0.2-cp312-cp312-manylinux_2_28_x86_64.whl (31.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

c_bpe-1.0.2-cp312-cp312-macosx_11_0_arm64.whl (31.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

c_bpe-1.0.2-cp312-cp312-macosx_10_13_x86_64.whl (31.3 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

c_bpe-1.0.2-cp311-cp311-win_amd64.whl (31.3 MB view details)

Uploaded CPython 3.11Windows x86-64

c_bpe-1.0.2-cp311-cp311-manylinux_2_28_x86_64.whl (31.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

c_bpe-1.0.2-cp311-cp311-macosx_11_0_arm64.whl (31.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

c_bpe-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl (31.3 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

c_bpe-1.0.2-cp310-cp310-win_amd64.whl (31.3 MB view details)

Uploaded CPython 3.10Windows x86-64

c_bpe-1.0.2-cp310-cp310-manylinux_2_28_x86_64.whl (31.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

c_bpe-1.0.2-cp310-cp310-macosx_11_0_arm64.whl (31.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

c_bpe-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl (31.3 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

c_bpe-1.0.2-cp39-cp39-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.9Windows x86-64

c_bpe-1.0.2-cp39-cp39-manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

c_bpe-1.0.2-cp39-cp39-macosx_11_0_arm64.whl (31.4 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

c_bpe-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file c_bpe-1.0.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: c_bpe-1.0.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 31.3 MB
  • 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 c_bpe-1.0.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b507849f2dbc60f989fa07746346e576b0c15a8171a15d4869b1e4ddb86a0816
MD5 7c26db229b2109bd4abc0438c210dabf
BLAKE2b-256 31067910bee10e3526ddc19a1517bd4390f0fa1f4c60f3a3d0311474f61ad7f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp313-cp313-win_amd64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0aa8689c03ac33567135b44057e2fbef9ca69068cb1849a1b9775fc62dd42b2a
MD5 86b01c4b181d573add41e24836cf6879
BLAKE2b-256 41ae5c9cb772910496236a7626e8db97afd5d3f134c1075eb1a136dc767fb43b

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 71b4f49243a5f7d0d55b8f6e10c9555e3a4c64822d1956d43050664ea29de586
MD5 4059c85c567cf82a03c8844eede6124e
BLAKE2b-256 51a57ce99915b328cc669b2a02dafcc235d8da375254d90bf5f3f28e91025f9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 65bd8df3f987d4debe000d753f43c04b8dd6c008ce9ab82bc4c22574a68a3e99
MD5 fc665fc68323e24f8dd2e151022b06aa
BLAKE2b-256 f95c05219f7231e41678738a3a1fb03007c6928465c06b4221a740660e7c9d8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: c_bpe-1.0.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 31.3 MB
  • 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 c_bpe-1.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3495b9a53679a139b4a7d4d44cffb29827f05e445def45846b0e33bdd9211d27
MD5 110f6893392a9e958fdfa3dee1c48fed
BLAKE2b-256 9129cba631afcda7a5ad0fe749bd55f6746445c876a1dbc2309e4fb6dbbad09f

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp312-cp312-win_amd64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 35ec500ba780cd54df58d0d69e52e00eb3846e5fa86828ff68fffb4f25d835d6
MD5 8626e617a67db8169046a519601d93ba
BLAKE2b-256 dca566515ede392ebe83e8d226f4b4fae7937163d43c9b3de4e264306d1250ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f97478c09a007be037894499a19a9c346b6f7bc6e220de8047c438a5130eee42
MD5 1a9da04e6c5df96930cdfcb65674ad88
BLAKE2b-256 546e4324345990939bae93d20090bda9b135220936b9bb8bf60e8ca9591c2c30

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a7302cce140be8c730870d2815cf0fec2be8ed419a999407a9c81adb344d61f8
MD5 d7df8e83e102ca083c06f1622fcfb1c3
BLAKE2b-256 5262c6f756583e96c112ac9339a97d97e484c659ffc492e52dcc2a0eb84eb882

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: c_bpe-1.0.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 31.3 MB
  • 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 c_bpe-1.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ef91f05b4ab39b092c5818c9aca543d8b498fbcc18d7cc1058601afd337d84ba
MD5 1f4ee94ef3ced698359bd691efb42394
BLAKE2b-256 b7c5ff20073862e0e469c6fc9bd6dc0d5c6b0464d4d16fb689162911405a7ab1

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp311-cp311-win_amd64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 733311daf8a95f54de190115ea21ef53cd7ffa808da01e46272712c68e383323
MD5 acfee79ee202577c863d355c69deed0a
BLAKE2b-256 13a18ac1c652a9b2a0c292eae873fb824e55c1db210efb40a7adcbceda1eb153

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 45ccd4c8d93836809aab21ba88256ff682ef7f055f5e354c272f88a381138f96
MD5 cbe895993bd33c97aba3d67b780ed80a
BLAKE2b-256 8e386f184b30cc20e381a8c83eb2c6e62ea6c61ed5b220a581a7188fdb2ee55d

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 35e40473b26682bf6ff3c22be9bd8032857390a9bb2ba49afc7ecbc473715018
MD5 7dfc5973510a036a8026021173bcadcc
BLAKE2b-256 69cd1050d93350c0b8454f673999de06b80e8e2590cf5bedf043ad28fe37e355

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: c_bpe-1.0.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 31.3 MB
  • 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 c_bpe-1.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a6a8bd9a8c3f4fddb6973fbb3129d0065095612913e4ff2f00c939985a770114
MD5 8de22a90d6e8b0bf052fe27fdb949d15
BLAKE2b-256 4b03194c70821fd5c2e87be45d2f5cf86a99c3a8574b595db16643a2340b7714

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp310-cp310-win_amd64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b5323ef539ea9b5fedefc288cb571d40f71ba57fb5fd34a7faf10827b88d5582
MD5 7fedc619c4bbe6f1464ba1910556c158
BLAKE2b-256 a9cf3155c7d53c3c045ca1695f41be012734cb4462d5e3c2cc909bd9c6c4a871

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1c572e06062494d3b5e4048bec697e8add11a88696b6c3458c2f27025b0a88c
MD5 7019647def7561d300bd871eaa40bd8c
BLAKE2b-256 c0b45212c43e1ad76d49b83e89fc9c40a72495bbf7d21b03e767707851b26bca

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 843161763b04446792d53c5c54f3057eb7668ff141ce366056ac43b46e2b0d2c
MD5 c2c8706d2b495ef519bdf93657a16289
BLAKE2b-256 c6c115b75a8a03177ad172baa89df1851ab4a9ed40cde770c859476477f202ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: c_bpe-1.0.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for c_bpe-1.0.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5303d4e32ec324b0525f1780de22dacd1080c971bd1aa6a550ed1edab1c60e5b
MD5 0c516140758238f9a0076d382874f09f
BLAKE2b-256 e8de66ca5791269ee2c6115dc39e4164739eac50913376040b2ed6b7aa362121

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp39-cp39-win_amd64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f0bd1b40eb8dd79c9c18284f9d04578ad2016e695198ec7cb1d7cba84f9c5283
MD5 1c67133c19bcdcab7b92c30c2856d51b
BLAKE2b-256 020a230519daedb6f4816ad17bffcde5d0242be2c154449e524b6cbb3c4ec354

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp39-cp39-manylinux_2_28_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: c_bpe-1.0.2-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 31.4 MB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for c_bpe-1.0.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8bc5a0351cd70192fd7560b01440f1954a03d3bf3fef5a01d3ca78eb60554bf7
MD5 92643d166da37c2ac4c4715f2418db93
BLAKE2b-256 6b8d2b28ec68951020bb93a26a4cc948bee5bb7ca9a2ac90a4f7adc23ebeb988

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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

File details

Details for the file c_bpe-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 10f546fb0947acd205a2106f042507467d77a4d2b1090d42df4ee01bc71e8b48
MD5 cd638043e3681585cc789245637b880c
BLAKE2b-256 07e94a74843614d5055dcc1b1e377ad7f8565b5a2dd379bbb3ccfb75c2004d0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: release.yml on andrey-savov/c-bpe

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