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.22+. 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.1.tar.gz (65.7 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.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (479.9 kB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

pynw-0.4.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (443.4 kB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

pynw-0.4.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.8 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

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

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pynw-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl (477.6 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pynw-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl (441.0 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

pynw-0.4.1-cp314-cp314-win_amd64.whl (148.1 kB view details)

Uploaded CPython 3.14Windows x86-64

pynw-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl (479.3 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

pynw-0.4.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pynw-0.4.1-cp314-cp314-macosx_11_0_arm64.whl (241.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pynw-0.4.1-cp314-cp314-macosx_10_12_x86_64.whl (252.6 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pynw-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl (477.7 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

pynw-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl (441.1 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

pynw-0.4.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (264.3 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

pynw-0.4.1-cp313-cp313-win_amd64.whl (148.1 kB view details)

Uploaded CPython 3.13Windows x86-64

pynw-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl (479.5 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pynw-0.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pynw-0.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pynw-0.4.1-cp313-cp313-macosx_11_0_arm64.whl (242.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pynw-0.4.1-cp313-cp313-macosx_10_12_x86_64.whl (252.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pynw-0.4.1-cp312-cp312-win_amd64.whl (147.9 kB view details)

Uploaded CPython 3.12Windows x86-64

pynw-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl (479.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pynw-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pynw-0.4.1-cp312-cp312-macosx_11_0_arm64.whl (241.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pynw-0.4.1-cp312-cp312-macosx_10_12_x86_64.whl (252.4 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pynw-0.4.1-cp311-cp311-win_amd64.whl (149.6 kB view details)

Uploaded CPython 3.11Windows x86-64

pynw-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl (479.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pynw-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pynw-0.4.1-cp311-cp311-macosx_11_0_arm64.whl (242.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pynw-0.4.1-cp311-cp311-macosx_10_12_x86_64.whl (253.1 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

pynw-0.4.1-cp310-cp310-win_amd64.whl (149.8 kB view details)

Uploaded CPython 3.10Windows x86-64

pynw-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl (479.8 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pynw-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pynw-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pynw-0.4.1.tar.gz
Algorithm Hash digest
SHA256 ec6dff563cc758f713e03d0f91e44fd3582c5bab0eae54cc30076b280fa3dfe2
MD5 e3142f9ab4fd56c17f13c382983f676d
BLAKE2b-256 9dd6eff5446685a9fc3b34e9055ae541d9274e709ba40a7711b1ae9e5b7ff011

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d3dd2816d9562e1118a01b7d65340836bb79966622f8697e02ee9a2f00e8c941
MD5 64b316396018f214643e6fd4235ec1e5
BLAKE2b-256 c5ebbf37847a497328f26c2851333d31d73e5fad01240b67048c9af548503d31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 17c2de77a90a8af5fd6640663932dad1625537301be18252297dc1cfa20bd0ad
MD5 800150c03cd2bfc8a0c3f56d284da410
BLAKE2b-256 a9f17ed86369064b04d68aeda4bc784a67e2521ce3ce090627141905f6e91cda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0eb5a9f90df83d67fa9a905ec26f35b4a7a96e89af19a2d1bf86a99825466653
MD5 8d1efda739ccd90d3321a3658bb4adc0
BLAKE2b-256 532ef3887e2e2cb0338aff2f9bba109bae0979a25ded5b9bdeb75bc34494a306

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3020ceea13dbe26c2c53bd546a1d6a3a734e9f33dfd34d0b717c36e387edd985
MD5 376e70c551a253b0c9467f30f5f9b374
BLAKE2b-256 537abd5a56218d95d15a2a4d5de05dd3c7b1a54d35898deb714d6dde492df611

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e03fc2574dcd195ceea870d185b313342c1d0e2d5d79876916a2a4be6ea999c4
MD5 5cff72c1d3e17c6aeb73865027ec98a1
BLAKE2b-256 09625e1b0283140386b5a155b07aceb97c6781bd56e677bcda47c9fc82b5cae5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f855dbffd3e523bf52bc72fd12e61639220e5d4009dd64b8c28c556343017178
MD5 1ca8d0dadbec92044703594531cce820
BLAKE2b-256 a188bfb766da091e8866f0e184d25c4b3d617281838454ed46e1891aed303926

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3fd3d398a6b55e275a4f6308be007b44f0fbcf38fba5da745ea68836f856500a
MD5 7fc0a834e5a5b1d69ce278f1e7c2a104
BLAKE2b-256 6c2bf4326f6c5810d659a0d76cae2fb543f008b0062ca31dbc99242fa40934ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pynw-0.4.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 148.1 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.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4d3fdab98bbe533cd1a3fcb45a76b90a7d76a12abd0f4277a5cf45e183b420fe
MD5 7d7dce3fef4c37292b7cc8f35c535cdf
BLAKE2b-256 717cf392afdbee7071cb9d171d64acfc9e3a8a6f280633dda8763c427a3a7210

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 adb61ffdb0480cdb59f6dfdbb2742681713ded934ec9af6d16bc8a6d142c0ce8
MD5 79eb397b686525236c40e0cc103b7757
BLAKE2b-256 986f9ae0364def141aa1d857779fc29cd7ac1895c0f5f1eb2f1004ecd8e4a45e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9aa784f9f5181da95031f5ff2dd39d7292712500e9f5cddb5e7803896169d4f2
MD5 8533da3b595a28a3fe62f3483efa8b33
BLAKE2b-256 90d1c9e94c21d905f64ba50b31555999145ff444eebbbec0b783fa3cb27ddfec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2dd89585378cfddc80f67b3a19f02d70c5b08afe52bb5bfb28a3d9d13d08891
MD5 4713d7b4b3502a0498fc4be716a208d1
BLAKE2b-256 0a214290e60ef5bcc56555c71a1268b848d8faa15b516643d60c155f5bc574aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8c6314b38ffa4ac89f73b9db3b31f75f3ed0aeba18b77581f4b53d72eb097c96
MD5 b72e3ba024f32215c3d1b425ba026167
BLAKE2b-256 6dca33f4f29a83733b7c0a81db119cb377582ffebec3e70ac9aadc3b134533f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06d3f6a57ddb19677c08ce7233405570de19007fda3795c7044ccdc2adca7295
MD5 d2b47b93ef3c12993e894c2d3bc181f4
BLAKE2b-256 f8135f625e0d8de21a20b9d4ab987431051262285502c23b10f318001be70ead

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f976d8514deaf57a782c15c7c6673f12549e780b996e975f1454b2d95abfad17
MD5 82a7fc91c493f5a4477c8f0497623f3f
BLAKE2b-256 3a74c500dc7130267633c60de677b25ae56bedc5da70a79baf4603cd7734676a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0759b5f545fec58199d8f3d235e9a6ba54456711dd14264b2c3b2d45b91e3fed
MD5 83f61ddaeb38fd4a10dbacc7707c8782
BLAKE2b-256 6e2ed05b36717a1d18e0ce59efb7c9e088bbf4765c4deaa0625422ea01be4cdf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bd1fbef1237d77295522caffc0bfb7c4c773a22e8fcac77e9ee675ea2531f3ef
MD5 bc4f9b81598e5195590d609dfe13c6a8
BLAKE2b-256 d0882135a3216938612ce50a6f0a6d208e3c378b83e21c80b5bb34e9609cbb50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 52d71daf9873e24971b15e962173ba2d1bcef0b29f40c22bd209df45b2414c22
MD5 6bd3cb7b028acc072bd62e698cd66514
BLAKE2b-256 c84115c9280b50507ed4dadc5d8e8b16c9ea89f614e58086a3fcb814af35aa7b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pynw-0.4.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 148.1 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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1d46a040655372b06867c162d2b1e727d38a7c0165464d3d70916889e8da8eae
MD5 0b4bc9a67469576c249e73c9756ac5d4
BLAKE2b-256 5de9b4c25f7a3042002e9c927bb54a77ab301d30eb269750a89423f2693d300d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b3e5d76911c0a04c4ae22cb15723f881929ff9bad0ea7ab64f83a59286eb055e
MD5 4309838d865a409f4eb6d70b21f42b00
BLAKE2b-256 6b4ef69f45ef4fb4116fd1f4bc3628903a354773856f8561ee8f8c98c268f499

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8359ce07a0cb22365c1793e121cba34e5f26e13a10495a22b0a141941d070494
MD5 b78cefddf7058aee7789bb8ae5534d82
BLAKE2b-256 5b3b3a2e63d5c54b911ca83b089af23bbd5f97cf57ec01ec9a97f23192bb9f1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2a98552c6702b56629285419b7dc2589e91990c4c8fcfc518c052e53cc6dfa9d
MD5 610c9cf3a44657cc861e4e501a06a79c
BLAKE2b-256 1b9c0ea477478cf2ad136b934e5853f57d0c2362061fadec86f13008a8133a31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a9a5e99c114c0aaa8417ad7dd0cb25741aefd1715a3d00ffb9fb5a4b083c8aa0
MD5 74840eb4395053e01755a38bc225e301
BLAKE2b-256 19bc19966cf350d70cfe57e6d0b976de6c30e45eb590029c1ee170953f1617be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 829ea46e04fc99533efe866d1a3bb3aae5afc6dbd4c146cb72b0949619cd46b3
MD5 0eb0445b4c6b19652dd88f0db2dd5142
BLAKE2b-256 14b9458f5d345b0e5bca9a0d3b54b921cdb041ea806162d27934487d2ec81d5d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 58d675699dcdaec5db7f3baebc818664c2156f6c11f4517c29532f27b11cdb84
MD5 06677f68e747c450cfbb8b5f6d6b829f
BLAKE2b-256 ee7983c008b843c5645126bf8689e6aa83d065c402967d0e6f07ae0ca9f2ae65

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pynw-0.4.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 147.9 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c33d2af754105000c8769b6bc689bb8942f0c7282fd30354e8f1645141bd0d8f
MD5 9ab8f9bd1e4199e01b31f5d6e462df51
BLAKE2b-256 5a4a0f36d826afecc6e4ece4393633a30d5c9e963d20005d8934122a55b85477

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e26b429e2f9d2b3063be136aaad4c079ad7a25e052f32fdb79118294a5140947
MD5 44128b327e24908b51ac0fcb42165f55
BLAKE2b-256 d55fc233530afcc5ed8f056e0a52248b86283b5a7dff7a6f96d3abe0f7ea40a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a676a19ce09cef0d8982ced9eaaccf78ec803e7067d57534c061045533e59cb2
MD5 5ab9c2257839e3b2ce5b0d79a8f66fbd
BLAKE2b-256 b6df90adaccae5f35fc7042b2f0b668d46757c365bed439bd9ef517d603f8dfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b4dae97ab06380d6f51c668a7f210293b138a62ea18f997e75cd163d9ab2459e
MD5 9af7a7c60f6d777e23df0fc24fea8193
BLAKE2b-256 640dac836c29783f6301a844973b77fa83453f9629572cc87cc51f3eb2945b84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f8e8e52547a151839631dada6a432a80f02abd48b06196a7bf5e09e451ca2eb9
MD5 d3eaf17b1b1a1c4417110f013eeaabe1
BLAKE2b-256 2a5600417afdfd1ce40059fa7ea2b7fbef57600fa03083e5875bb9d9d3284362

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18a6ae8e1e6ee6c6a1bf4f590e9259a65aa1dccfb55c871d9cc76bc9a2358667
MD5 6103bc91dcc7617ade3811f755707f77
BLAKE2b-256 08e55b4cd055412398ef63184190d094298ae49574dd0c0d6f27636dc53bb49c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 02dcfa53ec2581d1dab0a0236eb97b49113afd9db27d0336cebf288f7e82deb6
MD5 ec549a69f68795f52f1d2900e932242a
BLAKE2b-256 70b5387907b7b33325b6a4f062a59b1a61f7b77ef1d014748c40a105dd29746c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pynw-0.4.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 149.6 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0225d4cc0535a1309f2d00c5520c64a98869fb2874e5eff52836da8fc504576d
MD5 8c00210eae4ca9dd27b894919517bade
BLAKE2b-256 b68c213e1ddeacb5f6b6d747c30956c879dacb3d4126a8c908ddaa890635c805

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 68e75997b9ed5ea873feea84d7a833615b57c0c3e24a8a6f051c505401d78e69
MD5 0ae4513cb53361c0da74646b39fdfed7
BLAKE2b-256 d5434389ccd9994698b1963a5e285b03e26f49e4f1f8c003f51b50269a9e50f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f7591acb63268a81a7460ab8f459a95a4f5f69a2e859b10dbdb748d62db031b9
MD5 e21b659bed16be51a143f8c318fcdf89
BLAKE2b-256 34ba0865bc1a416c4c9a72c2554af155e771fc12d6dc1b7bec886b16b2fc8496

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8bd179de72be9d9b2ed2df4daee96daff67b8dad139762363912af0d0a6f783b
MD5 7bb89f3091438f46b1ca145a1ba6716d
BLAKE2b-256 750f7052a3594d4b0866e363badc7d1594300c98e71d4105fc324ca2f79380ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 49aa3774eeae826a670e782e06c8040a371fbd0f15a8c9a7f9cfcf33a9a0831b
MD5 d8f2f317bc8821bf41370241bf647077
BLAKE2b-256 6a19a42e6ccb5839fe27019a8ba66f01c5712b5a8049a63b7f936c2509f393d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9659ba3170a326630f87376a4014584d506e24e99b630af61dafccfd53c936ad
MD5 8bafd7a2ff88bb4e2abbcc064ea96415
BLAKE2b-256 2d16b0c377cb4e71e0a83a2ecc007cb7287f44d2c753522cd7301bcac9e6d878

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 17927abfbf0cf7df4564e7526d8ded1aab61b731f1092464587cd5a41ef5ad20
MD5 9145f2c6c0e96856910feb75a52e0e2e
BLAKE2b-256 e0dab6c7d7cadc6d587cf361c05aaa22d41a991fd9d13b03cd5c44e91f0b3a30

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pynw-0.4.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 149.8 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5b8c3e26e12e9f8c1ec48845fdb9934e88e16b0a5769ce74b65e1bca370d49ef
MD5 e9dca663c4e49d1d0ca42cf11577effe
BLAKE2b-256 9e0a38f8291d2f978bd2e3f764aff1f330d7adcdca71823eccb47c32f0b1fe61

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c3ab2920577be62dd92a08f1cee2e73f2c073d8234e00165a3e44519344d1825
MD5 b6d8e54aef95a5c0bd493a77f1a297ae
BLAKE2b-256 093d2ca5b9b5032c96b5b1f2d2b0a5c88c73e4da5dba0459a2bb3bd3e9a3f203

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a7862752a4589c0636ef68dd0b86d8e3f539676d228a952db2b0041354c26c4b
MD5 72f5dfb3b93f1295b123a4b81f523201
BLAKE2b-256 3f36b505244252e925b24bc912b555570af6e65331101f4c749d646c070b63cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3224cedc944c67e34870216cc471e9751048f251a3489e5a09f3c06a20b23a85
MD5 78516836d3f1c068b1a09b0aedf52025
BLAKE2b-256 c3b1dac40fdf0c6f3456a18ceb08de9da6ad78d58f461bc72ddda5710f8816ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pynw-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1e018f582f36b534321ad08afb532553fa3a79669fda52d0995f2483e537f47a
MD5 24bd03ed3a89fc9dfed25da9389cf0b5
BLAKE2b-256 0ef3dea9a062f32f342653f4f55193a62d5ccb165b037b250be66d2f5dce5662

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