Skip to main content

Unsupervised text tokenizer and detokenizer.

Project description

SentencePiece Python Wrapper

Python wrapper for SentencePiece. This API supports the encoding, decoding, and training of SentencePiece models.

For a detailed feature and API comparison with Hugging Face Tokenizers and OpenAI's tiktoken, see the Tokenizer Comparison Cheat Sheet.

Installation

For Linux (x86_64/aarch64), macOS, and Windows (x64/arm64) environments, you can use the pip command to install the SentencePiece Python module.

pip install sentencepiece

Basic Usage

The SentencePieceProcessor class provides the primary interface for text tokenization (encoding) and detokenization (decoding).

Core Methods

  • sp.encode(...): Segments input text into token IDs, string pieces, or other formats (like NumPy arrays or Protobuf messages).
  • sp.decode(...): Reconstructs the original text from token IDs or string pieces.

Input Types & Batch Processing

Both methods support polymorphic inputs and can execute in either single or batch mode:

  • Single Input: Pass a single Unicode str or raw bytes (for encoding), or a single list of IDs/pieces or a 1D NumPy array (for decoding).
  • Batch Input: Pass a list of str or bytes (for encoding), or a list of lists of IDs/pieces or a 2D NumPy array (for decoding). Batch operations automatically release the Python GIL and can run in parallel in C++ (see Batch Encoding).

Here is a Python example showing basic usage:

import sentencepiece as spm
import numpy as np

# Load the model
sp = spm.SentencePieceProcessor(model_file='test/test_model.model')

# Encode text to IDs (default return_type is int)
print(sp.encode('This is a test'))
# Output: [284, 47, 11, 4, 15, 400]

# Encode batch of texts to IDs
print(sp.encode(['This is a test', 'Hello world'], return_type=int))
# Output: [[284, 47, 11, 4, 15, 400], [151, 88, 21, 887]]

# Alternative method for encoding to IDs
print(sp.encode_as_ids(['This is a test', 'Hello world']))
# Output: [[284, 47, 11, 4, 15, 400], [151, 88, 21, 887]]

# Encode text to pieces
print(sp.encode('This is a test', return_type=str))
# Output: ['▁This', '▁is', '▁a', '▁', 't', 'est']

# Encode batch of texts to pieces
print(sp.encode(['This is a test', 'Hello world'], return_type=str))
# Output: [['▁This', '▁is', '▁a', '▁', 't', 'est'], ['▁He', 'll', 'o', '▁world']]

# Alternative method for encoding to pieces
print(sp.encode_as_pieces(['This is a test', 'Hello world']))
# Output: [['▁This', '▁is', '▁a', '▁', 't', 'est'], ['▁He', 'll', 'o', '▁world']]

# Encode text to pieces as bytes
print(sp.encode('This is a test', return_type=bytes))
# Output: [b'\xe2\x96\x81This', b'\xe2\x96\x81is', b'\xe2\x96\x81a', b'\xe2\x96\x81', b't', b'est']

# Encode to NumPy array (zero-copy)
print(sp.encode('This is a test', return_type='numpy'))
# Output: [284  47  11   4  15 400] (NumPy array)

# Encode to offset mapping
print(sp.encode('This is a test', return_type='offset_mapping'))
# Output: {
#   'ids': [284, 47, 11, 4, 15, 400],
#   'pieces': ['▁This', '▁is', '▁a', '▁', 't', 'est'],
#   'offsets': [(0, 4), (4, 7), (7, 9), (9, 10), (10, 11), (11, 14)]
# }

# Encode to Protobuf message
proto = sp.encode('This is a test', return_type='proto')
from google.protobuf import text_format
print(text_format.MessageToString(proto))
# Output:
# text: "This is a test"
# pieces {
#   piece: "▁This"
#   id: 284
#   surface: "This"
#   begin: 0
#   end: 4
# }
# ... (remaining pieces omitted for brevity)

# Alternative method for encoding to Protobuf
proto2 = sp.encode_as_proto('This is a test')
print(proto2 == proto)
# Output: True

# Encode with sampling (for subword regularization)
for _ in range(3):
  print(sp.encode('This is a test', return_type=str, enable_sampling=True, alpha=0.1, nbest_size=-1))
# Output examples:
# ['▁', 'This', '▁', 'is', '▁a', '▁', 't', 'e', 'st']
# ['▁This', '▁is', '▁a', '▁', 'te', 's', 't']
# ['▁This', '▁is', '▁', 'a', '▁', 't', 'e', 'st']

# N-best encoding
print(sp.nbest_encode('This is a test', nbest_size=3, return_type=str))
# Output:
# [['▁This', '▁is', '▁a', '▁', 't', 'est'],
#  ['▁This', '▁is', '▁a', '▁', 'te', 'st'],
#  ['▁This', '▁is', '▁a', '▁', 'te', 's', 't']]

# Decode IDs to text
print(sp.decode([284, 47, 11, 4, 15, 400]))
# Output: This is a test

# Decode batch of IDs to text
print(sp.decode([[284, 47, 11, 4, 15, 400], [151, 88, 21, 887]]))
# Output: ['This is a test', 'Hello world']

# Decode NumPy array
ids_np = np.array([284, 47, 11, 4, 15, 400], dtype=np.int32)
print(sp.decode(ids_np))
# Output: This is a test

# Decode to bytes
print(sp.decode([284, 47, 11, 4, 15, 400], return_type=bytes))
# Output: b'This is a test'

# Decode with offset mapping
print(sp.decode([284, 47, 11, 4, 15, 400], return_type='offset_mapping'))
# Output: {
#   'text': 'This is a test',
#   'ids': [284, 47, 11, 4, 15, 400],
#   'pieces': ['▁This', '▁is', '▁a', '▁', 't', 'est'],
#   'offsets': [(0, 4), (4, 7), (7, 9), (9, 10), (10, 11), (11, 14)]
# }

# Decode to Protobuf
proto_dec = sp.decode([284, 47, 11, 4, 15, 400], return_type='proto')
print(proto_dec.text)
# Output: This is a test

# Decode pieces to text
print(sp.decode(['▁', 'This', '▁', 'is', '▁a', '▁', 't', 'e', 'st']))
# Output: This is a test

# Decode batch of pieces to text
print(sp.decode([['▁This', '▁is', '▁a', '▁', 't', 'est'], ['▁He', 'll', 'o', '▁world']]))
# Output: ['This is a test', 'Hello world']

# Get vocabulary size
print(sp.get_piece_size())
# Output: 1000

# Piece to ID mapping
print(sp.piece_to_id('<s>'))
# Output: 1
print(sp.piece_to_id(['</s>', '\r', '▁']))
# Output: [2, 3, 4]

# ID to piece mapping
print(sp.id_to_piece(2))
# Output: </s>
print(sp.id_to_piece([2, 3, 4]))
# Output: ['</s>', '\r', '▁']

# Dictionary-like access
print(len(sp))
# Output: 1000
print(sp['</s>'])
# Output: 2

# Special token IDs
print('bos=', sp.bos_id())  # Output: bos= 1
print('eos=', sp.eos_id())  # Output: eos= 2
print('unk=', sp.unk_id())  # Output: unk= 0
print('pad=', sp.pad_id())  # Output: pad= -1 (disabled)

# Get the first 5 vocabulary tokens
print([sp.id_to_piece(i) for i in range(5)])
# Output: ['<unk>', '<s>', '</s>', '\r', '▁']

Offset Mapping

If you want to perform direct character-level or byte-level alignment operations (like text highlighting, substring extraction, or mapping tokens back to original text), you can use return_type='offset_mapping'.

This yields a Python dictionary containing the token IDs, string pieces, and offsets (tuples of (start, end)).

Unicode Character Offsets (Default)

By default, using return_type='offset_mapping' returns Unicode character offsets for both encoding and decoding. Slicing Python strings directly using these offsets works out of the box:

import sentencepiece as spm

sp = spm.SentencePieceProcessor(model_file='test/test_model.model')

text = "吾輩は猫である。"

# 1. Encoding text to get offsets in the original text
enc_res = sp.encode(text, return_type='offset_mapping')
print(enc_res['offsets'])  # list[tuple[int, int]] containing Unicode char indices

for piece, (start, end) in zip(enc_res['pieces'], enc_res['offsets']):
  # Note: the first piece might be the dummy prefix (e.g. '▁') which maps to empty surface ''
  original_surface = text[start:end]
  print(f"Piece: {piece} -> Surface in original text: {original_surface}")

# 2. Decoding IDs back to text while retrieving offsets in the reconstructed text
dec_res = sp.decode(enc_res['ids'], return_type='offset_mapping')

print(dec_res['text'])    # "吾輩は猫である。" (the reconstructed text)
print(dec_res['offsets']) # Unicode char indices in `dec_res['text']`

for (start, end), piece in zip(dec_res['offsets'], dec_res['pieces']):
  # Note: piece might contain meta symbols (like '▁'), 
  # but slicing `dec_res['text']` using offsets yields the clean surface text.
  surface = dec_res['text'][start:end]
  print(f"Piece: {piece} -> Surface in reconstructed text: {surface}")

Raw Byte Offsets

You can retrieve byte-level offsets and raw byte pieces (useful for binary protocols, C++ compatibility, or raw byte slicing). Using bytes can also improve performance by bypassing Python's Unicode overhead (see Optimizing Performance).

How it is triggered:

  • Encoding: Defaults to matching the input type (i.e., bytes input triggers byte offsets, str input triggers Unicode offsets). You can explicitly override this by passing the return_bytes parameter in encode():
    • return_bytes=True: Forces raw byte offsets and bytes pieces (even with str input).
    • return_bytes=False: Forces Unicode offsets and str pieces (even with bytes input). Note: The return_bytes parameter in encode() is only allowed when return_type='offset_mapping'.
  • Decoding: Used when you explicitly set return_bytes=True in decode() (only allowed when return_type='offset_mapping').
# 1. Encoding bytes input -> returns raw byte offsets and byte pieces
text_bytes = text.encode('utf-8')
enc_res_bytes = sp.encode(text_bytes, return_type='offset_mapping')

print(enc_res_bytes['offsets']) # Byte indices in `text_bytes`
print(enc_res_bytes['pieces'])  # list[bytes] containing raw byte pieces

# Slicing the raw bytes directly works:
for piece, (start, end) in zip(enc_res_bytes['pieces'], enc_res_bytes['offsets']):
  # Note: the first piece is the dummy prefix (b'\xe2\x96\x81') which maps to empty surface b''
  surface_bytes = text_bytes[start:end]
  print(f"Piece: {piece} -> Surface bytes: {surface_bytes}")

# 2. Decoding to raw byte offsets
dec_res_bytes = sp.decode(enc_res_bytes['ids'], return_type='offset_mapping', return_bytes=True)
print(dec_res_bytes['text'])    # b'\xe5\x90\xbe...' (reconstructed text as bytes)
print(dec_res_bytes['offsets']) # Byte indices in `dec_res_bytes['text']`

for (start, end), piece in zip(dec_res_bytes['offsets'], dec_res_bytes['pieces']):
  # piece is returned as bytes when return_bytes=True
  surface_bytes = dec_res_bytes['text'][start:end]
  print(f"Piece: {piece} -> Surface bytes: {surface_bytes}")

Byte Fallback Behavior

When byte_fallback=True is enabled in the model, unknown characters (e.g., emojis or unsupported scripts) are decomposed into a sequence of raw UTF-8 byte tokens (such as <0xF0>, <0x9F>, etc.).

In this case, the offsets (whether Unicode character offsets or raw byte offsets) are assigned as follows:

  • Intermediate Byte Tokens: The first (N-1) byte tokens in the fallback sequence are assigned a zero-width span pointing to the start of the character (i.e., (start, start)). Slicing the text with these offsets yields an empty string ("" or b"").
  • Final Byte Token: The last byte token in the sequence is assigned the span of the entire character (i.e., (start, start + 1) in Unicode character offsets, or (start, start + byte_length) in raw byte offsets). Slicing the text with these offsets yields the full reconstructed character.

This ensures that the text can still be cleanly sliced and reconstructed without producing invalid Unicode byte sequences during slicing.

Protobuf Output

When encoding text with return_type='proto' (or EncodeAsProto), SentencePiece returns a structured SentencePieceText protobuf message.

Benefits of Protobuf Output:

  • Rich Metadata: Provides highly detailed information for each token, including alignment offsets, scores (log-likelihoods), and whether tokens represent control characters or raw bytes.
  • Language-Agnostic Contract: Because it is a standard serialized protobuf message, it can be passed directly to downstream C++, Go, or Java servers, ensuring consistent deserialization across language boundaries.
  • Format Flexibility: Protobuf messages can be easily converted to other popular structures (such as JSON strings) using standard protobuf utilities without manual parsing.

Each token inside the protobuf message contains begin and end alignment offsets representing raw byte offsets in the UTF-8 encoded representation of the original string.

To slice the original text using these offsets, you must first encode the string to UTF-8 bytes, perform the slice, and then decode it back:

import sentencepiece as spm

sp = spm.SentencePieceProcessor(model_file='test/test_model.model')

text = "吾輩は猫である。"
proto = sp.encode(text, return_type='proto')

# Slice the UTF-8 bytes and decode back to string
text_bytes = text.encode('utf-8')
for piece in proto.pieces:
  surface = text_bytes[piece.begin:piece.end].decode('utf-8')
  print(f"Piece: {piece.piece} -> Surface: {surface}")
  assert surface == piece.surface

# Convert the protobuf message to JSON
from google.protobuf.json_format import MessageToJson
json_str = MessageToJson(proto)
print(json_str)

Batch Encoding (Across-Document Parallelism)

When processing a large collection of documents or sentences (e.g., training datasets), you can pass a list of strings directly to encode (or a list of lists/numpy arrays to decode).

To speed up batch tokenization, you can specify num_threads=N to parallelize processing across multiple CPU threads. For optimal performance across multiple batch calls, you should create and reuse a ThreadPool.

import sentencepiece as spm

sp = spm.SentencePieceProcessor(model_file='test/test_model.model')

# A large batch of sentences
sentences = ["This is a test sentence."] * 10000

# 1. Basic batch encoding (sequential)
ids_batch = sp.encode(sentences, return_type=int)

# 2. Parallelized batch encoding using multiple threads
# This processes elements of the list in parallel in C++ (releasing the GIL)
ids_batch = sp.encode(sentences, return_type=int, num_threads=4)

# 3. Best practice: Reuse a ThreadPool to avoid thread recreation overhead
pool = spm.ThreadPool(num_threads=4)
for i in range(10):
  # Reuse the same thread pool across multiple calls
  ids_batch = sp.encode(sentences, return_type=int, thread_pool=pool)

Parallel Encoding (Within-Document Parallelism)

When tokenizing a single, very large document (e.g., a whole book or a massive text dump), you can use parallel_encode to split the document and tokenize it in parallel using multiple CPU threads.

This is different from passing a list of sentences to encode(..., num_threads=N), which parallelizes across the sentences in the list. parallel_encode parallelizes within a single string.

To use it efficiently, you should create and reuse a ThreadPool, and specify a chunk_len (in Unicode characters) to define the minimum chunk size processed by each thread.

[!NOTE] Choosing an optimal chunk_len is key to performance. A value between 10,000 and 100,000 Unicode characters is a common starting point, but the best value depends on:

  • Input characteristics: Text size and complexity (e.g., density of multi-byte characters).
  • Model: Complexity of the tokenization (e.g. Unigram vs BPE, vocabulary size).
  • Machine specifications: Available CPU cores, cache sizes, and memory bandwidth.

Setting chunk_len too small can lead to excessive thread-scheduling overhead.

import sentencepiece as spm

sp = spm.SentencePieceProcessor(model_file='test/test_model.model')

# 1. Create a ThreadPool to reuse threads (prevents thread recreation overhead)
pool = spm.ThreadPool(num_threads=4)

# Load a very large document
with open('large_document.txt', 'r') as f:
  large_text = f.read()

# 2. Tokenize the large text in parallel
# chunk_len=1048576 (1M characters) is recommended to minimize thread scheduling overhead
ids = sp.parallel_encode(large_text, chunk_len=1048576, thread_pool=pool, return_type=int)

Text Normalization

You can normalize text using the normalization rules defined inside the model, or by using a standalone SentencePieceNormalizer with custom configurations.

import sentencepiece as spm

sp = spm.SentencePieceProcessor(model_file='test/test_model.model')

# Standard normalization (e.g. NFKC and space replacement)
print(sp.normalize("Hello  World."))  # Double space
# Output: ▁Hello▁World.

# Normalization with character-to-byte offset mapping
normalized, offsets = sp.normalize("Hello  World.", with_offsets=True)
print(normalized)
# Output: ▁Hello▁World.
print(offsets)
# Output: [0, 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13]
# normalized[i] spans from original byte offsets[i] to offsets[i+1]

You can also use SentencePieceNormalizer to run normalization independently of a model, or with custom parameters:

# Replicate processor's exact normalization behavior:
normalizer = spm.SentencePieceNormalizer(
    model_file='test/test_model.model',
    add_dummy_prefix=True,
    escape_whitespaces=True,
    remove_extra_whitespaces=True
)
print(normalizer.normalize("Hello  World."))
# Output: ▁Hello▁World.

# Initialize from mapping list of tuples (source, target)
norm_map = [
    ('foo', 'bar'),
    ('apple', 'orange'),
]
normalizer = spm.SentencePieceNormalizer(norm_map=norm_map)
print(normalizer.normalize("foo apple"))
# Output: bar orange

# Decompile back to list of tuples
print(normalizer.decompile())
# Output: [('apple', 'orange'), ('foo', 'bar')] (sorted by Unicode code point of source)

Model Training

Training is performed by passing parameters to the SentencePieceTrainer.train() function. See the training options documentation for a full list of supported parameters (which match the command-line flags of spm_train).

import sentencepiece as spm

# Train the model
spm.SentencePieceTrainer.train(
    input='test/botchan.txt',
    model_prefix='m',
    vocab_size=1000,
    user_defined_symbols=['foo', 'bar']
)

Expected output in console (stderr):

sentencepiece_trainer.cc(73) LOG(INFO) Starts training with :
trainer_spec {
  input: test/botchan.txt
  .. snip
unigram_model_trainer.cc(500) LOG(INFO) EM sub_iter=1 size=1188 obj=10.2839 num_tokens=32182 num_tokens/piece=27.0892
unigram_model_trainer.cc(500) LOG(INFO) EM sub_iter=0 size=1100 obj=10.4269 num_tokens=33001 num_tokens/piece=30.0009
unigram_model_trainer.cc(500) LOG(INFO) EM sub_iter=1 size=1100 obj=10.4069 num_tokens=33002 num_tokens/piece=30.0018
trainer_interface.cc(595) LOG(INFO) Saving model: m.model
trainer_interface.cc(619) LOG(INFO) Saving vocabs: m.vocab

Training with a Custom Normalizer

You can pass a pre-configured SentencePieceNormalizer instance to the trainer. This ensures the exact same normalization rules are packaged with the trained model.

# 1. Create and configure a normalizer
norm_map = [('foo', 'bar')]
normalizer = spm.SentencePieceNormalizer(norm_map=norm_map, add_dummy_prefix=False, escape_whitespaces=True)

# 2. Train using the normalizer instance
spm.SentencePieceTrainer.train(
    input='test/botchan.txt',
    model_prefix='m',
    vocab_size=1000,
    normalizer=normalizer
)

You can also extend pre-defined normalization rules (like 'nfkc') by decompiling them, appending your custom rules, and loading them back:

# 1. Load pre-defined NFKC rules
base_normalizer = spm.SentencePieceNormalizer(rule_name='nfkc')

# 2. Decompile to get the base mapping list of tuples
norm_map = base_normalizer.decompile()

# 3. Add custom rules to the mapping list
norm_map.append(('foo', 'bar'))
norm_map.append(('apple', 'orange'))

# 4. Create a new normalizer with the extended mapping
# Note: we set escape_whitespaces=True as required by the trainer
extended_normalizer = spm.SentencePieceNormalizer(norm_map=norm_map, add_dummy_prefix=False, escape_whitespaces=True)

# 5. Train using the extended normalizer
spm.SentencePieceTrainer.train(
    input='test/botchan.txt',
    model_prefix='m',
    vocab_size=1000,
    normalizer=extended_normalizer
)

[!IMPORTANT] If you specify both normalizer and other normalizer-specific arguments (like add_dummy_prefix) in train(), a ValueError will be raised. You must configure these settings directly on the SentencePieceNormalizer instance instead of passing them as trainer arguments.

Training without a Local Filesystem

The SentencePiece trainer can accept any iterable object to feed training sentences. You can also pass a file-like object (any object with a write() method) to write the output model to arbitrary devices/buffers. These features are useful for running SentencePiece in environments that have limited access to the local file system (e.g., Google Colab).

import urllib.request
import io
import sentencepiece as spm

# Loads model from URL as iterator and stores the model to BytesIO.
model = io.BytesIO()
with urllib.request.urlopen(
    'https://raw.githubusercontent.com/google/sentencepiece/master/data/botchan.txt'
) as response:
  spm.SentencePieceTrainer.train(
      sentence_iterator=response, model_writer=model, vocab_size=1000)

# Serialize the model as file.
# with open('out.model', 'wb') as f:
#   f.write(model.getvalue())

# Directly load the model from serialized model.
sp = spm.SentencePieceProcessor(model_proto=model.getvalue())
print(sp.encode('this is test'))

Optimizing Performance: str vs bytes (Encode & Decode)

For maximum throughput (e.g., when processing large datasets or files), you can use Python bytes for both encoding and decoding to bypass Python's Unicode conversion overhead.

Why it is faster:

  • Zero-Copy Encoding: When you pass bytes to the encoder (e.g., read directly via open(..., 'rb')), the wrapper extracts the memory pointer zero-copy to construct std::string_view directly. If you pass str, Python must cache/convert it to UTF-8, and when reading from files, Python first decodes the file bytes to str only for the wrapper to re-encode them.
  • Fast Decoding (No UTF-8 Validation): By default, the decoder converts the reconstructed C++ UTF-8 string into a Python str, which requires validating and decoding bytes to Unicode characters in Python. Specifying return_type=bytes directly returns a Python bytes object, bypassing this validation.

Using bytes instead of str yields ~1.14x speedup on encoding and ~1.21x speedup on decoding (benchmarked on a 30MB Japanese text dataset with 300k lines). Additionally, reading files directly as raw bytes (open(..., 'rb')) bypasses Python's native UTF-8 file decoder entirely, yielding further substantial I/O savings.

Example Pipeline:

import sentencepiece as spm

sp = spm.SentencePieceProcessor(model_file="test.model")

# 1. Optimal Encoding: Read and pass raw bytes
with open("large_file.txt", "rb") as f:
  lines_bytes = f.read().splitlines()
ids = sp.encode(lines_bytes, return_type=int)

# 2. Optimal Decoding: Reconstruct directly to bytes
decoded_lines_bytes = sp.decode(ids, return_type=bytes)
with open("decoded_output.txt", "wb") as f:
  f.write(b"\n".join(decoded_lines_bytes) + b"\n")

[!NOTE] Type consistency is maintained when using bytes:

  • sp.encode(bytes_input, return_type=bytes) yields a list of Python bytes objects (raw byte pieces). Specifying return_type=str will force-decode the pieces to Python str objects.
  • sp.decode(ids, return_type=bytes) yields a Python bytes object (or list of bytes in batch mode).

Model Modification

Modifying an existing SentencePiece model (e.g., adding/removing tokens, editing token scores) in memory is not officially supported. The SentencePieceProcessor class is designed strictly as a read-only inference engine.

However, since the .model file is a serialized Protocol Buffer, you can load and manipulate it in Python using the standard sentencepiece_model_pb2 definitions included with the package:

[!WARNING] Programmatically modifying model structures is not officially supported and is done at your own risk. Modifying vocabulary size, indices, or scores directly can easily break model integrity or corrupt downstream model embeddings. Note that the vocabulary ID of a token is implicitly defined as its index inside the pieces repeated field in the ModelProto message (i.e., appending a piece assigns it the next sequential ID, and inserting or deleting pieces will shift the IDs of all subsequent tokens).

from sentencepiece import sentencepiece_model_pb2 as model_pb2
import sentencepiece as spm

# 1. Read the binary model file as a Protobuf message
model_proto = model_pb2.ModelProto()
with open("old.model", "rb") as f:
  model_proto.ParseFromString(f.read())

# 2. Modify vocabulary tokens or scores (at your own risk)
new_piece = model_proto.pieces.add()
new_piece.piece = "<my_special_token>"

# Score meaning depends on the model type:
# - Unigram: Log-probability of the piece (usually negative float). Used to optimize segmentation.
# - BPE: Merge priority. Typically set to 0.0 for high priority, or negative values for lower priority.
new_piece.score = 0.0

# Piece types: NORMAL (1), UNKNOWN (2), CONTROL (3), USER_DEFINED (4), UNUSED (5), BYTE (6)
new_piece.type = model_pb2.ModelProto.SentencePiece.Type.CONTROL

# 3. Load the modified model directly from memory
sp = spm.SentencePieceProcessor(model_proto=model_proto.SerializeToString())

# 4. (Optional) Export/Inspect the modified ModelProto as JSON
from google.protobuf.json_format import MessageToJson
json_model = MessageToJson(model_proto)

# 5. Save the modified model back to a file
with open("new.model", "wb") as f:
  f.write(model_proto.SerializeToString())

# 6. Load the new model from the file
sp2 = spm.SentencePieceProcessor(model_file="new.model")

Free-Threading Support

Experimental support for no-GIL/Free-Threading has been introduced in v0.2.1. For more details, please refer to this page. This operates similarly to how NumPy handles it.

The C++ library's const and static methods (such as encode(), decode(), and train()) are thread-safe and designed to work in a free-threaded (NoGIL) environment. However, non-const methods like load() are not thread-safe and can cause data races; ensure you implement appropriate locks when calling them from multiple threads.

While this limitation might be removed in the future, please note that it's not a simple fix, as it would require additional shared locks in C++.

Building from Source

Before building SentencePiece from source on Linux, ensure that the following dependencies are installed.

sudo apt update
sudo apt install -y cmake pkg-config build-essential

To build and install the Python wrapper from source, use the following commands to build and install the wheel package.

git clone https://github.com/google/sentencepiece.git
cd sentencepiece
mkdir build
cd build
cmake .. -DSPM_ENABLE_SHARED=OFF -DCMAKE_INSTALL_PREFIX=./root -DSPM_DISABLE_EMBEDDED_DATA=ON
make install
cd ../python
pip install build
python -m build --wheel
pip install dist/sentencepiece*.whl

If you don't have write permission to the global site-packages directory or don't want to install into it, you can use the --user flag:

pip install --user dist/sentencepiece*.whl

To build and install the Python wrapper from source on Windows using Visual Studio, first ensure you have PowerShell 7 (pwsh.exe) installed (which can be installed via winget install --id Microsoft.Powershell --source winget). Then, open a "Developer PowerShell for VS 2022" window and run the following commands:

git clone https://github.com/google/sentencepiece.git
cd sentencepiece
mkdir build
cd build
cmake .. -DSPM_ENABLE_SHARED=OFF -DCMAKE_INSTALL_PREFIX=".\root" -DSPM_DISABLE_EMBEDDED_DATA=ON
cmake --build . --config Release --target install
cd ../python
pip install build
python -m build --wheel
Get-ChildItem .\dist\sentencepiece*.whl | ForEach-Object { pip install $_.FullName }

Migration Notes (New pybind11 API)

Since v0.2.2, the SentencePiece Python wrapper has been migrated from SWIG to pybind11, introducing optimized NumPy support and robust Free-Threading (NoGIL) execution.

This migration introduces a few changes to standard usage and output formats:

1. BOS/EOS Behavior for USER_DEFINED Symbols

Historically, SentencePieceProcessor::bos_id() and eos_id() returned -1 if the corresponding tokens were defined as USER_DEFINED rather than CONTROL. However, the C++ Encode method with extra options (e.g. bos) still prepended the token, while the Python wrapper encode(..., add_bos=True) would prepend -1 or crash.

To resolve this inconsistency:

  • Behavior Alignment: The behavior has been aligned to strictly respect the CONTROL token type requirement.
  • Strict Verification & Errors: If the BOS/EOS tokens are defined as USER_DEFINED (which are essentially treated the same as NORMAL tokens, with no clear distinction in this context) or any type other than CONTROL (or if they are completely missing), trying to add them during encoding will now result in an error:
    • In C++, SetEncodeExtraOptions("bos") or SetEncodeExtraOptions("eos") will fail (return an error).
    • In Python, passing add_bos=True or add_eos=True to encode() will raise a ValueError (instead of silently ignoring it, prepending -1, or crashing).

2. Unified return_type Parameter

The previous parameter out_type has been renamed to return_type to better describe what the functions yield.

  • Backward Compatibility: The name out_type remains supported as a deprecated keyword argument alias. Passing out_type=int will work exactly as before, mapping internally to return_type=int. Specifying both return_type and out_type at the same time is invalid and will raise a ValueError.

3. Removal of immutable_proto

The custom C++ wrapper classes (ImmutableSentencePieceText, ImmutableNBestSentencePieceText) have been removed.

  • Using return_type='immutable_proto' (or out_type='immutable_proto') or helper methods like EncodeAsImmutableProto will now raise a ValueError.
  • Use return_type='proto' or EncodeAsProto instead.

4. New Classmethod Factories

To align with pythonic best practices and avoid overloaded constructor argument logic, SentencePieceProcessor now exposes clean classmethod factories to initialize processors:

  • SentencePieceProcessor.from_file(model_file, **kwargs): Creates and loads a processor from a file path.
  • SentencePieceProcessor.from_proto(model_proto, **kwargs): Creates and loads a processor directly from serialized model bytes in memory.
# 1. Loading from file
sp = spm.SentencePieceProcessor.from_file("m.model", return_type=str)

# 2. Loading from in-memory bytes
sp = spm.SentencePieceProcessor.from_proto(model_bytes, return_type=str)

Further Documentation

For more detailed information on SentencePiece concepts, options, and advanced configurations, please refer to the core documentation:

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

sentencepiece-0.2.2.tar.gz (8.2 MB view details)

Uploaded Source

Built Distributions

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

sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl (1.3 MB view details)

Uploaded CPython 3.14tWindows ARM64

sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14tWindows x86-64

sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl (2.2 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ universal2 (ARM64, x86-64)

sentencepiece-0.2.2-cp314-cp314-win_arm64.whl (1.3 MB view details)

Uploaded CPython 3.14Windows ARM64

sentencepiece-0.2.2-cp314-cp314-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86-64

sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl (2.2 MB view details)

Uploaded CPython 3.14macOS 10.15+ universal2 (ARM64, x86-64)

sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13tWindows ARM64

sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13tWindows x86-64

sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13tmacOS 10.13+ x86-64

sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl (2.2 MB view details)

Uploaded CPython 3.13tmacOS 10.13+ universal2 (ARM64, x86-64)

sentencepiece-0.2.2-cp313-cp313-win_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13Windows ARM64

sentencepiece-0.2.2-cp313-cp313-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.13Windows x86-64

sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

sentencepiece-0.2.2-cp312-cp312-win_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12Windows ARM64

sentencepiece-0.2.2-cp312-cp312-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.12Windows x86-64

sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

sentencepiece-0.2.2-cp311-cp311-win_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11Windows ARM64

sentencepiece-0.2.2-cp311-cp311-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.11Windows x86-64

sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

sentencepiece-0.2.2-cp310-cp310-win_arm64.whl (1.2 MB view details)

Uploaded CPython 3.10Windows ARM64

sentencepiece-0.2.2-cp310-cp310-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.10Windows x86-64

sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl (2.2 MB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

sentencepiece-0.2.2-cp39-cp39-win_arm64.whl (1.2 MB view details)

Uploaded CPython 3.9Windows ARM64

sentencepiece-0.2.2-cp39-cp39-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.9Windows x86-64

sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl (2.2 MB view details)

Uploaded CPython 3.9macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file sentencepiece-0.2.2.tar.gz.

File metadata

  • Download URL: sentencepiece-0.2.2.tar.gz
  • Upload date:
  • Size: 8.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.14

File hashes

Hashes for sentencepiece-0.2.2.tar.gz
Algorithm Hash digest
SHA256 3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6
MD5 5d7e4bb7bd74c518fdfb430b83792888
BLAKE2b-256 cc33ea3cb3839607eb175da835244a798f797f478c5ddf0e8ecdf57ea85a4c70

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090
MD5 4fef41f521b75e1a2e56cd9c27c0169b
BLAKE2b-256 49a170007fef3f818c688de4a730f98024a671599ab67f20270f8efb03d69dcc

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497
MD5 13d432483997c56463bab750771efb2a
BLAKE2b-256 da057d7780fa63f4b8c1821953b916e25f89ae8f14d4da6ba91e10f6d06dc2b4

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf
MD5 118365082c38aee736a5e3a1293450ae
BLAKE2b-256 26315dd6882ebe899f741a5cfe40ff56c6efc06bc26ee287abdb723b671f409c

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811
MD5 0a6d90ef7c71d842e60eeec6b9392e80
BLAKE2b-256 784a2288f60e7283583ec0a0f16e72f9c8e68557d7e7a4b585d2cda4f9f47e64

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b
MD5 122aac61f6bd5dc1863adea3f65737b9
BLAKE2b-256 7852ffe402b13bce1889228a98dc6cd86ae8afac1112362236be3468be784441

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25
MD5 e05337f8e3df78a1ce0129259b21f80e
BLAKE2b-256 9842fb678e472c554ef086be6375d20060ca610a2c4218854d4c091001fc6f91

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151
MD5 9a8caf233f73df44152c0d33e7641be5
BLAKE2b-256 84c47afe8c2315b76e46818851a057e50a378a0382aa00b970a1fa444181b6f6

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9
MD5 e494efe7a639cb4b7297ff2a7ab56f51
BLAKE2b-256 d3eb22f89b6542aba400b0007cf0b1697cc3f99be8fb682fdb4c05eec450e33f

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708
MD5 fb1bc99d3bcbec59be7a32c8dff9faf3
BLAKE2b-256 33fe4906f12c458274edd96387e4baaad7c6f064a2b7c11a1cc2401c8a7bd483

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab
MD5 9a1fa6e90638dc99f80b1ee5733703c9
BLAKE2b-256 24b3718847349da7b25c8220ed86d85b89080af94740b2d87a59198104ae5c51

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719
MD5 9e6a4d8dd5cc52cbe0ef40c009a67635
BLAKE2b-256 10ca1b6c251321901cbf8a2d2e48b8b70eb82a449011b766af52a228d0a90b6b

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906
MD5 139465e2b7a8443aa8731b4f156ff83c
BLAKE2b-256 d118823954c9c90e74eba09fb96752dc37a5555df00d69866cb9406d1725dc7e

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b
MD5 0ecc41fb942306ac75344d15c736ace4
BLAKE2b-256 520a095d183b453b2a2e20b016829029c58eca90adc1c9911113e5d26fff45ed

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a
MD5 57b364f35baf6040444b5da33550e229
BLAKE2b-256 0b7ef5df63edb6bcb46c1343cfa5d9192d73a4eb61af2e800d9402efff387523

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd
MD5 93854ded67473df9173cf3b555dac6bc
BLAKE2b-256 41157e74c8533848866ff560b29f7d8719921b76c4ec7149592d6d28e0deee75

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53
MD5 98a3b06464d2323bcb04280e11116463
BLAKE2b-256 0fbc9eedddcec1fd57bc70200fa3ebf792d18fa63527a5369581cd416c81f97f

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b
MD5 464c1e4c14677c8084cd3efb0e91a4b1
BLAKE2b-256 3e1a4c6b39d03f5ba8439509adbd5a23c9538088a3cb679e7a47b911e8442bc6

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d
MD5 2187d7c1e2c3f1553132394eecb82e20
BLAKE2b-256 0fafc30ee2a9f99d51db9844acaa8fa0b611a97c2fa7116646fa43db3300b187

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5
MD5 0d7ad680c055478468c84c954a7e737b
BLAKE2b-256 595a16d51d05360be4cee3ebfe4837c184054c4eed16cabaeb3b039524e9a000

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563
MD5 1be2449cfb058143e1d496a055ff9066
BLAKE2b-256 8d4e3ff12cebe6d31662d9ceeabfb282de20bd0d6098fa282b4a3b8305abc7e8

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78
MD5 7921bebf27f357fe2341dfbf68df32e1
BLAKE2b-256 589cdfc82846460e7a712310f5613f23d8b553cabb4e2e648663c11d8382af56

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91
MD5 6c63136b47992653c99ac5eb84b63186
BLAKE2b-256 17ee2bb594da6fd95e32f29057f1aa7fa996701b8980090923c2d8711fdc0a24

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9
MD5 65b3da330b8d57f3d33f323dc9ba0fc3
BLAKE2b-256 09fad2d6369257fd2f0de616b1c7110b73fab409ef61b14f1b9e0010ed325914

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb
MD5 7d6adb2156061399c0a1e3eac9c3cd37
BLAKE2b-256 59b4a0356fa04d6a14337a6e0e443556785a0422c53ec58baae6b9568120eb0f

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0
MD5 4d6e4927142731953c98f2b0299b164a
BLAKE2b-256 324f31c1073314ad94466bca37d29581761d70110237ee3d46b0efece59a8c1e

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a
MD5 b72c75ba3e886aa519039d923983f37c
BLAKE2b-256 34dbf9ea1a6844b4fa5dfe2312095cd866a1f724cd0905054ab9d5991778ba50

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c
MD5 829af8aba28f5e3bcc143166643a94b0
BLAKE2b-256 caf372ebc4acb10a06bcf7503fbc6091c8f5db68300f6aac4356c09e6c76e0e1

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8
MD5 520d48962cd8d65d1ce9a55af30a0387
BLAKE2b-256 b9a3b3b05095c174d6e80d37d5ddc2f57c2c56237333e7bbd6079cf3243c2a8a

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d
MD5 751b12f0edef0c684e08d61f6f15e794
BLAKE2b-256 e20a70efbe861ca182d7d4b6e1a20f58e043400848fa9f2915229f082e221648

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383
MD5 25fedcb504d4c7a00d3cf0cf391556d0
BLAKE2b-256 8d11753fca2e6b109be3ab7867abf357dfe48677fe726ae5a5363d0b54ca9450

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da
MD5 9955d3669683b3b04655b8ada64ce2c7
BLAKE2b-256 b62d37e3da037318a70066ded0d51bc2a7f35491ae6338dd993d5eb1503fc3b5

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a
MD5 a41fba574a5f77467506aab51ba66caa
BLAKE2b-256 1990cd798935668cff71d309d8ff10385844ecf216b1fe454f1993ed8bf2cb91

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838
MD5 8e2ee2f873bcfeebce90a80b4bb3215f
BLAKE2b-256 bd44caa9cab5f261a019e2808bc5046152775dc57352ba9cbae7525e9e7a1ed4

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820
MD5 0afcfdf3575055660744935938c12d8e
BLAKE2b-256 85d1912f14fd5eae168aba726ffb6a9a2dc1c71fe7676c53da6f5c442b886d4a

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b
MD5 b8555a25d156d8b0c081d390bfc39a0e
BLAKE2b-256 b8137a562289c8d5b49ebdf3f9c1e8ab67cf14a8743b1d90c8f406bfdec36b72

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c
MD5 79b2938e623039d080280b71a9915c72
BLAKE2b-256 96c95d781d4ef1124564a45c98b9ff25d531c10cdf568ec6314a2d1946f9251c

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e
MD5 fa86eb7a865d73b78851e16e1b7ce9eb
BLAKE2b-256 ab629e2569867e3dcff7ad6d89642a9615b9801b5cd698abe7df3b490361f66e

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107
MD5 c3950021935148eccdc517887f96a0f0
BLAKE2b-256 065f9117bf854aef817ad0d0ee9310eed0308a7e529e7eaf2e80ad9cd281ef82

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e
MD5 a5515c6c5bbf1a7800fbbd98c06aecd3
BLAKE2b-256 f33a7839048997c7bc0c34c57526f539f835e20c7a57dc2a99f99579b11cdbef

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e
MD5 af111d3ce2650798206f3de0b943084e
BLAKE2b-256 2a923a6ea4a2c6dd9e7062698a5a33534ca0e20844883338ae9c6b9c122c1a9f

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790
MD5 81ce4bb75e68554fc3ee4cb3b5f8ba56
BLAKE2b-256 96f21ee0ccb772d71e822f625d6cb5f0ea825835e877f28a9ef299a1291df19e

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0
MD5 c24b7e79d009afbab930af63639ce846
BLAKE2b-256 2031f23a2efaa0210b883574001b88fa64e499f798f0848a0b610fb9b384d162

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp310-cp310-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936
MD5 2195e4e62cd39d9c500bd09ea1ee20e0
BLAKE2b-256 1f557da03b35582a4eb276f99051109f3e3e8f176835b6d6837422e4c3a013dd

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0
MD5 4f5d2ed835711b53909a563d74f88177
BLAKE2b-256 2683c3547715c29b7e4c84a180a240267f7685dde6f9b981396f16b95405ec9d

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d
MD5 ce35ffb97d8823da8f0543f16a92ed44
BLAKE2b-256 e479dd1836df32971d4eb14ff5cb4a8b3fe4419adbeada8e81d09dc53c5c0ef0

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711
MD5 e61b8c363972f9fb6fcb603d445a8d16
BLAKE2b-256 90d5a69a8cc896e7de3fe2061b08c2f33e28656f243bed8af6a2df9f5d8c3124

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914
MD5 c2b325c88d9202dec3d7e2fe991ef25b
BLAKE2b-256 1b393d43a75dd5a22503ca5074d0d37707cabb2e4a71b4bc6e6c61be3643cc7a

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b
MD5 5715264efc4c4dfa8038670e2810478f
BLAKE2b-256 365a2a1d84c87dc075d4f8cf1a2470a95399e59834e219ffb5f4285533e750d0

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e
MD5 9108ffae6e12bc68876f1552b1e0da77
BLAKE2b-256 711be6c69e4c2026ed575d68dda2847a404468ca7b5fa684bb0b19f71d82d29d

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp39-cp39-win_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d
MD5 33ae5d3ea0b92b4991bdd3aaa283109d
BLAKE2b-256 50ac6475fb278bd4b3fca72f5ac1e31696a1bb4ead654d4b29ac1a219d7c30ae

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c
MD5 70d476a51f4bb459186208617c8c121e
BLAKE2b-256 9832d6348e2ccaa27f747cbb6763050fe8fa023e74e0935e77466041dd38d619

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b
MD5 13d928abb5945240e70bac0a4dfc9af8
BLAKE2b-256 b07603a877d65162256080759374c0c839c81a908198ef28af8d56c7dc5634da

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99
MD5 6a1c3a3efd5cd0e3114d247afe831693
BLAKE2b-256 06a3964225dec91fb1b954a4113f8fe4b5ea2d9e78d6c32887adb7cc716b2060

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85
MD5 56e2eb36b4204739e7e6dffffd9b81d6
BLAKE2b-256 14e9788ccb894875f8acd36f3364a457cc86c2569fc2504ca1776d3fd76bc9ad

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032
MD5 36dcb45829553abba9732988238f2de4
BLAKE2b-256 67bca08a94dd1f08f816b0d7e584fce2ab77882a6c59a92fde41b6b60813f381

See more details on using hashes here.

File details

Details for the file sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3
MD5 ea79c04c739f23021d4d75f9c63c5ddd
BLAKE2b-256 f50995048273ed9bb39af024da36bf53aa4e0d215b2d5eb7f5858de8280356da

See more details on using hashes here.

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