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.
Allocator policy
The Python extension uses mimalloc with delayed automatic purging enabled. It
does not override MIMALLOC_PURGE_DELAY, whose mimalloc v3 default is 1000 ms.
GLRMask defaults each purge to a memory reset (MADV_FREE on supported Unix
systems and MEM_RESET on Windows) rather than a synchronous decommit. Reset
pages remain reclaimable by the operating system and reusable by mimalloc, but
process RSS may not decrease immediately. This avoids charging immediate page
decommit work to an otherwise unrelated runtime allocation.
Most runtime work also uses bounded preallocated parser, tokenizer, accumulator,
and mask storage. Ordinary applications therefore need no allocator lifecycle
calls or manual trimming. Set MIMALLOC_PURGE_DECOMMITS=1 before importing
GLRMask when immediate RSS reduction is more important than allocator tail
latency.
The unstable glrmask._internal.mimalloc_purge_delay(),
glrmask._internal.mimalloc_purge_decommits(), and
glrmask._internal.collect_allocator(force=True) helpers remain available for
diagnostics and controlled experiments.
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,
b"<eos>": 3,
})
constraint = glrmask.Grammar.from_ebnf(
'start ::= "hello" " " "world"'
).compile(vocab, end_tokens=[3])
state = constraint.start()
assert state.mask().tolist() == [True, False, False, False]
state.commit_token(0)
assert state.mask().tolist() == [False, True, False, False]
state.commit_token(1)
state.commit_token(2)
assert state.is_accepting()
assert state.mask()[3]
state.commit_token(3)
assert state.is_accepting() and not state.is_rejected()
assert not state.mask().any()
state.mask() returns a NumPy Boolean array indexed by model token ID. Pass state.mask(size) when the model's logits vector is wider than the constraint's natural token coordinate.
Public model
The ordinary API has four layers:
Grammar: immutable source description with source-grammar/exact-token bindings.UnlinkedConstraint: reusable compiled machinery for one exact vocabulary in pre-link form; it may intentionally remain open.Constraint: closed, rooted, immediately runnable compiled constraint.ConstraintState: mutable state for one generated sequence.
Grammar.bind(...) and UnlinkedConstraint.bind(...) return new values and leave the receiver reusable.
Vocabulary and exact tokens
Create a vocabulary from token bytes to IDs or 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"})
For llama-cpp-python:
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
from_llama_cpp() keeps EOG, control, unused, and empty-piece IDs as
exact-only model tokens even though they are omitted from the byte
vocabulary. They can therefore be used with vocab.token(id) /
vocab.tokens(ids) without inventing fake bytes, while EOG IDs can be supplied
directly as end_tokens.
Use vocab.token(id) or vocab.tokens(ids) for extern token bindings. These values retain the complete vocabulary identity; a binding from an incompatible vocabulary is rejected even if its numeric ID happens to match.
grammar = glrmask.Grammar.from_glrm('''
glrm 1;
start message;
extern token TOOL_CALL;
nt message = TOOL_CALL "lookup()";
''')
grammar = grammar.bind("TOOL_CALL", vocab.token(tool_call_token_id))
constraint = grammar.compile(vocab)
Compile a grammar
Construct descriptions with:
glrmask.Grammar.from_json_schema(schema)
glrmask.Grammar.from_glrm(grammar)
glrmask.Grammar.from_lark(grammar)
glrmask.Grammar.from_ebnf(grammar)
Then compile a complete description:
constraint = grammar.compile(
vocab,
end_tokens=end_token_ids,
optimization=glrmask.Optimization.AUTO,
)
The intent-level optimization choices are:
Optimization.AUTOOptimization.FAST_BUILD(ordinary Dynamic/O1)Optimization.BALANCED(native O2)Optimization.FAST_RUNTIME
They preserve language semantics and all return the same Constraint type. Their runtime trade-offs are Dynamic (O1), native O2, and Static; parser machinery stays internal.
Parser representation
Public compilation selects ordinary Dynamic with FAST_BUILD, native O2 with
BALANCED, and Static with FAST_RUNTIME; AUTO retains the existing default.
There is no public parser backend selector or parser-program constructor.
Runtime artifacts retain their representation and exact vocabulary identity.
Compiled children with supported finite embedding transfers can be bound and
linked through UnlinkedConstraint; unsupported links raise ValueError.
Data-only parser construction and backend inspection remain tooling APIs in
glrmask._internal, with no compatibility guarantees.
The validation report includes measured results and the remaining performance and compatibility tradeoffs behind the unchanged default.
Bind source children
Source composition stays in the source world:
parent = glrmask.Grammar.from_glrm('''
glrm 1;
start document;
extern grammar payload;
nt document = "{" payload "}";
''')
source_child = glrmask.Grammar.from_json_schema(payload_schema)
a = parent.bind("payload", source_child).compile(vocab)
Grammar.bind does not accept a compiled Constraint. To reuse a compiled parent
with request-specific compiled children, use compile_unlinked instead.
Cache an unlinked parent
Use compile_unlinked when a parent is reused across requests:
host = parent.compile_unlinked(vocab)
child = glrmask.Grammar.from_json_schema(payload_schema).compile(vocab)
bound = host.bind("payload", child)
constraint = bound.link(optimization=glrmask.Optimization.FAST_RUNTIME)
UnlinkedConstraint.bind is compiled-only: accepted grammar children are runnable
Constraint values (plus ExactToken/ExactTokens for token slots). It does not
accept a source Grammar or another UnlinkedConstraint. Composition remains
deferred until link, so the terminal optimization preference can choose the link strategy.
Unlinked constraints are serializable:
artifact = host.save()
host = glrmask.UnlinkedConstraint.load(artifact)
Decode
Create one state per generated sequence:
state = constraint.start()
# Stop at the first complete match:
while not state.is_accepting():
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.fill_mask(words): fill a caller-owned packedint32/uint32buffer.commit_token(token_id): advance by one model token.commit_bytes(data): advance by raw bytes.forced(): return a forced token sequence when one can be determined.is_accepting(): grammar-body acceptance at the current prefix.is_rejected(): irrecoverably invalid prefix.
Callers can stop at the first complete match using state.is_accepting(). To permit continuation past acceptance, sample and commit tokens until the chosen token_id belongs to your configured end_tokens. Always commit the chosen token before checking for an end-token break; acceptance alone does not mean an end token was consumed. Committing an allowed end token empties the next-token mask, keeps the state accepting and non-rejected, and rejects further commits.
End tokens
End tokens are final-root policy, not grammar-child semantics:
constraint = grammar.compile(vocab, end_tokens=[eos_id])
An end token is allowed only when the grammar body is accepting. A child's previous end-token policy is not inherited when that compiled constraint is linked into an unlinked parent.
Constraint persistence
Constraint objects are immutable/shareable and retain their selected backend
after loading. Built-in template-backed children also retain their finite
embedding transfers for subsequent links with the template backend:
artifact = constraint.save()
constraint = glrmask.Constraint.load(artifact)
Passing vocab= to Constraint.load or UnlinkedConstraint.load is optional and validates/shares an already-existing exact vocabulary object.
For a template-backed Constraint, save(external_vocab=True) omits the model
vocabulary. Loading this form requires the original exact vocabulary mapping:
artifact = constraint.save(external_vocab=True)
constraint = glrmask.Constraint.load(artifact, vocab=vocab)
Loading an external-vocabulary artifact without its vocabulary, or with a different mapping, raises an error. Do not treat matching vocabulary size alone as a matching mapping.
Grammar formats
GLRMask accepts JSON Schema, GLRM, Lark, and EBNF. GLRM is the native composition format:
glrm 1;
start value;
t NUMBER = /-?(0|[1-9][0-9]*)/;
nt value = NUMBER | "null";
External compiled children use extern grammar NAME;; exact model-token slots use extern token NAME;. Inline g name = { ... }; grammars and externally bound child grammars have the same language semantics, including scope-local ignores.
Lark and EBNF also support explicit @token(<id>) atoms when a numeric model token ID is deliberately part of the grammar source.
The top-level package intentionally exposes intent-level Optimization, not the historical engine-specific dynamic/vocabulary-partition types. Repository experiments remain available through explicit internal/submodule imports and carry no public compatibility guarantee.
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.
Saving with an external vocabulary
constraint.save() embeds the vocabulary. Use
constraint.save(external_vocab=True) to omit it, then load with
Constraint.load(data, vocab). The external form requires the exact same token
mapping. external_vocab is keyword-only; both forms retain the same artifact
semantics as before. Default unlinked constraints keep their existing save() bytes.
Optional boundary queries
Pass boundary_trigger=glrmask.BoundaryTriggerDetail.TOKENS to build a
conservative token summary, or .EXACT for an exact query where supported.
Grammar.compile and UnlinkedConstraint.link build it before returning.
Unsupported exact construction raises an error. The default is .NONE.
Grammar.compile_unlinked(vocab, boundary_trigger=...) retains this request
through save, load, and bind, and builds it at final link. Omitting the
link keyword (or passing Python None) inherits the retained request; passing
the enum .NONE explicitly suppresses it.
Ordinary FastBuild / FAST_BUILD uses the same Dynamic compiler as the
benchmark and returns the normal Constraint / ConstraintState interface.
It retains the selected runtime representation after save/load. Balanced /
BALANCED preserves the previous native O2 behavior. Auto remains the existing
default, and FastRuntime selects Static.
For source grammars, FastBuild resolves bound EBNF, Lark, JSON Schema, and
GLRM children as typed grammar nodes, then compiles the complete language into
one ordinary Dynamic body. Scoped ignores, lexer partitions, and exact-token
bindings remain part of that language; root alternatives are not discarded.
For precompiled UnlinkedConstraint modules, FastBuild retains the compiled
constituents and selects Dynamic boundary traversal. It does not recompile
those constituents as ordinary Dynamic. Balanced preserves the existing O2
and native linking path. Compiled retained-LR children still require a supported
embedding contract; unsupported native links return errors.
BoundaryTriggerDetail::Exact / BoundaryTriggerDetail.EXACT requires native
template components. Requesting it on a retained-LR Dynamic constraint returns
a clear error before trigger construction.
Metadata
Release files for glrmask 0.2.0
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.2.0.tar.gz | 7.3 MB | Details |
Built distributions (wheels)
Total release size: 439.3 MB
Release files / glrmask-0.2.0.tar.gz
| Download URL | glrmask-0.2.0.tar.gz |
|---|---|
| Size | 7.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
820c14a64f516a622e6f08e30d5e496d2328185fb4965eb5632b4bcc0365b481
|
|
BLAKE2b-256 checksum How to use checksums |
6a7ee3fd9e1511cdca055d844b114199e43e090ea314c4cadf91aeb342c1762d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp313-cp313-win_amd64.whl
| Download URL | glrmask-0.2.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 16.5 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
553323b159962b4bf611bd5c00c8adc052621bcae4231c9d1c2a41ff9cbd9bb0
|
|
BLAKE2b-256 checksum How to use checksums |
99e93b686a758ebc3d52afaad31f96fc15f71c093350a9bb2cb14953a0c29fb0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 18.8 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
78fe41443879272f31c5796aca5f6f54117da681208f2c94db220b047bb0d080
|
|
BLAKE2b-256 checksum How to use checksums |
94cb4fd9efcadb8a154baa12451242282be969b3dc00622476771b9b8f211130
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 18.4 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
c62746b3503c44ac2eecf678e9ad37df4066dae72490b8bdf27ee9a1463762ff
|
|
BLAKE2b-256 checksum How to use checksums |
dcc9dabdcd65f954e34747a758f56fe1731a78d3b800c39bb06986ea7d9b105a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | glrmask-0.2.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 15.8 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
175eb0693b63f9296976aa897a00ed2df9c7971d9a9540764fedc5f365ae4d51
|
|
BLAKE2b-256 checksum How to use checksums |
81013b67144dbb12e9264469d19d4a0ac1c9ed7113a76809c1ceae146d3f0a03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp313-cp313-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.2.0-cp313-cp313-macosx_10_12_x86_64.whl |
|---|---|
| Size | 16.9 MB |
| Tags | CPython 3.13 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
1719fde71f49e99a08b664b6de2aa6cd5e5c7c3375e5c4f00f49898c901f70f0
|
|
BLAKE2b-256 checksum How to use checksums |
a42b11c1af92458b872e46139759b63c2bacaf165906a19625a9a6944b4f15f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp312-cp312-win_amd64.whl
| Download URL | glrmask-0.2.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 16.5 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3d66ef9c0e1ae23ff400533aa6ed5c2a06463f92f1dd79e393416313570d99a8
|
|
BLAKE2b-256 checksum How to use checksums |
971c6c1d32c4c638868ed947e3a6232c49e158d800803625ba04a78259ba85b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 18.9 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
63ca368b5f8897bc55b539d8246a8f8b3ed55e9ad00446ea87e175457ff2b39a
|
|
BLAKE2b-256 checksum How to use checksums |
0c79fcae74d6d2188fd9dabb2c503bcf7832d4e938a1878d5ee48ed91a704e9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 18.4 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
748a9acea205a82b43a7d0c7507f3a9cc35e9b79552620fcbc3541a47ff961a7
|
|
BLAKE2b-256 checksum How to use checksums |
76796a408aa477d73a00d360aac7498a758e89e7c1676a89a2eebaba00d9dc5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | glrmask-0.2.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 15.8 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4dad74ac152c053c40c4d8e7b21162f22b5c741158b2920755a09b9f127974fa
|
|
BLAKE2b-256 checksum How to use checksums |
bbfb5d82ded15a81c9d78dfa15fc5a28ea293680ab42051d39f73ebcbe624ea7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl |
|---|---|
| Size | 16.9 MB |
| Tags | CPython 3.12 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2314cf93e6df6857b97b8ed2f401bc7655b9e9ed638287855d5460d2a06aae68
|
|
BLAKE2b-256 checksum How to use checksums |
14eb98d30da7599f9f9ccb0fa9f105bb0ab08cc05fdccb4c8383efc5182d80bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp311-cp311-win_amd64.whl
| Download URL | glrmask-0.2.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 16.5 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6c01f6a05f02a649fa1bff2ca33b87cbc8aca57cc1221be21cd7a1b63c6c1da3
|
|
BLAKE2b-256 checksum How to use checksums |
71393aa8d3641bdeb17cdea05bdd932c6e250857c20cdd30fbf0403000bb7146
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 18.8 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
84d12de22d9b3da60bdf02e965f28c8fc4619e3bd4b5dec5fca5c4091abf29ae
|
|
BLAKE2b-256 checksum How to use checksums |
ec695cdad5611bc389ea3d8fb1eda386ab08d546aadd02ba1d3c87e6a9e46ca4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 18.4 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
bbf6a492ee9adba2d8f092de9992d91b264af59fb8bd3edd9f350e5583db5329
|
|
BLAKE2b-256 checksum How to use checksums |
614c0cb7671d5b684139d61e2653932bedb7b0d24fe9b8bb7f561909a5d0e316
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | glrmask-0.2.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 15.8 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
54434e658e6a0b87e35f12a60c30986cdb370752d2a3c2ecc6e278854926ebea
|
|
BLAKE2b-256 checksum How to use checksums |
c710fad4047a153756d39cab7fc4fa1a9c4f471ac31f79754cf8f766b669790f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl |
|---|---|
| Size | 16.9 MB |
| Tags | CPython 3.11 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
6a2980e4390a672ba16c50523ed275cb67fa625636124fa1ea3605e50d2ea449
|
|
BLAKE2b-256 checksum How to use checksums |
766cda214ffaf0b2a1a4015a4faccb3b5a905e0b11f97a9c2a46aa0d712fe0cf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp310-cp310-win_amd64.whl
| Download URL | glrmask-0.2.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 16.5 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5113e76eea54f7f530fe1e732eb7a69cf2758de3306b3b1b9274f6c145841a23
|
|
BLAKE2b-256 checksum How to use checksums |
6a91d066ef262ac61008e7e1c093cb901830c0b51f028347a40d223f604e9c07
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 18.8 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
cfdee7741798c45765f6bda5184795f4bc184b51a5fd9c96881286178dbb5e78
|
|
BLAKE2b-256 checksum How to use checksums |
4c8dcf5420b149393209bd2e4f5ffa6f197da105dde4877514ae091884500965
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 18.4 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
8fe3bc74c7148e6a3aa5162bb282cfe1f7623448f1c386782873318dd17e16ed
|
|
BLAKE2b-256 checksum How to use checksums |
ca4009640322e9e8e5001c6494f1737212c043f356be7d6e7835d0625d72d89a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | glrmask-0.2.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 15.8 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1462f930dddf074c308545673a3f8fe70bcc29a51e478e3ed0e8e787755963f4
|
|
BLAKE2b-256 checksum How to use checksums |
a9ba829d4a33e808fb7b4a876f39ce43284bb8810721c5c8fb605bae9be0494d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl |
|---|---|
| Size | 16.9 MB |
| Tags | CPython 3.10 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
a116167b8b0dd8e02293df93a7732e19a21a4fc2a0994fad30aa5730aeb451eb
|
|
BLAKE2b-256 checksum How to use checksums |
97c420de546c2c738cabfe10ca2ab94f752eae3efdcbeee02957d0229d64a5f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp39-cp39-win_amd64.whl
| Download URL | glrmask-0.2.0-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 16.5 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cb8f85f4e426829b5934e87abbf2ef127550c602ea7a572206d7408873a3581b
|
|
BLAKE2b-256 checksum How to use checksums |
465374a60f24403bca0786fb5ceee147d171d4b2591d05819972aaf4297ad053
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | glrmask-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 18.9 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
679b28bfeb72493295a5718dad412c881f55622402f2bb8f03dc311b3ca1d0f5
|
|
BLAKE2b-256 checksum How to use checksums |
91f896fe4c6a9aa8ef91b09ccaf036887ed3c8731981da609c3bd49564cd969b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | glrmask-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 18.4 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
783a51eb5ed1cf9d5a1eceafef75ab1c8c6e7f33b8faad1bdd482b6695c6ca4c
|
|
BLAKE2b-256 checksum How to use checksums |
fcd8aa6f67fd893be33f8a0215d5f7b617062da728da86e6e6cfd4baa7139bf2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | glrmask-0.2.0-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 15.8 MB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
22e1ebb36af814b03620317c78bc76b8a5d025686f82a5d2bbe9c46a71465475
|
|
BLAKE2b-256 checksum How to use checksums |
a251b18e1bd97a762b8734f0d95825868e11510ceb55755e5e3b34a1a1fae174
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / glrmask-0.2.0-cp39-cp39-macosx_10_12_x86_64.whl
| Download URL | glrmask-0.2.0-cp39-cp39-macosx_10_12_x86_64.whl |
|---|---|
| Size | 16.9 MB |
| Tags | CPython 3.9 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
ade2baac18d494b2528faaee82b1042d0d9e41e6af496014387f15bb64ba7430
|
|
BLAKE2b-256 checksum How to use checksums |
08456e8153e557f47d34fac349a19e45965cb73e7b58d3320cb1c30b6fdd9e05
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|