Skip to main content

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

Project description

pynw

Check Build PyPI Python License: MIT

pynw aligns two ordered sequences element-by-element using any pairwise similarity matrix you supply. Think of it as a generalised diff for arbitrary ordered collections: words, embeddings, tokens, or any objects where you define how well each pair of elements matches.

Unlike string-distance or bioinformatics libraries that assume a fixed alphabet and built-in scoring scheme, pynw delegates scoring entirely to the user, so any pairwise metric works: cosine similarity of embeddings, model outputs, learned distances, or domain-specific rules. The Needleman-Wunsch global sequence alignment algorithm provides the underpinning for pynw. It is implemented in Rust with Python bindings built using PyO3.

import numpy as np
from pynw import needleman_wunsch

# Pairwise similarity matrix between your two sequences (source × target)
S = np.array([
    [1.0, 0.1],
    [0.1, 0.1],
    [0.1, 1.0],
])

score, editops = needleman_wunsch(S, gap_penalty=-0.5)
# score: 1.5
# editops: [EditOp.Align, EditOp.Delete, EditOp.Align]

Features

  • Fast: Alignment runs in $\mathcal{O}(nm)$ time; a $1000 \times 1000$ matrix takes <10 ms on modern CPUs.
  • NumPy-first: Pass NumPy arrays directly, no conversion needed.
  • Domain-agnostic: Operates on a user-supplied similarity matrix.
  • Asymmetric gaps: Penalize inserts and deletes independently.

When to Use pynw

Reach for pynw when you need global alignment of two ordered sequences and the notion of similarity is specific to your domain: aligning sentences from two translations using embedding similarities, matching token streams emitted by different tokenizers, comparing event logs with custom match rules, or any case where precomputing scores in NumPy is natural.

If your problem fits a standard string metric (Levenshtein, Jaro-Winkler, and friends), rapidfuzz is faster and more featureful. If you are aligning biological sequences, use a bioinformatics library such as BioPython. If ordering does not matter and you want optimal one-to-one assignment, see scipy.optimize.linear_sum_assignment. See Related Projects for more.

Installation

Prebuilt wheels for Linux, macOS, and Windows are published on PyPI:

pip install pynw

pynw requires Python 3.10+ and NumPy 1.22+. 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 cosine similarities of GloVe word embeddings, letting semantically related words align even without an exact match:

import numpy as np
from pynw import EditOp, 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)
source_indices, target_indices = alignment_indices(editops)

# Reconstruct aligned sequences; masked positions are gaps
aligned_source = np.ma.array(source).take(source_indices).filled("-")
aligned_target = np.ma.array(target).take(target_indices).filled("-")

LABELS = {EditOp.Align: "match", EditOp.Delete: "delete", EditOp.Insert: "insert"}

print(f"Score: {round(score, 2)}")
for op, s, t in zip(editops, aligned_source, aligned_target):
    print(f"  {s:10s}  {t:10s}  ({LABELS[op]})")

Output:

Score: 1.42
  clever      sly         (match)
  sneaky      -           (delete)
  fox         fox         (match)
  leaped      jumped      (match)
  -           across      (insert)

User Guide

pynw exposes two alignment functions and a helper for interpreting results. Use needleman_wunsch when you need the actual alignment, and needleman_wunsch_score when you only need the score.

pynw takes a precomputed $n \times m$ similarity matrix rather than a scoring callback. This allows the alignment to run entirely in native code and lets you build scores using vectorized NumPy operations, at the cost of $\mathcal{O}(nm)$ memory for the matrix.

Score and alignment: needleman_wunsch

needleman_wunsch 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, gap_penalty=-1.0)

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

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

gap_penalty applies equally to insertions and deletions. Pass insert_penalty and/or delete_penalty to penalize them independently, which is useful when the cost of missing a source element differs from the cost of introducing a spurious target element:

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

Reconstructing the alignment: alignment_indices

alignment_indices converts an editops array into two masked index arrays (one per sequence) with one entry per alignment position. Gap positions are masked, so take(...).filled("-") reconstructs aligned sequences with gap markers:

from pynw import alignment_indices

source_indices, target_indices = alignment_indices(editops)

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

aligned_source = source.take(source_indices).filled("-")
aligned_target = target.take(target_indices).filled("-")
# aligned_source: ['the', 'quick', '-',   'fox']
# aligned_target: ['the', 'slow',  'red', 'fox']

Iterating over a masked array yields np.ma.masked at gap positions, so you can branch on the editop without explicit mask checks:

for op, src, tgt in zip(editops, source_indices, target_indices):
    if op == EditOp.Align:
        print(f"  {source[src]}")
    elif op == EditOp.Delete:
        print(f"- {source[src]}")
    elif op == EditOp.Insert:
        print(f"+ {target[tgt]}")

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 $\mathcal{O}(m)$ memory instead of $\mathcal{O}(nm)$:

from pynw import needleman_wunsch_score

score = needleman_wunsch_score(similarity_matrix, gap_penalty=-1.0)

Reproducing Classical Edit Distances

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.

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).

Contributing & Support

Open a GitHub issue for bug reports, questions, or feature requests. See CONTRIBUTING for guidelines on submitting changes.

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.5.0.tar.gz (66.2 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.5.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (479.4 kB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

pynw-0.5.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (443.3 kB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

pynw-0.5.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pynw-0.5.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pynw-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl (477.3 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pynw-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl (440.8 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

pynw-0.5.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (264.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

pynw-0.5.0-cp314-cp314-win_amd64.whl (147.7 kB view details)

Uploaded CPython 3.14Windows x86-64

pynw-0.5.0-cp314-cp314-musllinux_1_2_x86_64.whl (478.9 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pynw-0.5.0-cp314-cp314-musllinux_1_2_aarch64.whl (443.0 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

pynw-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (267.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pynw-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (265.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pynw-0.5.0-cp314-cp314-macosx_11_0_arm64.whl (241.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pynw-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl (252.1 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pynw-0.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl (477.3 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

pynw-0.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl (440.9 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

pynw-0.5.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (264.2 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

pynw-0.5.0-cp313-cp313-win_amd64.whl (147.8 kB view details)

Uploaded CPython 3.13Windows x86-64

pynw-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl (479.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pynw-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl (443.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pynw-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pynw-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pynw-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (241.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pynw-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl (252.1 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pynw-0.5.0-cp312-cp312-win_amd64.whl (147.5 kB view details)

Uploaded CPython 3.12Windows x86-64

pynw-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl (478.8 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pynw-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl (442.8 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pynw-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (267.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pynw-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (265.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pynw-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (241.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pynw-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl (251.9 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pynw-0.5.0-cp311-cp311-win_amd64.whl (149.2 kB view details)

Uploaded CPython 3.11Windows x86-64

pynw-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl (479.0 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pynw-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl (443.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pynw-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (267.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pynw-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pynw-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (242.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pynw-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl (252.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

pynw-0.5.0-cp310-cp310-win_amd64.whl (149.4 kB view details)

Uploaded CPython 3.10Windows x86-64

pynw-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl (479.1 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pynw-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl (443.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pynw-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pynw-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pynw-0.5.0.tar.gz
Algorithm Hash digest
SHA256 26fe26cf4a8eeebb222efbc577acda270e23bd0da5f89f5dc4e29b5b14f5c65b
MD5 2a419bc42ad593c5b1b5f0c4c0b27e99
BLAKE2b-256 bdefcf79c45b4a2c1b5fe1e82e1e670b815ad02c2e11cc3d031520a2a38ce91d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 68dff79ea4e403e6558eb49a22db5e9f295768ac8740fa0ed649c68a3f96f56d
MD5 9ba65fa8425c9be4cb34add12c316f93
BLAKE2b-256 62b3659dceaff332663f0219209d6be1ba1524f54a862e9f745836fa14954848

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d08db7973a4a3c55fe7c2eaa09c6268ff372bb40ffeb1873bfdee228c568cf2a
MD5 885cd8b87293e977f8f8451ae8cf0f28
BLAKE2b-256 8222373b9469a990895aa92e5b560bc1a203255df6cf630cf5daeb1b6f49b3c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c63d17a9e61e6a94087d6522be6e8b1cad4ba7516c6d93b246b87792a320f620
MD5 7e6171126d6de318f6eb86d0032a9583
BLAKE2b-256 cf9409a43b40c859be5e3b0589298e357983522e8b2ff298f76f48769cc8028b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 56544fd3f2d1a0e0d6743573867abe39edc1349b5ae43d7186af151c89160df0
MD5 05401788d271918ee74cc51909e93ced
BLAKE2b-256 80e5908dcdd9e323c5a7529f21c7aa01f1177acc5cdddde376a5c8204f1302b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 51887cca1aa517df081599e39eb56030c5b13912a7f1da879c40eeb06b9ac5da
MD5 9037966e4466911fcdb67a010849a4d1
BLAKE2b-256 516e6732b072b5206e09b3aaa8b9a5a9f5275d1437cd3f3351ff4233a0d0a9ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6529ccb840a5b710857e904683d69df566b6864b6eace0c16cc9263cb73e336c
MD5 9f196d431f0293d0b979dd0bb80ac8ee
BLAKE2b-256 7f361c9fe99eab93eccae03cf2c3fa3bce3291a760b9974e07a3161a91b507ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e39975e1199c794d91cb3522bc97f487f263c5c8486da02fa1619814795e6df7
MD5 7ac00e10c8f3bf081d70d64edc2f6a59
BLAKE2b-256 3d557791dcf414d151bdf66c7c0fd2603f902ad04050a4c419eda3d7a186199d

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pynw-0.5.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 119561104f94f0c552be25e2abb7d5b51c151012e367e954f4c657d16477dd27
MD5 01b1beee3dd96e0d42b69db797ddae72
BLAKE2b-256 8535893aa80b0f49f883fd3928ee9bd0fc214549f0d2d1f6585bb680321b0dc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bcdf64d2801ab124c0e185b0c07a42772cdbe5e155ee74cb5d64a0aa79c676ee
MD5 8ba71d7e0899b1ef69e00acd9b09d8aa
BLAKE2b-256 6a0226e635e29db0cf7ac60c25bdcce1ca620af6e9c36347c31c309a2b83fcd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2b7aabc7b59f45a1622f88c096e9fe0bfd90483122ae44d494ebb451039b483f
MD5 944cde014c779365911ea581b38684ea
BLAKE2b-256 ce8097756a2538407f16387ea4f4b902cb16beb024ad47fb51c428038796e987

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 04219fb616fb77e07cd1f290b6e159b31df69b312167ce3ebb7bd79cf51c9c32
MD5 1c78bc448705082c2ce45516f54ba2b2
BLAKE2b-256 6924dc0f31c3fb30d727eefd981245e7c9df52a3294a02bb4324e5da5b0a57ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 33d3ac5bd0f5426f2a0a7e856c7956969b5bd1262bdd2f2973864d3e9f551951
MD5 2096bdb07af74909888788265c6c043c
BLAKE2b-256 da9b2bc9c3c4e04350632f9a19fa0f2e271f65c07c35ff3efb5905dfe652cd4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e30ca9e532919b2da962d00dc87e0eb06025ec369e05b5bde214d1179f78d9f6
MD5 f6120c488a1eaff71cad9520e4625906
BLAKE2b-256 4ad409477ade22ab447de2104fa4dbfe5d3c4afc6da8da81c9c33627b65c6f19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5fd7d1d94d3d38477a5fd656fe1078555882ff98d627780983704f8f4e846e03
MD5 0e221aa2c2602833e4aff6fe2624484a
BLAKE2b-256 0c9667515842d56128db6b7d6cd9bc8a7694ba6d1109c88f69f54ce1651f9f37

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cd8886822999d0a3de7f65cb8705dc5390bf01b1b25a2040530395026704c24b
MD5 1d60fb786ce38ec11b1ae8990f5bb4e2
BLAKE2b-256 d6eebe06cebc85e1a931cc54a0c8a365c73a0a4658d7db04bf0e03050df13acf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ed8fac436a5d63c9fa30a52055737b309236ee4f5f73c10b8f01e80ad64f11c0
MD5 cca3eb0ac99f5fe81643fcc3d123f477
BLAKE2b-256 69a7a177a9a0cfa6b6311936c04100ff8ddb576619fd85f130def60dcf6361ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3f94e704dea9e8bcc4e9d13c061852ccf31439553733644528ffe12411b884a0
MD5 4c278acd949bdd3b2537b9a1acab12ed
BLAKE2b-256 db4bffdddb1846cb8fe4555c52e82a4d9f0804752fe300f279c75d665bdb1bb8

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pynw-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1941b45aa19288f6ef3a3b6b897f40b8389d9a796f7b1831ed278d31b03e3e18
MD5 090aa8a8d7981fa6ad80e9c3a0bd57c7
BLAKE2b-256 0a24c7e47248c236e301f304c3d78539ae724ed8d4a60ca9fbda09d49e1433a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e29c0a26b72ab3c5bb358b0ff00a7474a03d8d01fca8e34cb2a87ece6779a968
MD5 fbb2ee46c95adebfadaa6969a63aef1c
BLAKE2b-256 8ec0a915e34613488341730a5f08b8c7a986f44cd6a043c53bb01f9e009933c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 649a790dada5fb881bc4d3e76c71c571e2a1001d7fb2501ede87b418e042094a
MD5 f0a4214582bb493bddd5a910a93ed5bc
BLAKE2b-256 f4af698bccb14a24e5de6c6d7429cbc52c88ecfaf5da6aae3655f4202a78fa1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f5e3627a18e765fa52558c0d162aaa8f61c75de4c16915ec8254b6a2894269ef
MD5 2b16f23e069bf1904079b98a9e6845e1
BLAKE2b-256 6fb125e2225ff37c71275a20091964e80c9ba67a478b6045e1fb533b428d8d32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 247d6cc5ac51d2057e9712af9bdc210522c5eee5e0e3398551ab3562db5257e3
MD5 6c79c89cc495cf146835749f99f29cb8
BLAKE2b-256 719fa78c436add1fd8ba2db1531146230554f0193156325317de0366613bdcb1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0d77c8a4d3bb2d4fcbe31d051951a082a75218564ce73cb1eaa7492ee792454a
MD5 f1425495fd7100313270509da5aa3ff4
BLAKE2b-256 44513b822ff3d1927c92b380e69e3de08abba8d0909e276cd0b729a188af1f4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d45b381217979fbc0213be174285e0dcd9eef2758759cbfd960c7f4a4eddcf3f
MD5 ea956ef635f8a8eb754924f20a6d4e1f
BLAKE2b-256 1e3fdacf67ee13c50c0fcf3f16178d9d6d487a6c2a788c81593b0d9007486383

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pynw-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 917ac658db047c519fd9989381ba2f5e1d8f075e3f6fca3d68de7163eb5f3415
MD5 070a4440876354fd5554ba288f1c5014
BLAKE2b-256 69a4e3cb8a46a93b5fe6aeaee9be65bb6ace8a5aa006fa4a813b21ad35996bc3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 46166a7226b07ee3e5b8fb3d7f2708c7d43967500b45aa0f79115c2e642a1c71
MD5 a19953899e6aac0510be7d216acb37f7
BLAKE2b-256 8427ec0257c4e4fba7631a3ad27da0ddcd14cc754d1baee58cb8ed26631341a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 fb124c219c4ffa417f99ea3c317b9597d2093d02f1ea22f734e5f86edfb43030
MD5 535c6e162ad10cf45022cba2497e4346
BLAKE2b-256 415470ebcfea88e3e9a4e649da0b687274f8afc9e1a20dfdfffc05c2dca1ecb9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2404f520b91e104aefd8e2af032d4973dfd2e9c7b490c2eb549b9003abcb3612
MD5 603fdd72e40a0d855d00e0aef7a1aca2
BLAKE2b-256 65a0f9e16c8a25edb8753d94ecd25e7485c478289e63d1164563f23fd69bde99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dbba62ef5ab026b61b83bac8cc72f9141a0802b9dd6832a4497bd49f596815c8
MD5 85a856e3d5d03cac2da810452c6ec1f9
BLAKE2b-256 6b880bca56ba1a136af736b364d5fc905cd202a72579da2366a6648d34cbc3e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c88f0462b1fe4efa7cc057c71aa4a65b8f45e59411c936e0538697a5b184425
MD5 347fa4a377c00b2315a8999f7a31bf91
BLAKE2b-256 28bd9c7d751876927deda7e2bbd7bfa520ab38eedcb2c2f931d564fd7dff0740

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b816b760f0ba3219729bae28a4477ef838b7fb0744800b790529c68ed2a952dd
MD5 2d9f5d35adaf55436e4a014b4dd2499c
BLAKE2b-256 fd4a3ace00b89de0438a13d0a16b14062194a0c1892cd5bb0cf549a74066269a

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pynw-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9f89c24e18950e1caf353f5ffcd458dae1555378e8f2ffccb7319b89f082fed7
MD5 01fa3fac7c7e2e46e153090134f50c35
BLAKE2b-256 91b4f8344782dfa99c51c8f31bce49aea759bea8aa8b6a76b3033a8b9a620e26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b259607fe92620685feea7873c28cc03ba20d72d99fc1fc2063abdfbf3ed80df
MD5 29440bbb2ff8eee25f23a0534ac1804c
BLAKE2b-256 d8261f384042fecd8911d34d1b5d57a6992f342ab860fed13c2c7414b279a39f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f6384034ad557228f90bfb9515b83b5c3cee3a5826fa41f0cb5b5ae74b7972d4
MD5 005f8d811b256db023d68c0919322fa1
BLAKE2b-256 658660fb07837efc4f10dc59f07062a0b2dbed93f23f231cd50a166fa8544fa9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d3fa8697924809e798dcb875cb16a03237ffce881aa84094c82712962482a64
MD5 88fe7bb406ac0e6b8e0cb62776e6c353
BLAKE2b-256 523d075e3d435f93b1dcb2474efcd7faf544d6fe7bd14fed10e4d9bd34d29ee7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e4de9320a628c7b349547190dc5034fd1690f3372801d80e24f0b70bac74027e
MD5 cb1b648aaff7d281e1a7dbdbe8538587
BLAKE2b-256 868f56f659fdddcd077439bdabcd56585e3993cbe791dcea4057c7bd21c8425a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 69c1cbc2b3664a2cdd92aaba28517c0ec203f36221d4353ed997cba22245ae49
MD5 edb374546b7a46e6530789f8626d1f12
BLAKE2b-256 7ef8eb1e36d5ecf098e72a4b2206d06cb68a7512f3decd40867562496f2e1cf2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d8af203f08169b9d38fe41bef56ca92bb809323198b9c5abdcaa85772e1e1056
MD5 b1de529e48c3e32c640e381d941fae4e
BLAKE2b-256 b02e6c9645d25d13f0d999f87403f506806ef26890b3635a95a35dfc99bffd27

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pynw-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 98ce80f789ac38f59d966221a7993eb2f482a7e8bbcccf616ce6ede372512c8d
MD5 6eb5f824207287f852bd497e9dddb1d8
BLAKE2b-256 e5500ad809fd6eb1ec269188aa0abb66d75439e91a64197c7fb37e63c434cbcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d513ab601e2ae515dc392619c8142246d71fb70c70701ac577cdf9f152b1085d
MD5 4605a5d863d9d23b4cd887d93ef11c5c
BLAKE2b-256 0111dc7368e7cb0396b46b8b67632ef9455512344bb54f21bbeff3a5f558b58f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0bb445ca744f7f7c01939ba280b981300cb2c18cac6de3a3fbef595da4c57b4d
MD5 d3bbbc2e057a8b394c6b8b2338d5adcb
BLAKE2b-256 cbf5b3f41b3c411a3d7a36253b2cc735fee66d585a47f82a587dcdb248d7fc91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10f9a6574765408cd83b5b3efdea19797497beaf07dbc444a285aafd3b945571
MD5 24975bb959804fb2979cf6da6b860a74
BLAKE2b-256 986ab690f9a0f453d6af9d64cad5b6680e09250ba9176ed911e27999290d3c4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3bb6f2d87f79a1d9c2d477ba6257b738a4751cf8a9e6d26426238c2df03dcc96
MD5 08b77606f48118b332344938f0f66fd1
BLAKE2b-256 c4841674c01f72e0c0a34bdebf4cf0c0904d6966256d6f54bd3af438fb7056f2

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