Skip to main content

Rust-accelerated Needleman-Wunsch global sequence alignment for precomputed score matrices.

Project description

pynw

Check Build PyPI License: MIT

Rust-accelerated Needleman-Wunsch global sequence alignment for user-supplied similarity matrices. Python bindings are built with PyO3.

Align two ordered sequences given any precomputed pairwise similarity matrix. Unlike string-distance or bioinformatics libraries, which are designed around specific alphabets and scoring rules, pynw accepts whatever scores you provide: cosine similarity of embeddings, model outputs, or distance metrics.

Features

  • Fast: Alignment runs in $O(nm)$ time; a 1000×1000 matrix takes <10 ms on modern CPUs.
  • NumPy-first: Pass NumPy arrays directly, no conversion needed.
  • Domain-agnostic: Operates on a precomputed similarity matrix; the scoring function is up to you.
  • Asymmetric gaps: Penalize inserts and deletes independently.

Installation

Requires Python 3.10+ and NumPy 1.21+. Prebuilt wheels for Linux, macOS, and Windows are published on PyPI.

pip install pynw

On platforms without a prebuilt wheel, pip will build from the source distribution. This requires a Rust toolchain (1.85+).

Quick start

Using pynw involves three steps:

  1. Build a similarity matrix. Compute pairwise scores between every element of your two sequences using any scoring function.
  2. Run the alignment. Pass the matrix and a gap penalty to needleman_wunsch. The gap penalty controls when leaving an element unmatched is preferable to a low-scoring match.
  3. Interpret the results. The returned edit operations tell you which elements were aligned, inserted, or deleted.

The example below aligns two word sequences. The similarity matrix is built from GloVe cosine similarities, letting semantically related words align even without an exact match:

import numpy as np
from pynw import needleman_wunsch, alignment_indices

source = np.array(
    ["clever", "sneaky", "fox", "leaped"]
)
target = np.array(
    ["sly", "fox", "jumped", "across"]
)

# Cosine similarity from GloVe (glove-wiki-gigaword-50)
similarity_matrix = np.array([
    # sly     fox     jumped  across
    [ 0.65,   0.25,   0.06,   0.20],  # clever
    [ 0.57,   0.06,  -0.14,  -0.05],  # sneaky
    [ 0.26,   1.00,   0.30,   0.41],  # fox
    [-0.00,   0.07,   0.77,   0.35],  # leaped
])

# Each gap deducts 0.5 from the total score; increase the penalty to force
# more alignments, decrease it to allow more gaps
score, editops = needleman_wunsch(similarity_matrix, gap_penalty=-0.5)
src_idx, tgt_idx = alignment_indices(editops)

# Reconstruct aligned sequences; masked positions are gaps
aligned_src = np.ma.array(source).take(src_idx).filled("-")
aligned_tgt = np.ma.array(target).take(tgt_idx).filled("-")

print(f"Score: {round(score, 2)}")
for s, t in zip(aligned_src, aligned_tgt):
    print(f"  {s:10s}  {t}")

# Score: 1.42
#   clever     sly       (semantic match)
#   sneaky     -         (deleted)
#   fox        fox       (exact match)
#   leaped     jumped    (semantic match)
#   -          across    (inserted)

User Guide

pynw exposes two alignment functions and a helper for interpreting results. Which function you need depends on whether you need just the score or the full alignment.

Score only: needleman_wunsch_score

Use needleman_wunsch_score when you only need the alignment score, for example when ranking or filtering many sequence pairs. It skips the traceback entirely, using O(m) memory instead of O(nm):

from pynw import needleman_wunsch_score

score = needleman_wunsch_score(similarity_matrix)

Score and alignment: needleman_wunsch

Use needleman_wunsch when you need to know how the sequences were aligned. It returns the optimal score along with an array of edit operations (editops). Each element in the editops array is one of three EditOp values:

  • EditOp.Align: a source element is matched with a target element.
  • EditOp.Delete: a source element is consumed with no matching target element (gap in target).
  • EditOp.Insert: a target element is consumed with no matching source element (gap in source).

The editops array alone is enough for aggregate statistics:

from pynw import EditOp, needleman_wunsch

score, editops = needleman_wunsch(similarity_matrix)

n_aligned = np.sum(editops == EditOp.Align)
n_inserted = np.sum(editops == EditOp.Insert)
n_deleted = np.sum(editops == EditOp.Delete)

Reconstructing the alignment: alignment_indices

Use alignment_indices when you need to map alignment positions back to the original sequences. It converts the editops array into two masked index arrays: one for the source, one for the target. Each array has one entry per alignment position. Positions where the corresponding sequence has a gap are masked.

from pynw import alignment_indices

src_idx, tgt_idx = alignment_indices(editops)

Because the indices are masked arrays, take propagates the mask and filled substitutes a value at gap positions. This makes it easy to reconstruct aligned sequences with gap markers:

source = np.ma.array(["the", "quick", "fox"])
target = np.ma.array(["the", "slow", "red", "fox"])

aligned_src = source.take(src_idx).filled("-")
aligned_tgt = target.take(tgt_idx).filled("-")
# aligned_src: ['the', 'quick', '-',   'fox']
# aligned_tgt: ['the', 'slow',  'red', 'fox']

When iterating over a masked array, masked positions yield the np.ma.masked sentinel instead of an integer. This means you can iterate over editops and the index arrays together without checking masks explicitly. In the diff example below, s is masked at Insert positions and t is masked at Delete positions, so only the valid index is used in each branch:

for op, s, t in zip(editops, src_idx, tgt_idx):
    if op == EditOp.Align:
        print(f"  {source[s]}")
    elif op == EditOp.Delete:
        print(f"- {source[s]}")
    elif op == EditOp.Insert:
        print(f"+ {target[t]}")

Asymmetric gap penalties

By default, gap_penalty applies equally to insertions and deletions. To penalize them independently, pass insert_penalty and/or delete_penalty:

score, editops = needleman_wunsch(
    similarity_matrix,
    insert_penalty=-0.3,
    delete_penalty=-0.7,
)

When set, these override gap_penalty for the corresponding direction. This is useful when the cost of missing a source element differs from the cost of introducing a spurious target element.

Details

Precomputed similarity matrix

pynw takes a precomputed (n, m) similarity matrix rather than a scoring function. This means the entire alignment runs in compiled Rust code with no Python callbacks, and you can build scores with vectorized NumPy operations rather than element-wise Python loops.

The trade-off is that you must allocate the full matrix up front, which uses $O(nm)$ memory even when the scoring rule could be expressed more compactly.

Scoring

The total alignment score is the sum of similarity-matrix entries for matched positions and gap penalties for insertions/deletions. Gap penalties are typically negative. By default a single gap_penalty applies to both directions; set insert_penalty and/or delete_penalty to penalise them independently.

When multiple alignments achieve the same optimal score, pynw breaks ties deterministically: Align > Delete > Insert.

Edit-distance parameterizations

Needleman-Wunsch can reproduce common metrics with the right similarity-matrix values and gap penalty:

Metric S[i,j] match S[i,j] mismatch gap_penalty NW score equals
Levenshtein distance 0 -1 -1 -distance
Indel distance 0 -2 -1 -distance
LCS length 1 0 0 lcs_length
Hamming distance 0 -1 -(n+1) -distance

For Hamming distance, strings must have equal length.

API

Full API documentation is available at chrisdeutsch.github.io/pynw. To browse locally:

pixi run docs          # generate static HTML in site/
pixi run docs-serve    # serve live docs in the browser

Development

This repository uses pixi for development:

pixi install
pixi run build            # build the Rust extension
pixi run test             # run deterministic tests
pixi run lint             # run all pre-commit checks (ruff, cargo fmt, prettier, markdownlint, taplo, actionlint)
pixi run check            # run all pre-push checks (cargo clippy, mypy)
pixi run docs             # generate API docs in site/
pixi run docs-serve       # serve API docs in the browser

Linting and formatting are managed by lefthook and run automatically as git hooks.

Related projects

  • rapidfuzz: Highly optimized string distances (Levenshtein, Jaro-Winkler, etc.) with scoring, edit operations, and alignment. The better choice when you only need standard string metrics.
  • sequence-align: Rust-accelerated Needleman-Wunsch and Hirschberg for token sequences with built-in match/mismatch scoring.
  • scipy.optimize.linear_sum_assignment: Solves unconstrained bipartite matching ($O(N^3)$) where order does not matter.
  • BioPython Bio.Align.PairwiseAligner: Needleman-Wunsch/Smith-Waterman for biological sequences with alphabet-based substitution matrices (built-in and custom).

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynw-0.4.0.tar.gz (75.9 kB view details)

Uploaded Source

Built Distributions

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

pynw-0.4.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (480.0 kB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

pynw-0.4.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (443.5 kB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

pynw-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.9 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pynw-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pynw-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl (477.7 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pynw-0.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl (441.1 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

pynw-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (264.3 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

pynw-0.4.0-cp314-cp314-win_amd64.whl (148.2 kB view details)

Uploaded CPython 3.14Windows x86-64

pynw-0.4.0-cp314-cp314-musllinux_1_2_x86_64.whl (479.4 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pynw-0.4.0-cp314-cp314-musllinux_1_2_aarch64.whl (443.1 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

pynw-0.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pynw-0.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pynw-0.4.0-cp314-cp314-macosx_11_0_arm64.whl (242.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pynw-0.4.0-cp314-cp314-macosx_10_12_x86_64.whl (252.7 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pynw-0.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl (477.8 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

pynw-0.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl (441.2 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

pynw-0.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (264.5 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

pynw-0.4.0-cp313-cp313-win_amd64.whl (148.3 kB view details)

Uploaded CPython 3.13Windows x86-64

pynw-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl (479.7 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pynw-0.4.0-cp313-cp313-musllinux_1_2_aarch64.whl (443.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pynw-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pynw-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pynw-0.4.0-cp313-cp313-macosx_11_0_arm64.whl (242.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pynw-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl (252.7 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pynw-0.4.0-cp312-cp312-win_amd64.whl (148.1 kB view details)

Uploaded CPython 3.12Windows x86-64

pynw-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl (479.3 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pynw-0.4.0-cp312-cp312-musllinux_1_2_aarch64.whl (442.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pynw-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pynw-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pynw-0.4.0-cp312-cp312-macosx_11_0_arm64.whl (242.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pynw-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl (252.5 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pynw-0.4.0-cp311-cp311-win_amd64.whl (149.7 kB view details)

Uploaded CPython 3.11Windows x86-64

pynw-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl (479.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pynw-0.4.0-cp311-cp311-musllinux_1_2_aarch64.whl (443.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pynw-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pynw-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pynw-0.4.0-cp311-cp311-macosx_11_0_arm64.whl (242.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pynw-0.4.0-cp311-cp311-macosx_10_12_x86_64.whl (253.2 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

pynw-0.4.0-cp310-cp310-win_amd64.whl (149.9 kB view details)

Uploaded CPython 3.10Windows x86-64

pynw-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl (480.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pynw-0.4.0-cp310-cp310-musllinux_1_2_aarch64.whl (443.7 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pynw-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pynw-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

Details for the file pynw-0.4.0.tar.gz.

File metadata

  • Download URL: pynw-0.4.0.tar.gz
  • Upload date:
  • Size: 75.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pynw-0.4.0.tar.gz
Algorithm Hash digest
SHA256 3dab734a525899601fd11725b2b5991ea77c0e50e7f9e96f685133ddb2df27f8
MD5 add70669387bfa007c6ea35d8f904a29
BLAKE2b-256 83e0fd8c8274cf2f99a98006a665aa581a9b919a4abe36d7b6fd87f9c75b4cc0

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9701e4f296af6054114cf212fa2015a4bbd2dd0fa9156420a3ebfbda3546a6a7
MD5 e029d30ceb7212a578116f039c7f83b3
BLAKE2b-256 eae650043764894132ac6751406a088804c7026c41f46371bba60312bc46ddbc

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2f7851303bdfce685a6c0cb50f1d97bc8c2e93719f985f441ce1a39f34e24d61
MD5 5c5e90a537ae73d3f2d8e95644af1b15
BLAKE2b-256 3263ca2aa8065c266e7889657514b7055fba010842ec798665b9d739e70eb05b

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f8965593d704dd290c9465384c68552833b20d841446f6a75a6de0923789b93d
MD5 da51cc5c930761f11ee8c13e8121a2c2
BLAKE2b-256 191722736d40b9ba9c6d7de673c798f3a988b7f8bb2e13681af67f7ed6d85cc6

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 303d87cc27dfed3b4831966512a2a3cb69535a69952e33bbafcf57b43094f876
MD5 07d177774bc6b34b85f24858595b48ae
BLAKE2b-256 40a6941e36cefda97ea151aa6245c7d0f18a0aca08389407f01068757e2c2069

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 03dce537476ac7b36bbbfe6b3d0edc7bd3546d2e740e42cd2517e366f7305d2a
MD5 b5de71b6fb4da94466b0e5ceaa42b1ad
BLAKE2b-256 2f5548d02a16218d7a16f94b842d818b3a5cf6d71431d5b3ab6662ecc8240b97

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a5a36fc54305c82f559e8527ebbc92dd442c0fb7a84232e9f1a3088df0827dc9
MD5 426527571d29be4f3e58b58b7d61479d
BLAKE2b-256 fee0dd77e14ec80fd827c53831163ed797f540840096dac9750f25e46cd87846

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 44afa86c0c8547790393b71e6c69f5c769ca9b11e214c82b5a62ad14a1c5cf03
MD5 d442cb96110618a9eef0a2b951fe8c4d
BLAKE2b-256 4a0c0b775cedc9b283461133549b02f67bfedefbea9b4f3d718f426c47ceb4ab

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pynw-0.4.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 148.2 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pynw-0.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e90aac965b65be40ae43d622bb7906ef6c6385a9b30fa809196c211fe87f0e62
MD5 a68892e17c4c10597c3fb1ee986e797b
BLAKE2b-256 2900645cf5839b32627cc938fcaab6fb7e4fe38ed14d8b0488d269d4c6f69a96

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d7490e6ed1a42e6496b95808149d4a64fdd9611c394ac1e10b0d9d7129a91db4
MD5 8f3de0ac8e030febb48a61ffe92bce40
BLAKE2b-256 7d9f1a382aa2af54cc5896f682e42b1585e1ead685944068b1bf1c61261c94da

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0f5cae5b98771e2b3fee91823c48920a3b4b3dcfe5605a31b9acc252336cb55d
MD5 c95873218c08c3505adc156e04c1a60a
BLAKE2b-256 5d5db2039b6d6e4d6f3fd1857fc29d1ce6e26d79d370939703ffe535a98e1c2e

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6350fbfbe7b0d43a94072df11e0f8ce3f303d965fbd3164070b0622a3e21d46b
MD5 fce2fcade36f7472103a7ab7ad226fc7
BLAKE2b-256 2c92beec42df24db477e0f3252ae0a2c2813479e1101f6c89a18db4c7e9be9f3

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cf04578aff11c0d4595c0a6ba3848ba0d6823c79c537dbcaa67ddde4af2750d9
MD5 d29379750c32753aaf3c2202b71b36ca
BLAKE2b-256 19277fe5719c7df20c70f30b04e3b73be21dba38f4907c5bbce106b190b5b414

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bcd85dfb27ebfd03e3c556a4fa5794f8bd485b492d1a2a857ff2c612bfa23c68
MD5 6a8ee36a0faf9963c31d72e2b266d4d4
BLAKE2b-256 a8c03c42f2a23d62fd9b400e7fd33ca75a3e720f2d749512a32b9a45e102acb3

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9ab38e7470a6f6de6c3f0c106d9baa025f5c8a5949e78548c4df8ffdfd3dba3a
MD5 e3bd5113c578a239e2b5a6c65118df2b
BLAKE2b-256 9fbee6d7a6998603c6fea3e99952a0a2d37de1d174563b7b21963d784dd12dde

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 72724c8e4bed0ef3af51f08033c669de9e52365867a0b6074d5bbb0d0f7ceb01
MD5 ed15b165cea941102d8f6e32b8e63125
BLAKE2b-256 a3e4a7270633473244fb342db50a434ca20e9b710d107b0869869c3ca60520d6

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f8d56912417719152a6307e876f356ecdb1b5763bc73693868cfe3c8c5dc793a
MD5 d3f731e02d10b5aac43003671adba660
BLAKE2b-256 f1769dd8789804a7905fba044c49327ac87e931817406a11d154cb56cb96aca2

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 37c5f30131e37c7d5791ecb379ff12b5455352d827a6dc92a9307b78e50bb806
MD5 8cd37734658bb77c05494eff7d620ac2
BLAKE2b-256 d18e38ba6faf0965bda48c46fe8c0432587306117013e19d77897e3190bef131

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pynw-0.4.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 148.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pynw-0.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 86ca3b0d83df5c557c78952d9a9225b3a0db2ca1441c5bb6cb8f8656cd69558e
MD5 170cd1a38363ef3e7f6019d21daba64f
BLAKE2b-256 d52598219b97efc26fdc7249b27c160a280a39ad0499fce0b2d402730ad9764e

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 310d28ef5e2a20cb4a52ba726de5257f0982bb1b62091d74af520b3ec00169dd
MD5 9e98110c95e7d892aa611267a52e65a7
BLAKE2b-256 699a447e06dc42988cbadba782f9c32a46e99ffede1a0bb6dfbbbb8860a27e6c

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 07477bb56d8a5839a6db17a4d8b0f8821038901209fc3326579d2b8e8402cfaa
MD5 05544e04f742cf8f0173bde5a8f7c8f5
BLAKE2b-256 46191c30242a89b994e56c0c1b2bd5dcdb495706640a7c374e2eb14d28eb266f

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 00c074f147815dc150d522613dd2674b058de3d2c629532da249e88e6d604fab
MD5 18703efbfd91ffea3782aaa8ea424cc5
BLAKE2b-256 30fb8571a5f84c3163562c42ff6ecdd5546caf18a74e743584907b84a4f883f8

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 96f57e6fc7ce3ad56da67aa180a6089e30b51ac9a79e56556a913f3f13442d48
MD5 62f624c7ed752ef802678803efb5f07d
BLAKE2b-256 c2c74fea4df64abe725dcb30ee92f96c05561e9a599ec8736e951b24f8b8eb90

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b0044207c094b23bd8e01f4297307860b7ca31fb4ddd3200e498187f2292c877
MD5 c6f7db28af6af81c86bd80ab007d9e76
BLAKE2b-256 ef52a65c63800d12d36b8a7ee0a300584050eaab1a8ea5b652d0b7734613d2f9

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c10bac26e8d04cb79a70b1ae095ff49ccbcbae93f55c3dbe84cb87b62452072c
MD5 e052f3903613d72abaf3d11fe50d34b6
BLAKE2b-256 169ccf3f6b5e17156c12a153293746809c9052a1749749e34eda7a1f27e48340

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pynw-0.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 148.1 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pynw-0.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 86a0b8d021b1130eadebb873ae552a24b202b896193cd588b33991ad37a0a5a9
MD5 883cd0d3023445489c6298353c9f0240
BLAKE2b-256 763bb8a8c99561aa5f500ffb1074b958725fa5c2c53d346bce10a069a13328d1

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 47c8e535302eace5eb28f8de48232f125cb60d3e9fc3b61e197526e078f347d4
MD5 f5497105ac89b62ea6727ffe26393e86
BLAKE2b-256 b512f44341ebb787b7b07a39e86c39670d7869651a0a51f191e412f057933317

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a6f5a31bce8f5c8674edaadb0606dd27c0383e3b8a2e407abfc12b81bd85864b
MD5 00cd2f2852ddf10c43e7c62002c525ab
BLAKE2b-256 86dab8d6aebfb03e4c95be94da7c77a8bff068b17dd66c27a14bbfcad56f7953

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 243ef93821c0c1ebff0af99a30c9c0eeec55e513ace2dc877e8b808cb9fa4a5c
MD5 21aab2567744e38d13dc905253a12643
BLAKE2b-256 1d8c7f248cc91f8eaaeccf168c8167b345c148149dc09ac971ea202c514cf402

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6d6e7bb39b9b755396603ad474a1ccc5856fb5d2f054186629fc810c3410d6e4
MD5 a92b59984b510d384f0dad638f67ef1e
BLAKE2b-256 7bcc2a0683d9651b7bb202eda93a85dab6be90948ad48b9ff139463fd9bfdff5

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1fbd435c9edc21b329c10e5f61520c15fe902d47a064869ff5d33051b322ac29
MD5 edc515032a5e55c891d7887d2b2c6f06
BLAKE2b-256 2e92f09807c843eb54af4c316892847906b05c8b96141bac8fc16e06179fdf0e

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f6e91d9ce7d3e396519f2d5511061effcf36fc32ba1d935d85b23ae79390b093
MD5 704140e1c17f115e78d62635f3953cb6
BLAKE2b-256 16efebadb0d1757f7fcf2b0c633311ec503acaf20db0653c60a5b3fb61a8e117

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pynw-0.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 149.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pynw-0.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1aa0cd9da464405b102964976400a9802b714abac1501fe0d49e7b482cecee93
MD5 a11020207ee56976e2e50483297d9a08
BLAKE2b-256 dd420bfbf7ebf3da8965de864b91e032fd9c5da2deff56aa1e46d3cd8c375805

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 66268a01a15e5067632f82cea1057acab3526a2c2464281614d27e3184edd0cd
MD5 24a69958a29ec11a69c62efc0e4cdaf5
BLAKE2b-256 aaadc9566ad598d5997f4d52af3cf3c52e550a1d804f17792cf441d6c16b7317

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d7e35725bdecee94064353e987fc9807e827b6b5491abd8a514acbf764731d1c
MD5 2a430625aa4e9201620b29b9ff005e62
BLAKE2b-256 75959b4943b5744c99e5e009a309f435063d4b56f8772f1cbfdbdebeb023e14c

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e56b9280dccbd22ac678577cd492aa30b86947c772979b60c070509b6a8acb05
MD5 57a7b333601720401b76f8a89b47f122
BLAKE2b-256 4b1c456c730f37c4db0afde53af3342865fd9a26394b2cfb3adf8938d8f12248

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7f6ff6f59bfe8335261eee2641eb245c98031d6e288d5d204f2acdc9e4857b48
MD5 4b9a73ba5d8647005ea9a7475d4020b3
BLAKE2b-256 a70a92f7f4848505db35f080efec6ebd9d0e8433462b273ec9391c9b28470f09

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cbf92a6b646ef00bea0d3717d47aa1ff2a7880d74761f7d1d2cd146d9d111e59
MD5 2221b2ad7b7e72604ee4e8cdb1637a8f
BLAKE2b-256 3085e2104682e60b458ae6a3a03f632e4e5cbd03efd3c1a0f01b40a9bafa36af

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0d243d5064ab8b14acbb81f62cc2b46427bd8892d688df7180baf1d26a6bfa99
MD5 01359a75d63c5a5e56064b08d95e8398
BLAKE2b-256 8ce675e4a6789cc1372a808ea75f31d1a302d3cbf16b5dbc5dff135f768a4ca6

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pynw-0.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 149.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pynw-0.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b9653730a73787693c54c6db50ac71757e2bae883ddbae04fb42607f49e1ea6e
MD5 4109485b61f223d6a2531b40eedcd9d4
BLAKE2b-256 66763a16ba946cb3706820fd11d939b72b268b794f5b775908aa96096d56ffe0

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 091413dbb49cffce28e4ddfcfd1b665c58542d7194cdce041bf3c2c6b0d5198b
MD5 e0f6619c26ed2aa348e6535001e603a3
BLAKE2b-256 5e91bb2104b8b18c620d3e6c57d25fd6a77bf5ddb50ed3fbffe5e5a35bccccf4

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 646310548b0ba5563c93970bd6b218a3fe59b1e1c9440ec3cb9638a33eea1c07
MD5 c51351752a1af4a4d31b4e51e6544e5f
BLAKE2b-256 91705c9b1b88393cf66ad65a62df7cf4917f2674a08e09c8bf2eed38e0a717a3

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 30239ef3046addfa43f27d9fb6e7dea64dadf5ece3a71732af1129c5c995fa52
MD5 761e634508fa530019adca3992a1da8d
BLAKE2b-256 c0dc15876b0f7ba7a9e0aa73bbab6a168189c563f1e9e6388c91e38681a6d305

See more details on using hashes here.

File details

Details for the file pynw-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pynw-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cf7366f49a497d528e06524c6d396f02ba2996c8a0c2c8e11f48cffb6827d908
MD5 1e1ec52d1198d2a90434d4783783b520
BLAKE2b-256 f2c6b2b5414c51be85ba2e940e2ebe5fd04869d99e5918415fba1d8ee52b653c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page