A BPE (Byte Pair Encoding) tokenizer for molecular SMILES written in Rust with Python bindings
Project description
rustmolbpe
A high-performance BPE (Byte Pair Encoding) tokenizer for molecular SMILES written in Rust with Python bindings.
Features
- Four tokenizers, one API: from a plain character-level tokenizer up to atom-level BPE — pick the granularity you need and compare them directly
- SMILES-aware tokenization: atom-level pre-tokenization correctly handles multi-character atoms (Br, Cl), bracket atoms ([C@@H], [N+]), ring closures, and stereochemistry
- Fast training: Parallel processing with Rayon for efficient training on large molecular datasets
- Streaming support: Train on datasets of any size with configurable buffer sizes
- SMILESPE compatibility: Load and save vocabularies in SMILESPE format
- HuggingFace interop: Export to / import from the
tokenizerstokenizer.jsonformat for use withtransformers - Python bindings: Seamless integration with Python via PyO3
Installation
From PyPI (Recommended)
pip install rustmolbpe
From source (requires Rust toolchain)
# Clone the repository
git clone https://github.com/HFooladi/rustmolbpe.git
cd rustmolbpe
# Create virtual environment with uv
uv venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install build dependencies and build
uv pip install maturin
maturin develop --release
Development install
# Create virtual environment with uv
uv venv .venv
source .venv/bin/activate
# Install dev dependencies
uv pip install maturin pytest pytest-cov
# Development build (faster, unoptimized)
maturin develop
Quick Start
import rustmolbpe
# Create a tokenizer
tokenizer = rustmolbpe.SmilesTokenizer()
# Train on SMILES data
smiles_data = [
"CCO", # ethanol
"c1ccccc1", # benzene
"CC(=O)O", # acetic acid
# ... more SMILES
]
tokenizer.train_from_iterator(iter(smiles_data), vocab_size=1000)
# Encode SMILES
ids = tokenizer.encode("CCO")
print(ids) # e.g., [42, 15]
# Decode back to SMILES
smiles = tokenizer.decode(ids)
print(smiles) # "CCO"
# Batch encode (parallelized)
all_ids = tokenizer.batch_encode(["CCO", "c1ccccc1", "CC(=O)O"])
# Save/load vocabulary
tokenizer.save_vocabulary("my_vocab.txt")
tokenizer.load_vocabulary("my_vocab.txt")
Tokenizers
rustmolbpe provides four tokenizers spanning a ladder from simplest to most
advanced. They share an identical API, so you can swap one for another and
compare their behavior:
| Class | Granularity | Learns merges | Description |
|---|---|---|---|
CharTokenizer |
character | no | Splits a SMILES string into individual characters |
AtomTokenizer |
atom (regex) | no | Splits into atoms/structural tokens (Br, Cl, [C@@H] kept whole) |
CharBPETokenizer |
character | yes | BPE merges learned on top of character splitting |
SmilesTokenizer |
atom (regex) | yes | BPE merges learned on top of atom splitting ("SPE") |
import rustmolbpe
char = rustmolbpe.CharTokenizer()
atom = rustmolbpe.AtomTokenizer()
# Character-level: "Cl" is two tokens ('C', 'l')
len(char.encode("CCl")) # 3
# Atom-level: chlorine "Cl" is a single token
len(atom.encode("CCl")) # 2
# BPE tokenizers are trained to merge frequent units
char_bpe = rustmolbpe.CharBPETokenizer()
char_bpe.train_from_iterator(iter(smiles_data), vocab_size=1000)
CharTokenizer and AtomTokenizer have no merges: train_from_iterator only
builds the base vocabulary (vocab_size is ignored), num_merges is always 0,
and vocabulary file I/O is not supported. Use has_vocabulary() to check
whether a base vocabulary has been built and is_trained() to check for merges.
Comparing tokenizers on ChEMBL
tokenizer_stats.py runs every tokenizer over the ChEMBL 36 dataset and reports
per-molecule token-count statistics (mean, median, std, percentiles) as a
console table, a CSV, and a histogram figure:
pip install rustmolbpe[stats] # numpy + matplotlib
python tokenizer_stats.py # full ChEMBL 36
python tokenizer_stats.py --limit 100000 # quick sample
Special Tokens
The tokenizer includes special tokens for sequence modeling, always at fixed IDs:
| Token | ID | Purpose |
|---|---|---|
<pad> |
0 | Padding for batch processing |
<unk> |
1 | Unknown/out-of-vocabulary atoms |
<bos> |
2 | Beginning of sequence |
<eos> |
3 | End of sequence |
import rustmolbpe
tokenizer = rustmolbpe.SmilesTokenizer()
tokenizer.load_vocabulary("vocab.txt")
# Access special token IDs
print(tokenizer.pad_token_id) # 0
print(tokenizer.unk_token_id) # 1
print(tokenizer.bos_token_id) # 2
print(tokenizer.eos_token_id) # 3
# Encode with BOS/EOS tokens
ids = tokenizer.encode("CCO", add_special_tokens=True)
# [2, 667, 3] -> [<bos>, CCO, <eos>]
# Unknown atoms are encoded as UNK
ids = tokenizer.encode("C[Xx]C") # Unknown atom [Xx]
# Contains unk_token_id for unknown atoms
Batch Padding
For training transformer models, sequences need to be padded to equal length:
import rustmolbpe
tokenizer = rustmolbpe.SmilesTokenizer()
tokenizer.load_vocabulary("vocab.txt")
# Encode and pad in one step
smiles_list = ["CCO", "c1ccccc1", "CC(=O)Nc1ccc(O)cc1"]
result = tokenizer.encode_batch_padded(
smiles_list,
max_length=10, # Pad/truncate to this length
padding="right", # "right" or "left"
truncation=True, # Truncate sequences longer than max_length
add_special_tokens=True, # Add BOS/EOS tokens
return_attention_mask=True
)
print(result["input_ids"]) # [[2, 667, 3, 0, 0, ...], ...]
print(result["attention_mask"]) # [[1, 1, 1, 0, 0, ...], ...]
# Or pad pre-encoded sequences
sequences = tokenizer.batch_encode(smiles_list)
result = tokenizer.pad(
sequences,
max_length=10,
padding="right",
truncation=True,
return_attention_mask=True
)
Atom-level Tokenization
The tokenizer first splits SMILES into atom-level tokens:
import rustmolbpe
# Simple molecule
tokens = rustmolbpe.atomwise_tokenize("CCO")
# ['C', 'C', 'O']
# Halogen atoms
tokens = rustmolbpe.atomwise_tokenize("CBr")
# ['C', 'Br']
# Bracket atoms with charges/stereochemistry
tokens = rustmolbpe.atomwise_tokenize("[C@@H](O)C")
# ['[C@@H]', '(', 'O', ')', 'C']
# Aromatic rings
tokens = rustmolbpe.atomwise_tokenize("c1ccccc1")
# ['c', '1', 'c', 'c', 'c', 'c', 'c', '1']
API Reference
SmilesTokenizer
class SmilesTokenizer:
def __init__(self) -> None:
"""Create a new tokenizer with special tokens initialized."""
def train_from_iterator(
self,
iterator: Iterator[str],
vocab_size: int,
buffer_size: int = 8192,
min_frequency: int = 2
) -> None:
"""Train the tokenizer from a SMILES iterator."""
def load_vocabulary(self, path: str) -> None:
"""Load vocabulary from SMILESPE format file."""
def save_vocabulary(self, path: str) -> None:
"""Save vocabulary to SMILESPE format file."""
def encode(self, smiles: str, add_special_tokens: bool = False) -> List[int]:
"""Encode a SMILES string to token IDs.
Args:
smiles: SMILES string to encode
add_special_tokens: If True, add BOS/EOS tokens
"""
def decode(self, ids: List[int]) -> str:
"""Decode token IDs back to SMILES string."""
def batch_encode(self, smiles_list: List[str], add_special_tokens: bool = False) -> List[List[int]]:
"""Encode multiple SMILES in parallel."""
def batch_decode(self, ids_list: List[List[int]]) -> List[str]:
"""Decode multiple token sequences in parallel."""
def pad(
self,
sequences: List[List[int]],
max_length: Optional[int] = None,
padding: str = "right",
truncation: bool = False,
return_attention_mask: bool = True
) -> Dict[str, List[List[int]]]:
"""Pad sequences to equal length.
Args:
sequences: List of token ID sequences
max_length: Target length (default: longest sequence)
padding: "right" or "left"
truncation: If True, truncate sequences longer than max_length
return_attention_mask: If True, include attention_mask in result
Returns:
Dict with "input_ids" and optionally "attention_mask"
"""
def encode_batch_padded(
self,
smiles_list: List[str],
max_length: Optional[int] = None,
padding: str = "right",
truncation: bool = False,
add_special_tokens: bool = False,
return_attention_mask: bool = True
) -> Dict[str, List[List[int]]]:
"""Encode multiple SMILES and pad to equal length.
Convenience method combining batch_encode and pad.
"""
# Vocabulary properties
@property
def vocab_size(self) -> int:
"""Total vocabulary size (special + base atoms + merges)."""
@property
def base_vocab_size(self) -> int:
"""Number of base atom tokens."""
@property
def num_merges(self) -> int:
"""Number of learned merge operations."""
# Special token properties
@property
def pad_token_id(self) -> int:
"""PAD token ID (always 0)."""
@property
def unk_token_id(self) -> int:
"""UNK token ID (always 1)."""
@property
def bos_token_id(self) -> int:
"""BOS token ID (always 2)."""
@property
def eos_token_id(self) -> int:
"""EOS token ID (always 3)."""
@property
def pad_token(self) -> str:
"""PAD token string ('<pad>')."""
@property
def unk_token(self) -> str:
"""UNK token string ('<unk>')."""
@property
def bos_token(self) -> str:
"""BOS token string ('<bos>')."""
@property
def eos_token(self) -> str:
"""EOS token string ('<eos>')."""
# Vocabulary access
def get_vocabulary(self) -> List[Tuple[str, int]]:
"""Get vocabulary as (token, id) pairs."""
def id_to_token(self, id: int) -> str:
"""Convert token ID to token string."""
def token_to_id(self, token: str) -> int:
"""Convert token string to token ID."""
# State inspection
def is_trained(self) -> bool:
"""Check if tokenizer has been trained or has vocabulary loaded."""
def get_merges(self) -> List[Tuple[str, str, str]]:
"""Get merge rules as (left, right, merged) tuples."""
# Pickle support (for serialization and multiprocessing)
# Implements __reduce__ and __setstate__ for full pickle compatibility
Utility Functions
def atomwise_tokenize(smiles: str) -> List[str]:
"""Tokenize SMILES into atom-level tokens."""
Vocabulary Format
The vocabulary file format is compatible with SMILESPE:
c c
C C
O )
c 1
= O
...
Each line contains two space-separated tokens representing a merge operation.
HuggingFace Interop
Export a trained tokenizer to the HuggingFace tokenizers tokenizer.json
format and use it anywhere in the HuggingFace ecosystem:
import rustmolbpe
tok = rustmolbpe.CharBPETokenizer()
tok.train_from_iterator(smiles_generator("chembl.smi"), vocab_size=8000)
tok.save_huggingface("tokenizer.json")
# Load it back into rustmolbpe...
restored = rustmolbpe.CharBPETokenizer.from_huggingface("tokenizer.json")
# ...or use it from `transformers`:
from transformers import PreTrainedTokenizerFast
hf = PreTrainedTokenizerFast(tokenizer_file="tokenizer.json")
Which tokenizers can be exported, and how they map onto HuggingFace's models:
| Class | HuggingFace representation | Fidelity |
|---|---|---|
CharTokenizer |
BPE model, no merges |
exact |
CharBPETokenizer |
BPE model with character merges |
see note |
AtomTokenizer |
WordLevel model + atom-regex Split |
exact |
SmilesTokenizer |
not supported — raises NotImplementedError |
— |
Notes:
SmilesTokenizer(atom-level BPE) cannot be expressed as a stock HuggingFace fast tokenizer: HuggingFace'sBPEmodel only merges single characters within a pre-token, so it cannot treat a multi-character atom such as[C@@H]as an atomic unit.save_huggingfaceraisesNotImplementedErrorfor it — usesave_vocabulary(SMILESPE format) instead, orCharBPETokenizerfor an exportable BPE tokenizer.- For
CharBPETokenizerthe vocabulary and merges transfer exactly, but HuggingFace applies merge-order BPE while rustmolbpe uses greedy longest-match, so individual token sequences may occasionally differ. from_huggingfaceaccepts files matching the calling class's granularity and merge profile; a mismatch raisesValueError.
Training on Large Datasets
For large datasets like ChEMBL or ZINC:
import rustmolbpe
def smiles_generator(filepath):
with open(filepath) as f:
for line in f:
yield line.strip()
tokenizer = rustmolbpe.SmilesTokenizer()
tokenizer.train_from_iterator(
smiles_generator("chembl.smi"),
vocab_size=8000,
buffer_size=16384 # Larger buffer for streaming
)
tokenizer.save_vocabulary("chembl_vocab.txt")
Running Tests
# Create venv and install dependencies
uv venv .venv
source .venv/bin/activate
uv pip install maturin pytest
# Build and run tests
maturin develop
cargo test # Rust tests
pytest tests/python/ -v # Python tests
Performance
rustmolbpe is significantly faster than the original Python SMILESPE implementation.
Benchmark Results
Benchmarks performed on ChEMBL 36 (~2.8M drug-like molecules) and PubChem (~123M diverse molecules).
Encoding Speed (100k SMILES)
| Tokenizer | Dataset | Speed (SMILES/sec) | Avg Tokens | Speedup |
|---|---|---|---|---|
| SMILESPE | ChEMBL | 5,583 | 9.3 | 1x |
| rustmolbpe | ChEMBL | 196,964 | 7.6 | 35x |
| SMILESPE | PubChem | 11,110 | 11.7 | 1x |
| rustmolbpe | PubChem | 279,834 | 6.2 | 25x |
Compression (characters per token, higher = better)
| Tokenizer | ChEMBL | PubChem |
|---|---|---|
| SMILESPE | 6.26 | 3.34 |
| rustmolbpe (ChEMBL vocab) | 8.16 | 3.69 |
| rustmolbpe (PubChem vocab) | 4.57 | 5.74 |
Training Speed (50k SMILES, vocab_size=1000)
| Dataset | SMILESPE | rustmolbpe | Speedup |
|---|---|---|---|
| ChEMBL | 16.8s | 0.96s | 18x |
| PubChem | 11.1s | 0.70s | 16x |
Large-Scale Training
| Dataset | Molecules | Training Time | Vocab Size |
|---|---|---|---|
| ChEMBL 36 | 2.8M | 102s | 8,000 |
| PubChem | 10M | 407s (~7 min) | 8,000 |
Pre-trained Vocabularies
Pre-trained vocabularies are available in the data/ directory:
chembl36_vocab.txt- Trained on ChEMBL 36 (2.8M drug-like molecules, 7,715 merges)pubchem_10M_vocab.txt- Trained on PubChem (10M diverse molecules, 6,385 merges)
import rustmolbpe
# Load pre-trained ChEMBL vocabulary
tokenizer = rustmolbpe.SmilesTokenizer()
tokenizer.load_vocabulary("data/chembl36_vocab.txt")
# Encode drug molecules efficiently
ids = tokenizer.encode("CC(=O)Nc1ccc(O)cc1") # paracetamol
Running Benchmarks
# Run the benchmark script
python benchmark.py
Datasets
Downloading Training Data
ChEMBL (drug-like molecules):
wget https://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/chembl_36/chembl_36_chemreps.txt.gz
gunzip chembl_36_chemreps.txt.gz
PubChem (diverse molecules):
wget https://ftp.ncbi.nlm.nih.gov/pubchem/Compound/Extras/CID-SMILES.gz
Troubleshooting
Installation Issues
"maturin not found"
uv pip install maturin
"Rust compiler not found" Install Rust from https://rustup.rs/:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
"uv not found" Install uv from https://docs.astral.sh/uv/:
curl -LsSf https://astral.sh/uv/install.sh | sh
Build fails with "VIRTUAL_ENV and CONDA_PREFIX both set"
unset CONDA_PREFIX && maturin develop --release
Runtime Issues
"Unknown token" error when decoding The token ID is not in the vocabulary. This can happen if:
- You're using a different vocabulary than the one used for encoding
- The ID is out of range
# Check vocabulary size
print(tokenizer.vocab_size)
# Verify token exists
try:
token = tokenizer.id_to_token(some_id)
except ValueError:
print(f"ID {some_id} not in vocabulary")
Unknown atoms encoded as UNK Atoms not seen during training are encoded as UNK (ID 1). Train on a larger/more diverse dataset or use a pre-trained vocabulary.
# Check if a SMILES contains unknown atoms
ids = tokenizer.encode("C[Xe]C") # Xenon might be unknown
if tokenizer.unk_token_id in ids:
print("Contains unknown atoms")
Pickle/multiprocessing errors Ensure you're using rustmolbpe >= 0.2.0 which includes pickle support.
Citation
If you use rustmolbpe in your research, please cite it:
@software{rustmolbpe,
author = {Fooladi, Hosein},
title = {rustmolbpe: A High-Performance BPE Tokenizer for Molecular SMILES},
url = {https://github.com/HFooladi/rustmolbpe},
year = {2026}
}
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rustmolbpe-0.3.0.tar.gz.
File metadata
- Download URL: rustmolbpe-0.3.0.tar.gz
- Upload date:
- Size: 106.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0266fb15b451fcf819e1462e4f20518a2694939cfe7b5c85caebb2d15747472
|
|
| MD5 |
b9be39dbed800552e6a0ad7319c2885a
|
|
| BLAKE2b-256 |
7c933fdaf31854b80f50eb96afe7f371488c6c7214ff4219cfaf3390636e450a
|
File details
Details for the file rustmolbpe-0.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3adc12ee4543d3a8551bd07963d757bd282db9196f62cd7351c310f4ace14fb
|
|
| MD5 |
1eb46b20c9b8e1e008d4a0193b13ac86
|
|
| BLAKE2b-256 |
0602243a7121452e3e4a52cea1fbbe551949d3360687b040be3279f693770493
|
File details
Details for the file rustmolbpe-0.3.0-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f16fe0da28023f0647fa859199487f337f5b52080592d475c18bee08461ad8fc
|
|
| MD5 |
e1af78fd5b1ce68d77c3c62edc95166e
|
|
| BLAKE2b-256 |
481996b037f929525dc742dc9daad52ec093e0555f4bc274f948926c184a8d2b
|
File details
Details for the file rustmolbpe-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13f7794d7504c7592e717e9908c092113a0c02715e6cbb1d332d64d06823b877
|
|
| MD5 |
0755a7369efe36f847e897065229516b
|
|
| BLAKE2b-256 |
721760b0bfdb27108096cd902f3c0f051100761057d09a7961d7e5a206dc11d2
|
File details
Details for the file rustmolbpe-0.3.0-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cabcc58118377356ac0741786101c1451c879868ba48d112437e57e6f984e81
|
|
| MD5 |
e9d6306ee67c5881cc56b0ebdf00466c
|
|
| BLAKE2b-256 |
54ef2a971535570330347ec5aeb95d1c16aedd5a1847a26548d4543cd054068b
|
File details
Details for the file rustmolbpe-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
075a480d67de5158eaf4d37bc23a0a6abafc92f5113a5e47b121b8b275bde93b
|
|
| MD5 |
17e5af2b6a53e3fbba32d78e8c95f69a
|
|
| BLAKE2b-256 |
8feed3738e34e3be071335726851bf4144d3a0a07e84ed26c4be5c9f36850f7e
|
File details
Details for the file rustmolbpe-0.3.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fb1118c8011fe14d344e1b7306f6f66fe9fb39e626337540063bf690ca7dbd9
|
|
| MD5 |
b3a098ada44ffe9b28fd9e1338e9d619
|
|
| BLAKE2b-256 |
fadf6be05a4000214949110f691432c0f85159eec7434ba3ba5bcb196ba9ea45
|
File details
Details for the file rustmolbpe-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99c7490ceb759c17b88514fdfbac576db0b14cbee9ee315ce1a8e7be55d1c3b5
|
|
| MD5 |
88d20225bde68be0ba0d47acac49a0b1
|
|
| BLAKE2b-256 |
b04441ee1f4e7afd99eb7bcc7c910fa98c4e435244baf3af83c498df223c7e8e
|
File details
Details for the file rustmolbpe-0.3.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f56c3fe52b326471ea842cb60ddc6cc497880fb9cdb4f7e828edd8cb997ddf4f
|
|
| MD5 |
60e7b703da7956f437b5c10405bf15fd
|
|
| BLAKE2b-256 |
020d34d606cfede46f34ba37c80fdca8213a622eedb451e57b40201d66db37d0
|
File details
Details for the file rustmolbpe-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f50a25af5def2323083f880b9620c78d496c7f5b31702a8d5e8d7f8352c5a214
|
|
| MD5 |
d711fdbb41bbc259fad6b49a428b08c7
|
|
| BLAKE2b-256 |
d8771cd00ab9cdb8a170d49a883045846d80bdd9ff3e61c641f07ca493c13c04
|
File details
Details for the file rustmolbpe-0.3.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5168ee4fde36f9c745080a497be5a3b7c8ec93694c8912d7da833f44ae387684
|
|
| MD5 |
4332aef5fcd4c2b2bb8ea8bc97b24cd1
|
|
| BLAKE2b-256 |
1c99fe23a93df7e7949a994501cc5ebb70d93342602f2c650e3f4c4526481518
|
File details
Details for the file rustmolbpe-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1ed53003f448e30b2fb10716b5a51ca30a2aef964f33cd8fcff2f46c58dbfe5
|
|
| MD5 |
c04821fdd6e96c06174cdd1916d26c70
|
|
| BLAKE2b-256 |
3b3a9b3f87dea133508cbab051e018fd79c47f36dc6c12669d007e28b41f14b7
|
File details
Details for the file rustmolbpe-0.3.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf81d07a1b3d183d7c2a99156c8719c33da2e5bf481fc01e0a6e27e2f5de53ae
|
|
| MD5 |
ef2f11fd6a45360478bb74405490aee8
|
|
| BLAKE2b-256 |
b768f2a265c85fafb4cd93f75d52ef26fb5f71e445230b30e568c8b20719e242
|
File details
Details for the file rustmolbpe-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78aebf33b233f36481a3e7c56fe99159018614ee89bc5efbb843122bff72a21d
|
|
| MD5 |
a000f7964f37b4caa63b7a8fe9cef477
|
|
| BLAKE2b-256 |
01699f7ca91ecdd36a266fc49e80d3e9842d613c00608c16eccc488783e23e09
|
File details
Details for the file rustmolbpe-0.3.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dae1b54f0e0591bebe294cd94d8fa5a6e48bee8f91999e3665a01389eda42e1
|
|
| MD5 |
f9104caefbc336805d2edd1a1f8a296c
|
|
| BLAKE2b-256 |
4ece076b58f7d867159a894d4e5f9baef61b9ecdf290ad82f190341e067982ae
|
File details
Details for the file rustmolbpe-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87dd569d8e22435c02f8298208e32a5f7b9e3b6538ec3570250c79b45a7afdd0
|
|
| MD5 |
a9f3c81a19735086891233d45d798ea9
|
|
| BLAKE2b-256 |
5a1ea2b08280f0ae106a2c79845d1fac888731a1bd1af1cb75d9fe4199da96c5
|
File details
Details for the file rustmolbpe-0.3.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99193771d6a1a40f2d7aa4c299310c2a1ebe4fb7e67190885fc1139f8ad69112
|
|
| MD5 |
1b12741a95aac5df8255c4d8e3e62926
|
|
| BLAKE2b-256 |
0b8008ab08263afb98895c66c1c2d2d5bbae851266980ddc990b005a4f8454a7
|
File details
Details for the file rustmolbpe-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38390535d04b99bf24ae9fe90efad31fa9ff0f3de41bb1cd674b2146dd839cd4
|
|
| MD5 |
42cc2216ebd10bfcbefec86ccd619e5b
|
|
| BLAKE2b-256 |
2ee00fe5454c642d2980a5c1d6ea35f3fa6c87c4f44e537181eb19ee5ba8b461
|
File details
Details for the file rustmolbpe-0.3.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dea138f42a8e607121ee5ffcffed3919f89efd51a7e381f225f218f40476f4c5
|
|
| MD5 |
dfb6595d04b0b8d914d78d34d875a61f
|
|
| BLAKE2b-256 |
8ec43320992b921c001817efa477000dc6b77fde91e6115f46f6d700da553980
|
File details
Details for the file rustmolbpe-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9920f91cd31a7812ee33b9ad0a7b823307ab45187e3205cc407166a8fbb2065
|
|
| MD5 |
56c1f3f3bcd98f7ee84ff79b9c1f067b
|
|
| BLAKE2b-256 |
89cf99254df02813b21d3c704a04c2b046f15154b5e38724b083b057f7e52eb9
|
File details
Details for the file rustmolbpe-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08d5d59a25e4b555aa12ff9e0aebd764fe0851a174700403472adb133467e080
|
|
| MD5 |
09b3731561b1f76866552076f02fb247
|
|
| BLAKE2b-256 |
cae9dd3dcded0fbe40b704446e7038c6caf5264803a32e308af3705fce0200f1
|
File details
Details for the file rustmolbpe-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustmolbpe-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14707589356fe6eeac895bbce58c424c27474a2e733e21dd8cf4626b522826e6
|
|
| MD5 |
2c58e7f25d85a56dde04ed51fb58d1a5
|
|
| BLAKE2b-256 |
1c342172eac189edbfa8b95605e4186c87d123ddf7983193a25aa5787012ca1a
|