Skip to main content

nwgrad

High-performance C++ sequence alignment library with gradient computation for substitution matrix optimization — exposed to Python via nanobind.

nwgrad implements Needleman-Wunsch (global) and Smith-Waterman (local) alignment with both linear and affine gap penalties. Its primary novel feature is computing the gradient of the alignment score with respect to substitution matrix entries, enabling substitution matrix optimization in gradient-based ML pipelines.

Features

  • Global (NW) and local (SW) alignment — shared template core, selected at compile time
  • Linear and affine gap models — single gap penalty or gap-open + gap-extend
  • Hard subgradient — substitution-pair counts along the optimal traceback
  • Soft (differentiable) gradient — forward-backward in log-space; log-partition function and expected substitution counts
  • Multithreaded batch processing — lock-free work dispatch, per-thread gradient accumulation
  • Guide-banded DP — cheap re-alignment under a new matrix around a cached alignment path
  • float32 by default, float64 on request — the plain names (SeqPair, nw_score, …) run the Viterbi DP in float32; SeqPairDouble, nw_score_double, … run it in float64 (see Precision)
  • Linear-space alignment — Hirschberg (Myers-Miller) traceback is the default for affine global alignment, so long pairs no longer need O(m×n) tables
  • Runtime ISA dispatch — one binary carries SSE2 / AVX2 / AVX-512 (x86) or NEON (ARM) kernels and picks the best one at load; every level is bit-exact with the scalar kernel
  • Zero-copy Python interface — nanobind buffer protocol; no unnecessary array copies

Installation

pip install nwgrad

Or from source:

git clone https://github.com/michalsta/nwgrad
cd nwgrad
pip install .

Prebuilt wheels cover CPython 3.10–3.14 on Linux x86_64 / aarch64 and macOS arm64. Anywhere else pip builds from source, which needs a C++20 compiler with libstdc++'s <experimental/simd>: GCC 11+, or Clang 13+ built against libstdc++. Apple's system clang (libc++) and MSVC lack that header — on macOS use Homebrew gcc; Windows is not supported.

Quick Start

import numpy as np
import nwgrad

# Predefined matrices ship as ready-to-use SubstMatrix objects (they carry
# their own alphabet, so you never have to specify the symbol order yourself):
from nwgrad.matrices import BLOSUM62        # SubstMatrix, NCBI 23-symbol alphabet
print(BLOSUM62.alphabet)                    # 'ARNDCQEGHILKMFPSTWYVBZX'

# Or build one from your own (N, N) array.  A SubstMatrix always pairs a matrix
# with the alphabet that indexes its rows/columns:
dna_mat = nwgrad.SubstMatrix(np.eye(4) * 2 - 1, alphabet="ACGT")

Single pair — SeqPair

SeqPair takes an AlignParams object that bundles the substitution matrix with gap penalties. Pass a SubstMatrix directly — its alphabet travels with it, so amino acids map to matrix cells unambiguously:

params = nwgrad.AlignParams(BLOSUM62,
                            gap_open_a=11.0, gap_extend_a=1.0,
                            gap_open_b=11.0, gap_extend_b=1.0)

sp = nwgrad.SeqPair(
    "PLEASANTLY", "MEANLY", params,
    gap_model="affine",   # "linear" | "affine"
    mode="global",        # "global" | "local"
    grad_mode="hard",     # "hard" | "soft" | "none"
)

# Align, then read the score and a printable alignment:
score, grad = sp.score_and_grad()   # one call: allocates DP, aligns, computes grad
print(score)
print(sp.formatted())               # PLEASANTLY / match line / -MEAN---LY
print(sp.aligned())                 # ('PLEASANTLY', '-MEAN---LY')

# `grad` is an AlignParams; inspect it as a dict:
g = grad.to_dict()
print(g["matrix"].shape, g["gap_open_a"], g["gap_extend_b"])

align_full() (the DP) and compute_grad() (reading the gradient off the cached DP tables) are exposed separately so you can re-align many times and only pay for the gradient when you need it; score_and_grad() above just fuses the common case. The hard gradient is a subgradient read from the Viterbi path; the soft gradient (grad_mode="soft") is the exact gradient of the log-partition function via forward–backward.

After updating the matrix, realign_banded() re-scores the pair cheaply around the existing alignment path:

new_params = nwgrad.AlignParams(new_subst_matrix,
                                gap_open_a=11.0, gap_extend_a=1.0,
                                gap_open_b=11.0, gap_extend_b=1.0)
sp.set_params(new_params)
sp.realign_banded(bandwidth=20)
sp.compute_grad()

Batch — SeqPairBatch

from nwgrad.matrices import BLOSUM62

params = nwgrad.AlignParams(BLOSUM62,
                            gap_open_a=11.0, gap_extend_a=1.0,
                            gap_open_b=11.0, gap_extend_b=1.0)
pairs = [
    nwgrad.SeqPair(a, b, params,
                   gap_model="affine", mode="global", grad_mode="soft")
    for a, b in zip(seqs_a, seqs_b)
]

batch = nwgrad.SeqPairBatch(n_threads=8)
for sp in pairs:
    batch.add(sp)

# Align all pairs in parallel; score and grad are cached on each SeqPair
total_log_z = batch.score_and_grad()

# Sum gradients across all pairs → AlignParams
grad = batch.compute_grad()

# Or weight each pair's gradient, e.g. by a per-pair loss derivative computed
# from the scores.  Reads the cached gradients; no alignment is run.
scores = batch.scores()                     # float64 array, pair order
grad = batch.weighted_grad(weights)         # sum_i weights[i] * grad_i

# Update matrix and re-run with banded DP around the existing paths
new_params = nwgrad.AlignParams(new_subst_matrix,
                                gap_open_a=11.0, gap_extend_a=1.0,
                                gap_open_b=11.0, gap_extend_b=1.0)
batch.set_params(new_params)
total_log_z = batch.score_and_grad(bandwidth=20)
grad = batch.compute_grad()

SeqPair objects are constructed once and reused across optimization iterations. Only the AlignParams changes; the sequence data and, when applicable, the alignment path are preserved.

API Reference

Alphabet

nwgrad.Alphabet.get(symbols: str) -> Alphabet

The character↔index mapping that a matrix, its gradients, and its sequences all share. Alphabets are interned: Alphabet.get("ACGT") is nwgrad.DNA, so two matrices are compatible exactly when their alphabets are the same object.

Named alphabets:

Constant Symbols N
nwgrad.DNA ACGT 4
nwgrad.DNA_N ACGTN 5
nwgrad.RNA ACGU 4
nwgrad.RNA_N ACGUN 5
nwgrad.PROTEIN the canonical 20 20
nwgrad.PROTEIN_X + X (unknown) 21
nwgrad.PROTEIN_UO + U (selenocysteine), O (pyrrolysine) 22
nwgrad.PROTEIN_UOX + U, O, X 23
nwgrad.NCBI_PROTEIN ARNDCQEGHILKMFPSTWYVBZX 23
nwgrad.IUPAC_DNA ATGCSWRYKMBVHDN 15

Extensions append at the end, so the canonical 20 keep indices 0–19 and a 20×20 matrix in that order embeds as the top-left block of any extended one.

The matrices in nwgrad.matrices use a different ordering. BLOSUM, PAM and VTML are all in NCBI column order (NCBI_PROTEIN), and NUC44 is in IUPAC order (IUPAC_DNA). These are not extensions of PROTEIN / DNA — BLOSUM62 does not embed in PROTEIN_X. Combining a matrix over one alphabet with a gradient over another raises, rather than silently misreading the columns.

An Alphabet governs legality and ordering only — scoring is entirely the matrix's job, including for X and N.

For anything not listed, build your own: nwgrad.Alphabet.get("ACGTRYSWKM").

Member Description
symbols The symbol string, in index order
size, len(a) Number of symbols N
index_of(c) Index of c, or -1 if absent
contains(c) Whether c is in the alphabet
encode(s) Validate and encode to indices; raises ValueError on any foreign character
decode(indices) Inverse of encode

SubstMatrix

nwgrad.SubstMatrix(matrix: np.ndarray, alphabet: str = "ACDEFGHIKLMNPQRSTVWY")

Constructs a substitution matrix from an (N, N) float64 numpy array where N = len(alphabet). The default alphabet is the 20 canonical amino acids (ACDEFGHIKLMNPQRSTVWY). Any square matrix with a matching alphabet is accepted — including DNA ("ACGT"), extended amino acids, or any other symbol set. The alphabet is given as a string; if you are holding an Alphabet object, pass its .symbols.

Stored as a dense N × N block indexed by alphabet position — 16 doubles for DNA. Sequences are validated and encoded to indices once, at the boundary, so the DP inner loop is a single O(1) lookup and never touches a character. Asymmetric matrices are fully supported.

Characters outside the alphabet raise ValueError; they are not silently scored as zero. Case is significant — 'd' is not 'D', so soft-masked FASTA must be upper-cased by the caller.

Member Description
score(a, b) Substitution score for single characters a, b
to_matrix() Export as (N, N) float64 numpy array in alphabet order
size Alphabet size N
alphabet The alphabet string (length N)

Predefined matrices are available from nwgrad.matrices as ready-to-use SubstMatrix objects (each already carrying the correct alphabet): BLOSUM45/50/62/80/90, PAM30/70/250, VTML40/80/160/200, and NUC44 (DNA).

from nwgrad.matrices import BLOSUM62
BLOSUM62.alphabet            # 'ARNDCQEGHILKMFPSTWYVBZX'
BLOSUM62.to_matrix()         # (23, 23) float64 array

AlignParams

nwgrad.AlignParams(matrix, gap_open_a=0.0, gap_extend_a=0.0,
                           gap_open_b=0.0, gap_extend_b=0.0)
# or, from a raw array + explicit alphabet:
nwgrad.AlignParams(array, alphabet="ACDEFGHIKLMNPQRSTVWY", gap_open_a=0.0, ...)

Bundles a substitution matrix with (possibly asymmetric) gap penalties. The first form takes a SubstMatrix directly and is preferred — the alphabet travels with the matrix, so there is no risk of mismatching the symbol order. Suffix _a penalties apply to gaps in sequence A, _b to gaps in sequence B.

Member Description
matrix The SubstMatrix (read/write)
gap_open_a / gap_extend_a / gap_open_b / gap_extend_b Gap penalties (read/write)
to_dict() Return {"matrix": (N,N) array, "alphabet": str, "gap_open_a": …, …}
+ - * Element-wise arithmetic over all fields (for gradient-descent updates)

AlignParams is also the gradient type returned by SeqPair.grad / compute_grad(); to_dict() is the easy way to inspect a computed gradient.

Sign convention. Every field of a gradient — the matrix entries and the four gap fields — is the derivative of the score with respect to that field. The score subtracts gap penalties, so a gradient's gap fields come out non-positive while its matrix fields come out non-negative. That is what lets one update rule move the whole struct in the ascent direction:

params = params + lr * grad    # element-wise over matrix and all four gap fields

SeqPair

nwgrad.SeqPair(
    seq_a, seq_b, params,   # params: AlignParams
    gap_model="affine",     # "linear" | "affine"
    mode="global",          # "global" | "local"
    grad_mode="hard",       # "hard" | "soft" | "none"
    kernel="auto",          # Viterbi backend, see "Kernel selection"
    traceback="auto",       # see "Traceback modes"
)

Persistent sequence-pair object. Sequences and alignment mode are fixed at construction; the alignment parameters can be swapped cheaply via set_params(). The pair holds its AlignParams alive automatically, so you don't need to keep a separate reference to it.

Methods:

Method Description
alloc_dp() Pre-allocate own DP tables (needed before align_full() / realign_banded(); not needed if using SeqPairBatch.score_and_grad()).
align_full() Full DP alignment. Sets score and guide_j; clears grad.
realign_banded(bandwidth) Banded DP around the current path. Requires prior align_full(). Sets score; clears grad.
compute_grad() Compute and cache the gradient from the current alignment. Requires align_full() or realign_banded() to have been called first.
score_and_grad() Convenience: alloc_dp() + align_full() + compute_grad() in one call. Returns (score, grad).
aligned() Return the alignment as a pair of gapped strings (seq_a, seq_b). Requires the DP tables (call before drop_dp()).
formatted(width=60) Pretty-printed alignment block (seq A / match line / seq B), wrapped at width columns (0 = no wrap).
set_params(params) Swap alignment parameters. Clears score and grad; preserves guide_j.
drop_dp() Free O(m×n) DP table memory. Cached score, grad, and guide_j survive (but aligned() / compute_grad() then need a re-align).

Properties:

Property Type Description
score float | None Alignment score (or log Z for soft), or None if not computed
grad AlignParams | None Gradient, or None if not computed
guide_j list[int] | None Alignment path (length m+1), or None if not computed
seq_a, seq_b str The fixed sequences
path_valid bool guide_j is usable as a banding guide
score_valid bool score matches current matrix and path
grad_valid bool grad is populated
dp_valid bool DP tables are in memory (compute_grad() is callable)
traceback str The traceback mode this pair resolved to (never "auto")
hb_cutoff int Hirschberg base-case size in rows (settable; default 512)

Gradient modes:

grad_mode score grad
"hard" Viterbi alignment score Substitution-pair counts (integer-valued subgradient)
"soft" Log-partition function log Z Expected substitution counts (true gradient of log Z)
"none" Viterbi alignment score compute_grad() throws

SeqPairBatch

nwgrad.SeqPairBatch(n_threads=0, traceback="auto")

n_threads=0 (default) uses the number of physical cores (falling back to hardware_concurrency where that cannot be determined): the DP is stall-bound, so SMT siblings contend and the logical count measured up to 1.44× slower. add() keeps each SeqPair (and, transitively, its AlignParams) alive for the lifetime of the batch.

Methods:

Method Returns Description
add(seq_pair) — Append a SeqPair
add_many(seqs_a, seqs_b, params, gap_model="affine", mode="global", grad_mode="hard", kernel="auto") — Build N SeqPairs in C++ and append them — much faster than N add() calls. The pairs take the batch's traceback and hb_cutoff.
set_params(params) — Call set_params() on all pairs
score_and_grad(bandwidth=0) float (sum of scores) Full-pipeline parallel alignment. Uses per-thread DP buffers (pair-owned tables are never allocated). If bandwidth > 0, runs a full DP for the guide path then a banded DP. Results are cached on each SeqPair.
compute_grad() AlignParams Sum cached per-pair gradients. No DP work if all grad_valid are already true.
scores() numpy.ndarray (float64) The cached per-pair scores, in pair order. Runs no DP; raises if any pair has no valid score.
weighted_grad(weights) AlignParams sum_i weights[i] * grad_i over the cached per-pair gradients. weights is a 1-D numeric array with one entry per pair. Runs no DP; raises if any pair has no valid gradient. Summed in pair order, so the result does not depend on n_threads.
align_full() float (sum of scores) Full DP on all pairs in parallel using pair-owned buffers. Call alloc_dp() first.
realign_banded(bandwidth) float (sum of scores) Banded DP on all pairs in parallel using pair-owned buffers.
banded_grad(bandwidth) float (sum of scores) Banded re-align + gradient around each pair's cached path, using per-thread buffers. Run score_and_grad() once to establish the paths, then set_params() + banded_grad(bw) after each update.
alloc_dp() — Pre-allocate pair-owned DP tables in parallel.
drop_dp() — Free pair-owned DP tables in parallel.

The batch is also a sequence: len(batch) is the number of pairs and batch[i] returns the i-th SeqPair (negative indices allowed), so per-pair results can be read back without keeping a separate list.

Properties:

Property Type Description
n_threads int Thread count
traceback str The batch's traceback mode as given ("auto" resolves per pair)
hb_cutoff int Hirschberg base-case size applied by add_many() (default 512)
schedule str "dynamic" (default; atomic counter) or "sorted" (length-sorted equal-work chunks — bounds peak DP memory). Results are identical either way.

Typical optimization loop:

from nwgrad.matrices import BLOSUM62

# Learnable matrix starts from BLOSUM62; keep its alphabet to stay consistent.
alphabet = BLOSUM62.alphabet
mat_array = BLOSUM62.to_matrix()

# Build pairs once
params = nwgrad.AlignParams(nwgrad.SubstMatrix(mat_array, alphabet),
                            gap_open_a=11.0, gap_extend_a=1.0,
                            gap_open_b=11.0, gap_extend_b=1.0)
batch = nwgrad.SeqPairBatch(n_threads=8)
for a, b in zip(seqs_a, seqs_b):
    batch.add(nwgrad.SeqPair(a, b, params,
                             gap_model="affine", mode="global", grad_mode="soft"))

for step in range(n_steps):
    total_log_z = batch.score_and_grad(bandwidth=bw if step > 0 else 0)
    grad = batch.compute_grad()
    mat_array += lr * grad.matrix.to_matrix()   # both in `alphabet` order
    params = nwgrad.AlignParams(nwgrad.SubstMatrix(mat_array, alphabet),
                                gap_open_a=11.0, gap_extend_a=1.0,
                                gap_open_b=11.0, gap_extend_b=1.0)
    batch.set_params(params)

BatchAligner

Stateless batch alignment: constructs a fresh DP buffer per call and does not preserve alignment paths across calls. Simpler API when you do not need to reuse paths for banded re-alignment.

nwgrad.BatchAligner(
    params,               # AlignParams — matrix and gap penalties together
    band=0,               # 0 = full DP; >0 = banded half-width
    gap_model="affine",   # "linear" | "affine"
    mode="global",        # "global" | "local"
    grad_mode="hard",     # "hard" | "soft" | "none"
    n_threads=1,
    kernel="auto",        # Viterbi backend, see "Kernel selection"
)

.align(sequences_a, sequences_b, aligned_a=[], aligned_b=[]) -> BatchResult

Aligns each pair (sequences_a[i], sequences_b[i]). aligned_a / aligned_b, if given, are gapped alignment strings (one per pair) used as banding guides.

BatchResult

Attribute Type Description
scores np.ndarray[N] float64 Score (or log-partition for soft) per pair
grad AlignParams Gradient summed over all pairs

Single-pair convenience functions

Stateless functions that create and destroy their DP tables on every call. Useful for one-off alignments; prefer SeqPair / SeqPairBatch for loops over many pairs or iterative optimization.

All twelve share the same signature — the gap penalties live in the AlignParams, not in the argument list, so the linear and affine variants differ only in which of its gap fields they read:

f(seq_a, seq_b, params, band=0, aligned_a="", aligned_b="", kernel="auto")

Each also exists with a _double suffix (nw_score_double, nw_affine_grad_double, …) that runs the DP in float64 — see Precision.

band > 0 (or a non-empty aligned_a / aligned_b guide pair) runs a banded DP instead of the full one. The sequences are plain str and are validated and encoded against params's alphabet on the way in.

Score only — return float:

Function Gap model Alignment
nw_score Linear Global (NW)
sw_score Linear Local (SW)
nw_score_affine Affine Global (NW)
sw_score_affine Affine Local (SW)

Hard gradient — return (score: float, grad: AlignParams):

Function Gap model Alignment
nw_grad Linear Global
sw_grad Linear Local
nw_affine_grad Affine Global
sw_affine_grad Affine Local

Soft gradient — return (log_z: float, grad: AlignParams):

Function Gap model Alignment
nw_soft_grad Linear Global
sw_soft_grad Linear Local
nw_affine_soft_grad Affine Global
sw_affine_soft_grad Affine Local

(Note the naming is irregular: the affine score functions suffix _affine, while the affine gradient functions infix it.)

score, grad = nwgrad.nw_affine_grad("PLEASANTLY", "MEANLY", params)

Precision

The plain names — SeqPair, SeqPairBatch, BatchAligner and the twelve convenience functions — run the Viterbi DP in float32. The *Double classes (SeqPairDouble, SeqPairBatchDouble, BatchAlignerDouble) and _double functions run it in float64. Inputs and outputs are float64 either way (AlignParams, scores, gradients); only the DP arithmetic differs. Over 400 protein pairs measured against a float64 reference, float32 scores deviated by up to 8.4e-3 (mean 1.6e-3). The soft-gradient (forward-backward) path is float64 in both, so the _double soft functions are identical to the plain ones.

The two precisions also have different traceback defaults (next section), so a float32 result and a float64 result are not bit-comparable even where the arithmetic would agree.

Traceback modes

SeqPair and SeqPairBatch take traceback=, fixed at construction. It decides what the DP retains in order to recover the alignment path:

traceback Memory Notes
"pointers" 3 B/cell Records a predecessor byte per cell per state.
"scores" 12 B/cell Keeps the score tables and re-derives the path. Bit-identical to "pointers", slower; for table introspection.
"hirschberg" O(m+n) Linear-space divide-and-conquer. Pairs no longer than hb_cutoff (default 512) never split and are bit-exact with "pointers"; longer pairs get an optimal path, but where alignments tie it may be a different optimal path (a different valid subgradient). Affine + full DP only (global or local).
"hirschberg_pmax" O(m+n) As "hirschberg", with the gap carry computed as a closed-form prefix max: 1.5–3.9× faster on related sequences. The only mode that can return a slightly suboptimal path — measured worst case 4.9e-4 at float32, below float32's own error. Bit-identical across ISA levels.
"auto" (default) — Affine + global + full DP: "hirschberg_pmax" at float32, "hirschberg" at float64. Everything else: "pointers".

Asking explicitly for a Hirschberg mode on a linear-gap or banded problem raises; "auto" falls back to "pointers" there instead. Local alignment supports Hirschberg but "auto" keeps "pointers" for it, because local Hirschberg wins on memory, not speed: select traceback="hirschberg" explicitly for very long local pairs (e.g. >10k residues), where the pointer tables would not fit.

Kernel selection

kernel= picks the Viterbi backend: "auto" (default — the strongest SIMD level the CPU runs), "scalar_fallback", or a named level: "sse2", "avx2", "avx512" (x86) or "neon" (ARM). Every level is bit-exact with "scalar_fallback" (same tables, paths and gradients), so this is purely a speed knob. An unknown name, or a level this CPU cannot run, raises. It affects the Viterbi (hard / none) path only; the linear gap model has no SIMD kernel, so any choice is a no-op there.

Module-level controls: nwgrad.simd_isa() reports the active level, nwgrad.available_isa_levels() lists what this CPU runs, and nwgrad.set_isa_level(name) (for testing; not thread-safe while work is in flight) or the NWGRAD_ISA environment variable force the level that "auto" dispatches to. nwgrad.compiled_with() names the compiler the extension was built with.

Gap penalty conventions

For linear gap model, a gap of length k costs gap_extend * k.

For affine gap model, a gap of length k costs gap_open + gap_extend * k.

This matches BioPython's convention where open is charged once per gap regardless of length.

Performance notes

  • With traceback="pointers", a hard-gradient alignment keeps 3 bytes per DP cell; "scores" keeps 12. The default for affine global alignment is Hirschberg, which keeps O(m+n) — so the per-thread buffer described below applies to the pointer modes and to the Hirschberg base case (≤ hb_cutoff rows).
  • SeqPairBatch.score_and_grad() allocates one DpBuffer per thread (sized to the largest sequence pair in the batch) and reuses it across all assigned pairs. Pair-owned DP tables are never allocated, keeping peak memory at n_threads × max(m×n) rather than N × max(m×n).
  • Work is distributed via a shared std::atomic counter — no per-task mutex, no work-stealing queue.
  • Gradient accumulation is per-thread; a single mutex is taken once at join to merge partial gradients.

C++ header-only library

The C++ implementation is header-only (src/nwgrad/cpp/nwgrad/). To use it directly from C++:

python -m nwgrad --include
# prints: /path/to/nwgrad/cpp

Add that path to your include path and #include "nwgrad/aligner.hpp" etc.

Building from source

pip install scikit-build-core nanobind
pip install -e ".[dev]"
pytest tests/Python/

Python package builds compile only the extension. Direct CMake builds enable the C++ tests and benchmarks by default; use -DNWGRAD_BUILD_TESTS=OFF and -DNWGRAD_BUILD_BENCHMARKS=OFF to disable them.

C++ unit tests (requires CMake). The extension target does find_package(nanobind), so even a tests-only configure needs nanobind discoverable:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug \
      -Dnanobind_DIR="$(python -m nanobind --cmake_dir)"
cmake --build build
ctest --test-dir build

-DNWGRAD_SANITIZE=ON builds the C++ tests with AddressSanitizer and UndefinedBehaviorSanitizer (-fno-sanitize-recover=all, so the first violation fails the run rather than printing and carrying on). CI runs this under both GCC and Clang.

License

MIT — see LICENSE.

Metadata

Release files for nwgrad 0.5.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 nwgrad 0.5.0
File Size Uploaded
nwgrad-0.5.0.tar.gz 140.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for nwgrad 0.5.0
File
nwgrad-0.5.0-cp315-cp315t-musllinux_1_2_x86_64.whl CPython 3.15 CPython 3.15 free-threading Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp315-cp315t-musllinux_1_2_aarch64.whl CPython 3.15 CPython 3.15 free-threading Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
nwgrad-0.5.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
nwgrad-0.5.0-cp315-cp315t-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64 Details
nwgrad-0.5.0-cp315-cp315-musllinux_1_2_x86_64.whl CPython 3.15 CPython 3.15 Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp315-cp315-musllinux_1_2_aarch64.whl CPython 3.15 CPython 3.15 Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
nwgrad-0.5.0-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
nwgrad-0.5.0-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details
nwgrad-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
nwgrad-0.5.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
nwgrad-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
nwgrad-0.5.0-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
nwgrad-0.5.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
nwgrad-0.5.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
nwgrad-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
nwgrad-0.5.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
nwgrad-0.5.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
nwgrad-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
nwgrad-0.5.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
nwgrad-0.5.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
nwgrad-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
nwgrad-0.5.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
nwgrad-0.5.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
nwgrad-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
nwgrad-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARM64 Details
nwgrad-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
nwgrad-0.5.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
nwgrad-0.5.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 34.6 MB

Release files / nwgrad-0.5.0.tar.gz

Download URL nwgrad-0.5.0.tar.gz
Size 140.3 kB
Tags Source
SHA-256 checksum
How to use checksums
82993a7c9ce98318d7c8a8c41869da88148c1689f43c578a6c54c4172e1e2187
BLAKE2b-256 checksum
How to use checksums
3d90a40d4fdb808367325e4402b8849d806da1d33e9c4c0603c6e08714b92302
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315t-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp315-cp315t-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.15 CPython 3.15 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
e5b53a9618b88f08b8939bca069e9bed95656368e14494554c8c7bf2d39717ed
BLAKE2b-256 checksum
How to use checksums
d5043bfd71d1ecff88e8acc01085e7c5fd92de2eba660a456787b25de816ad66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315t-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp315-cp315t-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.15 CPython 3.15 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
4ed11c2a61d7450d5a524e2b8d5419f1ee677c359ada47d10770482296c95829
BLAKE2b-256 checksum
How to use checksums
e2bb8e6655f63e66f08a0c7f3d0d663ef9c498164cc168fda1c871a794814f44
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 773.2 kB
Tags CPython 3.15 CPython 3.15 free-threading Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5be9e0f02b85ef71188e634107c7f38371415b244912eb524ef456b3c18b2988
BLAKE2b-256 checksum
How to use checksums
07e603f8690d718cf3ad849e1caaa6e10bcfbaff4f87ba4b15bed8cd28264d71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 589.3 kB
Tags CPython 3.15 CPython 3.15 free-threading Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
e6461da34abf92e42525d5f43b1f9e38883987bd5ffcfd023518df6d30642186
BLAKE2b-256 checksum
How to use checksums
2715b644a1ab384be7e16346833ade51eb36965aa73f5ed065d44a679f1c95f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315t-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp315-cp315t-macosx_11_0_arm64.whl
Size 705.9 kB
Tags CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6604e27dc1424c7cb449bb843ebaa4cc318c625048b96ae7d93a308a363be300
BLAKE2b-256 checksum
How to use checksums
3117eed3582d6e5324d1f3179333c51ba24d1cc034a622060dd2ba04446d381d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp315-cp315-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.15 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
689cfba24ae753e8242f951fe0a59f7fae2d4da9b4daf76feef9bba772577bfb
BLAKE2b-256 checksum
How to use checksums
ef0b15f5917294fe54710bed7ff642c7cb1ec5594a42e5ccd83bee328042a18a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp315-cp315-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.15 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
27f3633aba8283d56c53b7373d238ef7b512a2bbf503e482ef4af3a999490c99
BLAKE2b-256 checksum
How to use checksums
cfc5e92d1ba43f29d0edc7f503757c86ba3432509c9fd746d7c8cecee594e83f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 771.2 kB
Tags CPython 3.15 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7f42b74764fd7f2eba599c3805c9952ddf63701542b3d89e7a79411d5b0cca89
BLAKE2b-256 checksum
How to use checksums
0ea7201119fb32ae7474b4580f51df0343f864d9ca5cfaca0b64aa2e0cdd9166
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 586.5 kB
Tags CPython 3.15 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
68c749286a5049587be64fd2a7b177aa7037136aeb032c64f745471a0ba8d6e1
BLAKE2b-256 checksum
How to use checksums
051b2282a3843167c6c4e1380e1002756cc4776bb9adbf7addda72b9cd04aaef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp315-cp315-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp315-cp315-macosx_11_0_arm64.whl
Size 703.7 kB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
dc8306030c8fcc6d228016419297062f3178fd603c955cc1dc639f7302c92f21
BLAKE2b-256 checksum
How to use checksums
25394baa8e585c12dcc6eaa66d7ca427875a9c26095d6edb48590b7d85b68fd6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
4f6da65d23d7b2a34aafe526bc6f0c0dca87907783e74965b914aad2053dc184
BLAKE2b-256 checksum
How to use checksums
2c71f0286a65bf56f8938d7e7e53ad94267e92c0028eecbd53fbff31c80136c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
851a30a7c9869d95c03574326ffcdeb765b04719799367f259fc5ccd7b3a1a70
BLAKE2b-256 checksum
How to use checksums
13c5fb5b6787960eedc94b571da25a84a7ebdf69bd3ef1491bdf13ed77b4c1e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 772.9 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6e64bd460814fd258489cd4c35ff79dc3cf379e4acb8f50676ca535b31235aa0
BLAKE2b-256 checksum
How to use checksums
88eafc1acdaa779840b189ed53bd5a89341ccf482f1dc6b1d8f816ae3923662a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 589.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
294054a1ebe9d3f5d1eb349c4be0a8d36f0f81576dc0e8a2e64cd1b5ada0159b
BLAKE2b-256 checksum
How to use checksums
66883d26d57d056090b3c09440e996eaa59314223c48753580d88afe3d2713d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 705.7 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
266ae896029f34c33f1c2fb2d29fd3e7ba3cde1d648b7d3c89dfee77727d4f23
BLAKE2b-256 checksum
How to use checksums
5c113ee2d84a3a575ea7215ed8bf7275da50ebfc1ed8e2b2783f00d637f5fabf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp314-cp314-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
6a0db5e818b793261d30261b237e68e9528e67e6bda4983affbaec84637db8d5
BLAKE2b-256 checksum
How to use checksums
b1db7a3130497a869211867d2a1220c8f4e4f0fc08555edb09a16e506c7f3cc4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp314-cp314-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
75420a4a165305f9512310d420fccc9c4b9d47913a65b207cc03e72cd158db3a
BLAKE2b-256 checksum
How to use checksums
ca9a4eaab57a012c2e62d11a8495d45014782c867a9a5721ce6cb2c7cc816dab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 771.0 kB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7dfffc4864c6389738d717fe28cb2bf421ca4ade97b8aff50953d585dd3beba3
BLAKE2b-256 checksum
How to use checksums
2ded194da25d4e06faceb8065980a24a0476e283f990d600bf4941c63ca752a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 586.4 kB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c9957ae090d85538b9f28afefc1075760482ba65686802de0464ce7684df8d61
BLAKE2b-256 checksum
How to use checksums
c92c1b5b037f63d1bd07481f19e7da3ed561599b37d3146ec57073f31c6825cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Size 703.5 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
89ae67d26bf3872ef8f5169f9376b3665c428008fa3df232a67b8f62e34c5d3e
BLAKE2b-256 checksum
How to use checksums
db5b2f06d5435060f2e15b17b7fcec179f987d05d1ec8665e022f162dd260167
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
7888a11f3149161cb083e5ad0bfed9b813b38c776f1fbe132f6c9d71c96f7235
BLAKE2b-256 checksum
How to use checksums
0ad65bf14b7427d36eec7736712b9195f5e2c19275d1d38d468e2bcff051874d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
b50b50aee49392f903a445d87bed71a2271213d2629e2aac361340f7c6391590
BLAKE2b-256 checksum
How to use checksums
7e1452fa30a59d54ffcf1b215d29ac93f4b976ef5b2c9eac93c55a1846d342f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 770.7 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
16127fde63d505bdd94307a23d69df73408cbaec314e8bc48339e7cc7a61482e
BLAKE2b-256 checksum
How to use checksums
1df31e48127cf5a61d603438a7b5e36937b97c8422081b12b7f3bb27538ff91a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 586.2 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
cca34c73316cfebf6b62dd70d80d9928521a731ef671a019139ea541f68b11e8
BLAKE2b-256 checksum
How to use checksums
4d37c387f078f16fb80bc487d583f720700a509290f4b091a765455c9fac8f72
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Size 703.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f735805769e4c396180623421ab69d818aec697fe7218718eafa51a09889309f
BLAKE2b-256 checksum
How to use checksums
978d316908814d302ea9f88ba5b80e703bb4ef31238fd755526b7eb13443b039
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
1b9e13bb2a195c41e8241cb7009af0f79e449d4a9ccbc1e38037f2e5fc4ae758
BLAKE2b-256 checksum
How to use checksums
f79157bd756d10b023dc94557e37267d08da21d3d815af93da3efd1b7fc8b814
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
8e1786b63d9ca5855e41b4d47af5b253f7fa9509d68b54df88eb615e8f362bc8
BLAKE2b-256 checksum
How to use checksums
5786164d8d0ccfc2ec7a56ad6d6d9e3fb4cb25c68c9ee91389893264b9c74003
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 770.8 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0987bd374a9442f55df629709b892ef5e8f92936fd608b823beabaebb8831a94
BLAKE2b-256 checksum
How to use checksums
1d19cd4decac986b8606fb49d9f102ea298d5fa294ce5a96d0dbf82845524c43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 586.2 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8fae6bf038ee7a2eb4523957bb23ecf7a2f8f37a98520f032918560cecc19dd1
BLAKE2b-256 checksum
How to use checksums
391ff3700733b6c514b640a9039dc67bafded1f14c9c099bcb9266a004d1a89b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Size 703.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
659b6021c3c73b85fe51688b051110c40b859a0f4c8a54c1bb8d0ab5d9109372
BLAKE2b-256 checksum
How to use checksums
a3ecd5c3f1dd7a9e2c73d680306fbcef3a44b111034ad5c01b188fec0113106c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
39f3253d9bd38de795f60b3bb807efbbe469f83e20e047180f9c97a256209f9a
BLAKE2b-256 checksum
How to use checksums
c517b9984bee82a751d354918c014af4402c10d19e7db955183d8829a5d9134d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.11 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
f83b2ff879e63edb827bd79a7a184ba3dfa92bf62b46af127619a09aa8199f92
BLAKE2b-256 checksum
How to use checksums
64f03bd21214e540de016e8e5c4d10b5fbe49425cc804ecd5fc7e0a9a1e3df40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 773.2 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
aa81aa73bdcd669296a049f49568b3d0d8665f2addf4384c68d603b66218f7d4
BLAKE2b-256 checksum
How to use checksums
da7afcb2a91237965764d861ac45a39cb135adc7f82e044ded886cef1e24f80a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 588.1 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1b04fc33f36352e164d4644abf806347f00476c32bbc6eb822db4d9515fca746
BLAKE2b-256 checksum
How to use checksums
cc5ab98789f5a40f05c3d11c4228c429230386240557d219e7c5f4afd31505a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Size 703.5 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6d675f08c62136efbbeae3d6366b6f25a63cd57d44903ac103366218e2694838
BLAKE2b-256 checksum
How to use checksums
969fac76ebed9af426cacc6140a5137099ec84af28f2a45b9e5fcdc8893df597
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL nwgrad-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
b87e664f25a3377203d5dd27381b32baff6f5c951feab22c815a1ec21c83f7d6
BLAKE2b-256 checksum
How to use checksums
f8fefdf78fa40ca8c63313984aa682960a767c8667660f184136c9b1195128d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl

Download URL nwgrad-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
220cfe777007fc16957d2c6ad3178ace220da50622747f3b9ae75e2e06b00779
BLAKE2b-256 checksum
How to use checksums
734e1bc4c6116dd0c50638f18d2b511fd678faf219f20ebef004fa609b32f651
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nwgrad-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 773.6 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0ff90e067b2ffa2687af77fefd71b35801275a16a9ff7c36eff35ee4f6888bd9
BLAKE2b-256 checksum
How to use checksums
3f072ea30cb0c5a825d0640384079dda745884642e42b5294241f6eee196200b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL nwgrad-0.5.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 588.6 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
01c53ba91e7e2b4998b90fb372f2ddcf3592a9d467116e06c6511bcd5794b5fa
BLAKE2b-256 checksum
How to use checksums
2d42f2e2cf67da29fb84d0f18c49030a81cbfa84b9ab5632f5978293ca964811
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nwgrad-0.5.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL nwgrad-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Size 703.9 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
762758b39d6d6f7647574ad551fd82f95d52d7969d7ccb73dd1b7841f1a02c3c
BLAKE2b-256 checksum
How to use checksums
393e5dfc22c1296a756f0d640453179ec2e165527b287378f470883bde3483b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

41 release files

0.4.0

36 release files

0.3.0

36 release files

0.2.0

36 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