Skip to main content

High-performance C implementation of BPE tokenizer

Project description

Build

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.8
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 Distribution

c_bpe-0.1.0.tar.gz (35.0 MB view details)

Uploaded Source

Built Distributions

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

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.13+ x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.13+ x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.9+ x86-64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.9+ x86-64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

c_bpe-0.1.0-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-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for c_bpe-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f7d6800f81ff08daac8ac042be8e9687b79d9b211524cf750b91e3b4c64e4486
MD5 d76d037508481709360881e024b3f070
BLAKE2b-256 4ff6acad2f5e7fe85b0b2a6e0bedc7d9688d5c1db228732cb1a6367f169c0bcc

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0.tar.gz:

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-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: c_bpe-0.1.0-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-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 742d712fc68ced78e669fdf66e786d360e4fda4ca2608568671864495e8eb887
MD5 cfd0bd48c0db78db46ef64b1a6edf2c2
BLAKE2b-256 487b933e1f3376014c5666bb54a0a84c161274252c4a462f8bba20b0834a28ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 10455ad497b2fa3d61057055ecadd2326222f03999b9767d0ad11429d533df2b
MD5 2731aca67643c8fa278708c9fcdb4433
BLAKE2b-256 0c449d73fb25e180afa7d3480739a12f529014e1b78b8e502d90457cb6675ba8

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b55002659ea3510950ca3b2d28c9e507396627f9ed1b60c4754c07073cfb725
MD5 89f3368ac8958d9db09f7b801e8a1eb3
BLAKE2b-256 ef651fe826827582184f7c1d038fe4388f99e92ccdf213127066b474de1038d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b2ecc4585919757af97885f6083e4a23954a7cb2677d444bf56e9de13d8e2866
MD5 f1eb2123fe050a6e4a63c444b77518b7
BLAKE2b-256 720a566d0ab35531b807b98a3bc279f39cd6b8504b1b7b0f2accac16fe3f3190

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: c_bpe-0.1.0-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-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 51dd170a22ba989c7622c797360903075d1c8631b82ae43be98c51d009773f94
MD5 e0fb4a7eba9be23c3ca5a677d4ffe1ee
BLAKE2b-256 3c4171fc1e798f280a0b715dc06c075d9a56971c653f623e3cdecd67974bc9e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 68f12ab6c91a31404c9aa02b000b6c6a80c064e532180535e0f5a0bfb256cb20
MD5 58eb0978176742d0298f5b0dbc1d8919
BLAKE2b-256 16c6815089aa85ad7d0112e501c2f1c045082f3dcc832d9ce8cdab9973163819

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 667bdd4a61325fb9ef05c07b6ff1ef63147c3bd0d2f38b429d86d038d39312e3
MD5 f6bb65940b27bfe9eb275ace9fc9df14
BLAKE2b-256 88126ee3c228d6795644a404d93949b4bc56007d6d4fcbd1640fad5f2c72bab8

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6ceac4809a995769f586dd6683de44cb9047daedc4f75af0bab615b87b9347bc
MD5 994c6ffed051df4ca36654cddc486522
BLAKE2b-256 964daee67ad78610732236485eed4f9605dd567bdb561dde3c76e16fc74237b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: c_bpe-0.1.0-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-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d855da6091d3a9bd9116f69a864a58d4f0dab14dac8f31eb0d7c30025f7372bf
MD5 b56556856b9c4cad018c7509db1ee3b9
BLAKE2b-256 447a0c5696370a1a68ad8a7aaf36f4b4314546d95e292259b1b131932c95881f

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f296330a2d6637d07b21f2c25a6501b44e1d4edf6ed5d5340b12eddba3fc962b
MD5 d8d1235cb2b07ef02fb930450028b5a8
BLAKE2b-256 1a8b095f70a1d0fb0201190d7738ec5d9500b5adfeb5019b52998cace4efb4b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c995e7ef97b6e0407ebb50aa6e098d899060ec96661b1ac3e30f25e76d78634
MD5 83775bd040ffa4767b2b4b19847ad6a2
BLAKE2b-256 0c87aebeb508e95754d4e6325fbdf44b7928f983eb7031848b24f366cb15048f

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e5ae1fbdf73885217a9ae1226ffd05300c009c0904fa165d64868939ee5f1fa3
MD5 67447c1ab2026bfb939f218f56d8993b
BLAKE2b-256 b91d4eddfb2728838466d55668fa23c42a67bde9774c7d77f346a83d2a7c673e

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: c_bpe-0.1.0-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-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a5a5c4a8e3022cb35123fc3b0457ac49e008881cd353bb6e3be878bf67e9c1e3
MD5 dc1b4883836f2ffb68d5e1ee1aa2f7bf
BLAKE2b-256 f616febeae9ce34a7b2c9977e6e52adf20c0cc59074f74dc189902464033d2e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3ee5e2963f5e99ee1e702e83e9d73f9ff23411749cebf9a0795cf44aac5fe8ff
MD5 acaf2c8534caaafe9ff813d5e91e9f20
BLAKE2b-256 1116c3ef757f64355d0c231a470d560a8a70bdcc343fd48891bb4ce527367700

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e38916ec5829549afc0960d79a2195e9b1dab41eb1623d2bed9e7888abdf7dc
MD5 d5571efce9dfa1f0b9c4605d5eb95e57
BLAKE2b-256 287f42c36814e3e3c1b62052492751e3fbbdad0017bb405dc0d55993f3c64b06

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 123d89ba3149fdb6c58af821d9d880ac401a39bd7d3427d10ac107e1467e9b7f
MD5 e47c67fa6562797c4fb6bbf007046596
BLAKE2b-256 d6834bc8226a80aeaa7fb96e09d90d1caddd0629418ae0af69464fa0615d2f8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: c_bpe-0.1.0-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-0.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 09c719342daa87141d8c33f6c27da28725500c629e115468519421b4f12e0d1f
MD5 ab48343a5320f7a6e96b0839df92ea96
BLAKE2b-256 24b8f0767755f5fcac112bf79fc3c2a1a87d469473690950b7c7cba0a1cfca1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 358e4d11cca21d1aaabd333dca38f093a63df60597567891016770833bb1e059
MD5 ea30afad251ee9f6d712e4768724e2ff
BLAKE2b-256 e91d697e3621d450436dc010f2b5e8c50c49ab3b5d8a4fa5d929475349d6d1fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: c_bpe-0.1.0-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-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74dd6b3dab8e1c68df92936c5f7f6e926f7de469009578979a3fd9cf39e10c3b
MD5 41f889cc8f4c926d921896b17262d89b
BLAKE2b-256 082fcc27dcb1f6414e57eb9c0f3fb86ed64735ee9da205b782bbeedc7e2154c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for c_bpe-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c8b76953baf233f6455be6755e4fb95c72b9c90b10a797311afe0bda5e008ffc
MD5 de1d8170fb36469f9c624ec0473c304b
BLAKE2b-256 297fea99888ae4af650d35556d8286aa0dad0bd6257c220c097a773db34ea7f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for c_bpe-0.1.0-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