Skip to main content

QuickMers

PyPI Version License

Overview

QuickMers is a high-performance library for computing distances between k-mers (short DNA sequences), implemented in C with Python bindings. It provides fast functions for:

  • Hamming distance – number of mismatches between equal-length sequences.
  • Levenshtein (edit) distance – minimum number of insertions, deletions, or substitutions needed to transform one sequence into another.
  • Fixed-length Levenshtein balls – all k-mers at edit distance ≤ r from a query, restricted to the same length k.
  • Levenshtein balls – all sequences of any length at edit distance ≤ r from a query.

The library leverages bitwise operations for Hamming distance and the Myers bit-parallel algorithm for edit distance. On systems with AVX2 instructions, computations are further accelerated.

Installation

Planned: Quickmers will be available on PyPI in the future.
Install using pip:

python -m pip install quickmers

or manually:

python setup.py install

Usage

1. Hamming Distance

Signature:

hamming_distance(sequence1: str, sequence2: str) -> int

Compute the Hamming distance between two sequences of equal length.

d = hamming_distance("ACGT", "TCGA")
print(d)  # Output: 2

2. Hamming Distance (array)

Signature

hamming_distance_array(query: str, targets: Union[List[str], np.ndarray]) -> np.ndarray

Compute Hamming distances between one query sequence and a list of target sequences.

query = "ACGT"
targets_list = ["ACGT", "TCGA", "CGTA"]
targets_array = np.array(targets_list, dtype=object)

distances1 = hamming_distance_array(query, targets_list)
distances2 = hamming_distance_array(query, targets_array)

print(distances1) # Output: array([0, 2, 4])
print(distances2) # Output: array([0, 2, 4])

3. Levenshtein Distance

Signature

levenshtein_distance(sequence1: str, sequence2: str) -> int

Compute the edit distance between two sequences.

d = levenshtein_distance("ACGT", "CGTA")
print(d)  # Output: 2

4. Levenshtein Distance (array)

Signature

levenshtein_distance_array(query: str, targets: Union[List[str], np.ndarray]) -> np.ndarray

Compute edit distances between a query sequence and a list of sequences.

query = "ACGT"
targets = ["ACGT", "TCGA", "CGTA"]
distances = levenshtein_distance_array(query, targets)
print(distances)  # Output: array([0, 2, 2])

5. Levenshtein Distance with Minimum Distance

Signature

levenshtein_distance_array_with_min_dist(query: str, targets: Union[List[str], np.ndarray], min_distance: int) -> Tuple[bool, List[Optional[int]]]

Compute the Levenshtein (edit) distance between a query k-mer and a list of target k-mers, with early exit if a minimum distance is violated.

This function is useful when you want to skip unnecessary calculations once a target is "too close" to the query, which can save significant computation time for long lists.

query = "ACGT"
targets = ["AGGG", "TCGA", "CGTA"]
early_exit, distances = levenshtein_distance_array_with_min_dist(query, targets, 1)
print(early_exit) # Output: False
print(distances)  # Output: array([2, 2, 2])

6. Fixed-length Levenshtein ball

A Levenshtein ball of radius r around a k-mer x is the set of all k-mers whose edit distance to x is at most r.
In many k-mer applications we only care about sequences of the same length as x. The fixed-length Levenshtein ball is therefore:

B_r(x) = { y in {A, C, G, T}^k | edit_distance(x, y) <= r }

All output k-mers have length exactly k, the same as the input k-mer. This is different from a standard Levenshtein neighborhood, which can include shorter or longer strings due to insertions and deletions.

QuickMers provides two interfaces:

  • A function that returns the entire ball as a Python list.
  • An iterator that yields members of the ball one by one, useful for large radii or memory-constrained settings.

Both functions assume:

  • Alphabet: A, C, G, T
  • Input k-mer length k ≤ 32 (due to the underlying bit-parallel implementation).

Signature (list version)

fixed_length_levenshtein_ball(kmer: str, radius: int, return_binary: int = 0) -> List[str]
  • kmer: input k-mer (e.g. "ACGTACGT").
  • radius: maximum Levenshtein distance.
  • return_binary: if 0 (default), returns k-mers as strings; if 1, returns internal 64-bit integer encodings.

Example:

kmer = "ACGT"
radius = 2

ball = fixed_length_levenshtein_ball(kmer, radius, 0)
print(len(ball))        # Output: 85
print(ball[:5])         # first 5 k-mers in the ball, output: ['CAGT', 'CGGT', 'CTGT', 'GAGT', 'GGGT']

All k-mers in ball have length len(kmer) and satisfy levenshtein_distance(kmer, y) <= radius.

7. Fixed-length Levenshtein ball (iterator)

Signature

fixed_length_levenshtein_ball_iterator(kmer: str, radius: int, return_binary: int = 0) -> Iterator[str]

Returns a Python iterator that yields all k-mers in the fixed-length Levenshtein ball of kmer with given radius.

  • kmer: input k-mer.
  • radius: maximum Levenshtein distance.
  • return_binary: if 0 (default), yields strings; if 1, yields 64-bit integer encodings.

Example:

kmer = "ACGT"
radius = 2

it = fixed_length_levenshtein_ball_iterator(kmer, radius, 0)
for y in it:
    # process each k-mer in the ball
    pass

This is equivalent to:

ball = fixed_length_levenshtein_ball(kmer, radius, 0)
for y in ball:
    pass

but avoids materializing the entire list in memory at once as the size can grow quite fast.

8. Levenshtein ball

The Levenshtein ball drops the fixed-length restriction of the previous sections. It contains every sequence, of any length, whose edit distance to x is at most r.

Since insertions and deletions no longer have to cancel each other out, the output contains sequences of every length from k - r to k + r. The ball is therefore much larger than the fixed-length ball for the same k and r, and it is a superset of it.

QuickMers again provides two interfaces:

  • A function that returns the entire ball as a Python list.
  • An iterator that yields members of the ball one by one.

Both functions assume:

  • Alphabet: A, C, G, T
  • k + r ≤ 31, i.e. the longest possible output sequence has at most 31 bases (see Levenshtein ball limitations). A ValueError is raised otherwise.

Signature (list version)

levenshtein_ball(kmer: str, radius: int, return_binary: int = 0) -> List[str]
  • kmer: input k-mer (e.g. "ACGTACGT").
  • radius: maximum Levenshtein distance.
  • return_binary: if 0 (default), returns sequences as strings; if 1, returns (encoded, length) tuples, where encoded is the 2-bit encoding of the sequence (A=00, C=01, G=10, T=11) and length its number of bases. The length is needed because the encoding alone cannot distinguish e.g. AC from AAC.

Example:

kmer = "ACGT"
radius = 2

ball = levenshtein_ball(kmer, radius)
print(len(ball))        # Output: 431 (the fixed-length ball has 85)
print(ball[:5])         # first 5 sequences in the ball, output: ['CAGT', 'CGGT', 'CTGT', 'GAGT', 'GGGT']

ball = levenshtein_ball(kmer, radius, 1)
print(ball[:3])         # Output: [(75, 4), (107, 4), (123, 4)]

The 431 sequences have lengths 2 to 6 (2: 6, 3: 26, 4: 85, 5: 160, 6: 154), and all satisfy levenshtein_distance(kmer, y) <= radius.

9. Levenshtein ball (iterator)

Signature

levenshtein_ball_iterator(kmer: str, radius: int, return_binary: int = 0) -> Iterator[str]

Returns a Python iterator that yields all sequences in the Levenshtein ball of kmer with given radius.

  • kmer: input k-mer.
  • radius: maximum Levenshtein distance.
  • return_binary: if 0 (default), yields strings; if 1, yields (encoded, length) tuples as described above.

Example:

kmer = "ACGT"
radius = 2

it = levenshtein_ball_iterator(kmer, radius)
for y in it:
    # process each sequence in the ball
    pass

The iterator avoids building the Python list of all sequences, so it needs less memory than levenshtein_ball. It still has to remember every sequence it has already yielded to avoid duplicates, so its memory use still grows with the size of the ball.

Implementation Details

  • Hamming distance: computed using bitwise operations on 64-bit integers for speed. The sequence length has to be 32 or lower.
  • Levenshtein distance: implemented with Myers bit-parallel algorithm for rapid edit distance computation. The sequence length has to be 64 or lower.
  • Array functions: can take Python lists or NumPy object arrays as input.
  • AVX2 acceleration: if your CPU supports AVX2, internal loops are vectorized for faster computation.
  • Memory management: all functions use efficient pre-allocated arrays to minimize Python overhead.
  • Fixed-length Levenshtein balls: generated using a combinatorial enumeration of operation strings (matches, mismatches, insertions, deletions) that preserve output length k. Only k-mers of length exactly k are produced; no shorter or longer sequences appear. Supported for k ≤ 32.
  • Levenshtein balls: same enumeration, but without requiring the number of insertions and deletions to be equal. Results are deduplicated in a hash set, using 64-bit integers that carry an extra bit marking the sequence length. Supported for k + r ≤ 31.

Performance

Benchmarking was performed on randomly generated k-mers of varying lengths.
Values in the first table represent the number of string pairs distances calculated per second.
Values in the Levenshtein ball tables represent median runtime in seconds over 5 runs.

Distance function benchmarks

Function k=5 k=10 k=15 k=20 k=25 k=30
hamming_distance 9,505,940 9,192,009 8,866,906 8,555,942 8,249,809 7,946,207
hamming_distance_array 49,038,568 47,807,278 44,236,469 38,861,603 35,788,375 33,238,156
levenshtein_distance 7,499,375 6,407,775 5,797,060 5,131,730 4,688,698 4,267,584
levenshtein_distance_array 26,354,634 20,227,311 16,396,735 13,399,246 11,772,501 10,360,021

Fixed-length Levenshtein ball benchmarks

The following tables show median runtimes (over 5 runs) for generating fixed-length Levenshtein balls of radius r around a k-mer of length k. All times are in seconds. Note that, unlike Hamming balls, fixed-length Levenshtein ball sizes depend on the k-mer’s sequence: different k-mers of the same length can yield different ball sizes for the same radius.

fixed_length_levenshtein_ball (list version)

k \ radius r=2 r=3 r=4 r=5
8 0.000120 0.001434 0.007199 0.043119
12 0.000440 0.007060 0.096053 0.985557
16 0.000918 0.013795 0.491295 6.161375
20 0.001075 0.034931 1.348028 29.785755
24 0.001494 0.093763 3.741409 76.865599
28 0.003478 0.173104 7.473514 207.178461

fixed_length_levenshtein_ball_iterator (iterator version)

k \ radius r=2 r=3 r=4 r=5
8 0.000276 0.002309 0.019280 0.085768
12 0.000640 0.009446 0.119095 1.479240
16 0.001180 0.016352 0.536328 7.978017
20 0.001077 0.071314 1.441640 30.129923
24 0.002852 0.076538 3.723360 84.883196
28 0.003997 0.167211 7.499478 209.908604

Levenshtein ball benchmarks

Median runtimes (over 5 runs) for generating Levenshtein balls (all lengths) of radius r around a k-mer of length k. All times are in seconds. n/a marks combinations that are not supported (k + r > 31). r = 5 is not benchmarked, see the limitations below.

levenshtein_ball (list version)

k \ radius r=2 r=3 r=4
8 0.000450 0.013566 0.193951
12 0.001666 0.071871 1.160621
16 0.003254 0.204384 4.177346
20 0.005811 0.328056 10.125348
24 0.009441 0.564906 25.353289
28 0.014549 1.107160 n/a

levenshtein_ball_iterator (iterator version)

k \ radius r=2 r=3 r=4
8 0.000629 0.019127 0.254369
12 0.001352 0.084010 1.373834
16 0.004341 0.140489 4.661887
20 0.006934 0.318951 12.333837
24 0.011000 0.601258 24.105267
28 0.015928 1.031021 n/a

Levenshtein ball limitations

Memory and runtime grow very quickly with the radius. Only use the Levenshtein ball functions for small radii; r = 5 and above is impractical for most k.

  • Ball size and memory. The ball grows exponentially in r. For k = 24 and r = 4 it already contains about 27 million sequences, and generating it with levenshtein_ball needs about 4.5 GB of memory. Increasing the radius to 5 grows the ball roughly 20–30×, which would need an estimated 100 GB or more. Every sequence of the ball is kept in memory for deduplication, in both the list and the iterator version, so the iterator reduces but does not remove this cost.
  • Runtime. For each combination of edit operations, every insertion can be any of 4 bases and every substitution any of 3. The fixed-length ball has at most r / 2 insertions, while the Levenshtein ball can have up to r. At r = 4 this makes it about 8× slower than the fixed-length ball (see the tables above). At r = 5 the difference grows to about 11×, which for k = 24 means an estimated 14 minutes per call.
  • Why k = 28, r = 4 is n/a. Sequences are stored as 64-bit integers with 2 bits per base, plus one extra bit that marks the sequence length (so that e.g. AC and AAC are distinguishable). This allows sequences of at most 31 bases. The longest sequence in a ball is k + r bases long (r insertions), so k + r must be at most 31. For k = 28, r = 4 this is 32, and the functions raise a ValueError. The fixed-length functions do not need the extra bit and support k ≤ 32.

Results may vary depending on CPU architecture, compiler optimizations, and whether AVX2 instructions are available.

References

[1] Gene Myers. 1999. A fast bit-vector algorithm for approximate string matching based on dynamic programming. J. ACM 46, 3 (May 1999), 395-415. https://doi.org/10.1145/316542.316550

License

This software is licensed under LGPL-3.0-or-later.

Copyright 2025 Alexander Schliep

Metadata

Release files for quickmers 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quickmers 0.2.1
File Size Uploaded Provenance Actions
quickmers-0.2.1.tar.gz 48.6 kB With provenance Details for quickmers-0.2.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for quickmers 0.2.1
File Actions
quickmers-0.2.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for quickmers-0.2.1-cp312-cp312-win_amd64.whl
quickmers-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for quickmers-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
quickmers-0.2.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for quickmers-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
quickmers-0.2.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for quickmers-0.2.1-cp311-cp311-win_amd64.whl
quickmers-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details for quickmers-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
quickmers-0.2.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for quickmers-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
quickmers-0.2.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for quickmers-0.2.1-cp310-cp310-win_amd64.whl
quickmers-0.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for quickmers-0.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
quickmers-0.2.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for quickmers-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
quickmers-0.2.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details for quickmers-0.2.1-cp39-cp39-win_amd64.whl
quickmers-0.2.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for quickmers-0.2.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
quickmers-0.2.1-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details for quickmers-0.2.1-cp39-cp39-macosx_11_0_arm64.whl

Total release size: 877.8 kB

Release files / quickmers-0.2.1.tar.gz

Download URL quickmers-0.2.1.tar.gz
Size 48.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b221bd5f91a22507874e2dff9a979b016f59de91d77c977f8297df0dc2382d07
BLAKE2b-256 checksum
How to use checksums
d82357b80bc4e3718f9966c3d43eced464dad3168860bb6b14ff55d5ceb709cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp312-cp312-win_amd64.whl

Download URL quickmers-0.2.1-cp312-cp312-win_amd64.whl
Size 54.7 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
c2a9f9c53227cc9b82b714cb5e59fbe1aab980142be99b6c48f1aa8975671941
BLAKE2b-256 checksum
How to use checksums
edea6b06242ffc1c511a4f7bc9b6bed1bbcfefa95fb48285f109a7e44694114b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL quickmers-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 98.1 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a6caf45c815a937ddd64956d3f203085323419422188b0e10e2d3c5fee3c7803
BLAKE2b-256 checksum
How to use checksums
0e6d06280f26e06becba5a0bcac1f5b2a45542f0a9982e42c34fd82eae83f8ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL quickmers-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
Size 55.2 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
27581f2db487180cf0cd4af732dd0daa038ad19c8e008ca69fdaed305cd2e0c4
BLAKE2b-256 checksum
How to use checksums
f559a842ba87cac0e7b8b58f4c16c1a01fac2f3ed725a5992522563698a335b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp311-cp311-win_amd64.whl

Download URL quickmers-0.2.1-cp311-cp311-win_amd64.whl
Size 54.7 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
b1af2274d16997e8a1282e80bbc726d70186d81bba35aabda8a5654823cd6b11
BLAKE2b-256 checksum
How to use checksums
b91e221198866fccc96621073ec5366d5e018bf9c22502553f16069c67a9600c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL quickmers-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 97.5 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
bd159157315e856fb90c54fc9e3d3bda5c7d920972d2d639d938fa2866c6b931
BLAKE2b-256 checksum
How to use checksums
93b8e7618a23c0f6619c897430f97a1df1901fcdf3bab7aad56d6fffc9702a29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL quickmers-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
Size 55.2 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6d0ee5f2af3e2be817b074c99d096d5735e8a06b7a442f301617bf4c95bf46cd
BLAKE2b-256 checksum
How to use checksums
5a527cd5d0538f958abb61d407bbc50b1f2433cb2502bffe84c795ddff153ac6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp310-cp310-win_amd64.whl

Download URL quickmers-0.2.1-cp310-cp310-win_amd64.whl
Size 54.7 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
f0772f4d0edb45dc02bb7d13b180e129c83c2e6686d02aec55ba07a0fb4db656
BLAKE2b-256 checksum
How to use checksums
cd2275b0c69806dd2d2cec4ea8dcb3f664aeeba57580cca698cfd86818ffc7fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL quickmers-0.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 97.1 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4ec44d713321fe4d3f60d89fbf2380dec078551afe665bb92e2d8b8ba9b0560b
BLAKE2b-256 checksum
How to use checksums
b5fa790a1b62f6279a4cd28e859e392c59f7599e132f80b6200eeb9dda4330cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL quickmers-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
Size 55.2 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
408dc3596af0c3a6089776bd082808c0fbeb8d2dcc9c7c08578329df0128394a
BLAKE2b-256 checksum
How to use checksums
2d190b2f4a4f6674752c3ea6ccb2a77be085032b7e53942e2b871eb4a47cb4b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp39-cp39-win_amd64.whl

Download URL quickmers-0.2.1-cp39-cp39-win_amd64.whl
Size 54.7 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
43b667b2b49f7853c2073b5dc32cc3a5949ecbe13f3f8746e011dfbf122a3f79
BLAKE2b-256 checksum
How to use checksums
98f19b617504e062c6177e8e3e9c7170ba2da9a90e043023cbdf1f42ecbf60f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL quickmers-0.2.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 96.9 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cd805ef77a62ba1cd449521681b53497b5edcac6d0ced09cabe78b6fc365865f
BLAKE2b-256 checksum
How to use checksums
7a62fd69c64d2c249af06604252ef2489685d733d3b927cc59aaa73ddf9a49e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Release files / quickmers-0.2.1-cp39-cp39-macosx_11_0_arm64.whl

Download URL quickmers-0.2.1-cp39-cp39-macosx_11_0_arm64.whl
Size 55.2 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b73979e9d8ecfc3bc3d0e55c4d78cae3c813097efabdff1de6171924d235a07c
BLAKE2b-256 checksum
How to use checksums
a5293b8779a80f0518b9cc024d0c6e535342f858d0e77ed8eebb2a1f82292ee3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

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

PyPI Publish Attestation

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

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

Transparency log

Security for quickmers 0.2.1

Provenance

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

Full provenance

All 13 files in this release have been uploaded with provenance metadata.

Select from 13 files

Attestation for quickmers-0.2.1.tar.gz

PyPI Publish Attestation

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

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

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.1 This release

13 release files Full provenance

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