GLRMask for Python
Extremely fast grammar-constrained decoding for LLMs.
The glrmask package compiles a grammar together with a model vocabulary and exposes an incremental next-token mask for use inside a decoding loop.
Installation
python -m pip install glrmask
Published wheels include the native extension and support Python 3.9 through 3.13.
Quickstart
import glrmask
vocab = glrmask.Vocab.from_dict({
b"hello": 0,
b" ": 1,
b"world": 2,
})
constraint = glrmask.Constraint.from_ebnf(
'start ::= "hello" " " "world"',
vocab,
)
state = constraint.start()
assert state.mask().tolist() == [True, False, False]
state.commit_token(0)
assert state.mask().tolist() == [False, True, False]
state.commit_token(1)
assert state.mask().tolist() == [False, False, True]
state.commit_token(2)
assert state.is_finished()
state.mask() returns a NumPy Boolean array indexed by model token ID. Pass state.mask(size) when the model's logits vector is larger than the highest token ID in the vocabulary.
Core API
Vocabulary
Create a vocabulary from either token bytes to token IDs or token IDs to bytes:
vocab = glrmask.Vocab.from_dict({b"yes": 0, b"no": 1})
vocab = glrmask.Vocab.from_id_to_bytes({0: b"yes", 1: b"no"})
Tokens are matched by bytes, not decoded Unicode strings.
For llama-cpp-python, construct the vocabulary directly from a Llama instance:
from llama_cpp import Llama
llm = Llama(model_path="model.gguf", logits_all=True)
vocab = glrmask.Vocab.from_llama_cpp(llm)
end_token_ids = vocab.llama_cpp_end_token_ids
The constructor excludes EOG, control, unused, and empty-piece tokens from the byte vocabulary. Pass end_token_ids to the constraint constructor when those tokens should terminate generation.
Compile a constraint
Constraint supports JSON Schema, GLRM, Lark, and EBNF:
constraint = glrmask.Constraint.from_json_schema(schema, vocab)
constraint = glrmask.Constraint.from_glrm_grammar(grammar, vocab)
constraint = glrmask.Constraint.from_lark(grammar, vocab)
constraint = glrmask.Constraint.from_ebnf(grammar, vocab)
Each constructor accepts an optional end_token_ids=[...] argument.
Decode
Create one state per generated sequence:
state = constraint.start()
while generating:
mask = state.mask(model_vocab_size)
token_id = sample_with_mask(logits, mask)
state.commit_token(token_id)
The main state operations are:
mask(size=None): return the allowed-token mask.commit_token(token_id): advance by one model token.commit_tokens(token_ids): advance by several model tokens.commit_bytes(data): advance by raw bytes.forced(): return a forced token sequence when one can be determined.is_complete()andis_finished(): report whether the grammar has completed.is_failed(): report whether no valid parser state remains.
Enable bounded token rollback with constraint.start(max_rollback_tokens=N), then call state.rollback(count). state.validate_tokens(token_ids) returns the longest valid prefix without modifying the state.
Cache compiled constraints
Constraint objects are immutable and reusable across requests. Serialize them with save() and restore them with load():
artifact = constraint.save()
constraint = glrmask.Constraint.load(artifact, vocab)
For complex constraints, compilation typically takes a few hundred milliseconds. To minimize cold-start latency on cache miss, use DynamicConstraint. It has the same grammar constructors and produces identical masks, but compiles much faster at the cost of higher mask-generation latency. Compile and cache the corresponding Constraint separately for subsequent requests.
constraint = glrmask.DynamicConstraint.from_json_schema(schema, vocab)
state = constraint.start()
DynamicConstraint and its state also support save(), load(), mask(), commit_token(), commit_tokens(), commit_bytes(), forced(), is_complete(), and is_finished().
Grammar formats
GLRM is GLRMask's native EBNF-like syntax and supports exact model-token terminals with @token(<id>). The package also accepts Lark and EBNF grammars, plus JSON Schema through from_json_schema().
See the root README for the format overview and special-token examples.
Source builds
From the repository root:
python -m venv .venv
. .venv/bin/activate
python -m pip install ./python
Building from source requires a Rust toolchain and the platform's native linker and build tools. On Windows, activate the environment with .venv\Scripts\activate.
Metadata
Release files for glrmask 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| glrmask-0.1.1.tar.gz | 2.0 MB | Details |
Built distributions (wheels)
Total release size: 166.4 MB
Release files / glrmask-0.1.1.tar.gz
| Download URL | glrmask-0.1.1.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bac7f2a2ac3eab4aeec732b0cd60a5b30be3a43dda587e180b780849bfa88bae
|
|
BLAKE2b-256 checksum How to use checksums |
d1addff76d2e1d102c12c6e30ce81a2016bb78011df6394d55c587cf329094a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp313-cp313-win_amd64.whl
| Download URL | glrmask-0.1.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
745d60911cf0403a50fb4195fdbdeb9b0887e46f9ef5b5de41d9ee159e578916
|
|
BLAKE2b-256 checksum How to use checksums |
dba5945afcee99a794cc4b9232ef35446bf6c74468fb6346ef015247abd3a7b8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
c1419b958f8c536d26b2964b870b51de9100c3e8078b3cf0301b9963af77cc4d
|
|
BLAKE2b-256 checksum How to use checksums |
c91712b5dec17db7ba97a6edccd63e4778428a9295218f8c2cf22a416208e635
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
32fd5ffa289f0e1b5e932df12b89db9132ea313a9b7fb2613e7528f4739732de
|
|
BLAKE2b-256 checksum How to use checksums |
5ca0deb79ed6db4dbdc070ff52f887ecafc3cad22b87dc3670bb85474dd59417
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | glrmask-0.1.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
80788908c3f76276d8d818c25683b4ba30b762fc91f38454bed2d2e40be07ade
|
|
BLAKE2b-256 checksum How to use checksums |
25fab19e6b2c8022a3b4da74cc3dfc6ab84a221d5b990dca6901e8e3a9c2eabf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.13 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
acd419cb1f3ba11d489a7ac4a75783b61c05e57c02bf052db9adcfc0ab844d94
|
|
BLAKE2b-256 checksum How to use checksums |
1c13237c5a03ea7bb859f0432bbf5de0937c232e591b91f71e4ca063c77809a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp312-cp312-win_amd64.whl
| Download URL | glrmask-0.1.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
240f912d8b6156b51095582d60894fa42b1ee5ab45413c9e8adaf3c1df72eae0
|
|
BLAKE2b-256 checksum How to use checksums |
ffc42d2f3fdf6304e147bc654b0740bf4deab8d45c63b2c0c74df9d1b0018433
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a28bb0ded01d42c8883b29d83f4d03c43e4db05b7f599cb769c7d7bd9a2e2e28
|
|
BLAKE2b-256 checksum How to use checksums |
cc82935ff43ac739f445cf31a8a08530ef78e32b00389057640462e4d9c8b5b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
cee26c0976ffb3794999088be2d4198757fdc33843eabafb622f0f12558f73c5
|
|
BLAKE2b-256 checksum How to use checksums |
890503718887e5af11020f3cf74e818825ca42c47d88a8dda6decb0dcf6f4afd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | glrmask-0.1.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b52303ced0eb034f3916d17c918d7c47e7df6ee65ed22f08de043dbe8ce7243e
|
|
BLAKE2b-256 checksum How to use checksums |
14848555404d0133906c1eaaaa6f67226e3330ae1c203c8578129c98f56db922
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.12 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
b4b8d1910bbba6cb0b02e8341fc2dc2a59a30272b943b3ce9191f3acd13ef468
|
|
BLAKE2b-256 checksum How to use checksums |
1b15faed8b583466748ab2dc96cfa3647058a56f77837d794c1dc55c96667d94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp311-cp311-win_amd64.whl
| Download URL | glrmask-0.1.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e3e3399fc9f02561f5818b13dd3e4b7eadcfb10320da51bf107e8f72cb9cc5a3
|
|
BLAKE2b-256 checksum How to use checksums |
75256b6e4791cd08d3761ef2bfaf0bc4d95cde8606b01445fd74b6fe702a13ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
252a44d6640dd2a439b558e46e6bab0d9e2a5e0efaf195523cdef4b7e44a16f3
|
|
BLAKE2b-256 checksum How to use checksums |
552f12698382d586562e1c94f4f50accd1eba0ed60dfed8ca0419cbb0819dd16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
658d569602f74ab969d9b9d7b73d2b66af614b10e7dbcee48e58f3bf6a24d6e7
|
|
BLAKE2b-256 checksum How to use checksums |
e6ed0429c856758ef81d46f3176de0777132f82eed9ed3496502388e4485be9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | glrmask-0.1.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a2f3c0b38e84a4053ffd0a2aea8de0b7faf72c0638340fcba011d3912bbd3928
|
|
BLAKE2b-256 checksum How to use checksums |
cb36b50d05132c3abe0ecf8b8aab0dfd5d9688c75cb2b72c21fd66937ce1b5a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.11 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
a3e9cf152f997dd9eea05e3efdfc068577efa64ae6d266125c1d2914ae99a394
|
|
BLAKE2b-256 checksum How to use checksums |
73fd602d642acdd139aa02fadb7550645a3618be393a31334f339b691383f634
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp310-cp310-win_amd64.whl
| Download URL | glrmask-0.1.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
34142fb7ec8911259f5beb4641133b5d426cc04eef88c55df57aa195e748cef4
|
|
BLAKE2b-256 checksum How to use checksums |
d6a98b5f73b551af52ff4e801a7c7903209bf5ecc8861ce1c8a5d450a3744063
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
4450986218acedf9f66b6f76e3b46218d0fbceaef8573ae7742fbf7e2fa03fbb
|
|
BLAKE2b-256 checksum How to use checksums |
3f9b9249a63d299c610791fa24ce3c3315a404079e06ee01ba24af944b94fe46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
fd30a93f0d897100d41f5405170bf6ed45e6ffd0f5a3cc8ea5bf1092b9de0554
|
|
BLAKE2b-256 checksum How to use checksums |
e91ad0e9dd43378d4affc7d1dea904cd804655e4c781ab05300c8294f3f71e66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | glrmask-0.1.1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
64923df1bb488871649dc93f10aa0ab0afa527e6af5ff684d463c4a284607332
|
|
BLAKE2b-256 checksum How to use checksums |
8bf6ebf733d6357e0f2ba234ba380cf8fef211cb759e45ad1815d61d6b4d7c45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp310-cp310-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.1.1-cp310-cp310-macosx_10_12_x86_64.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.10 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
81dc051254568e1d05d50c8fb0bf90ee754fe70c0e8a8e5a0480c0d81b2e7c6a
|
|
BLAKE2b-256 checksum How to use checksums |
0f157036254e3a7ed214739d2d891886a4c07c3796931d6a28799eb676cfee85
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp39-cp39-win_amd64.whl
| Download URL | glrmask-0.1.1-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b2bd80df3fabd0d36f30a4b62455e792429dc50ce09ef8b74ff2eb8c4b5ea316
|
|
BLAKE2b-256 checksum How to use checksums |
953139324394157a28c651fe3f19ea4390fd3dfe2c55492d406c59383bd4519a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
5550292e7abb2efbb3c7eb088b7d23ab4f5f1edd177fe33f1ddc663866ed0301
|
|
BLAKE2b-256 checksum How to use checksums |
031d7620de1fd0510e4437544c2d22b43077f323f928d44db69ebf8a791d8674
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
8cfdab3cf7f8761bf0fa48818d6bb6d0165ab920e1d712ab735974fd43ffaa6b
|
|
BLAKE2b-256 checksum How to use checksums |
cc637488809553289b4e7a2ca551f1c0109436703b846c7f85aa498dc5f08a8d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | glrmask-0.1.1-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3758bf2f7fef7d40635c3e6abe52cf05f89943264959aeaa52ec4bac58915a84
|
|
BLAKE2b-256 checksum How to use checksums |
0d3cc740a4e41cb8613c7c0f9c1d25d0e48b8d52afa28a775b95e3d5786bee4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / glrmask-0.1.1-cp39-cp39-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.1.1-cp39-cp39-macosx_10_12_x86_64.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.9 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
1760715ec1646bccdb823870e01cfe1db3d30f7d38ad8ac28cc5f6227a14ad38
|
|
BLAKE2b-256 checksum How to use checksums |
009d3a94601c5d88ab60045bdfc9fcfab6077355d662f47c878a796b1b65c8fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|