Skip to main content

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.AUTO
  • Optimization.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 packed int32/uint32 buffer.
  • 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)

Source distribution for glrmask 0.2.0
File Size Uploaded
glrmask-0.2.0.tar.gz 7.3 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for glrmask 0.2.0
File
glrmask-0.2.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
glrmask-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
glrmask-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
glrmask-0.2.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
glrmask-0.2.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
glrmask-0.2.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
glrmask-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
glrmask-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
glrmask-0.2.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
glrmask-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
glrmask-0.2.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
glrmask-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
glrmask-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
glrmask-0.2.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
glrmask-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
glrmask-0.2.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
glrmask-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
glrmask-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
glrmask-0.2.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
glrmask-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details
glrmask-0.2.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
glrmask-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
glrmask-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
glrmask-0.2.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
glrmask-0.2.0-cp39-cp39-macosx_10_12_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.12+ x86-64 Details

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

Release history Release notifications | RSS feed

This release

0.2.0 This release

26 release files

0.1.1

26 release files

0.1.0

26 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page