QuickMers
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: if0(default), returns k-mers as strings; if1, 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: if0(default), yields strings; if1, 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). AValueErroris 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: if0(default), returns sequences as strings; if1, returns(encoded, length)tuples, whereencodedis the 2-bit encoding of the sequence (A=00,C=01,G=10,T=11) andlengthits number of bases. The length is needed because the encoding alone cannot distinguish e.g.ACfromAAC.
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: if0(default), yields strings; if1, 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 exactlykare produced; no shorter or longer sequences appear. Supported fork≤ 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 = 5and above is impractical for most k.
- Ball size and memory. The ball grows exponentially in
r. Fork = 24andr = 4it already contains about 27 million sequences, and generating it withlevenshtein_ballneeds 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 / 2insertions, while the Levenshtein ball can have up tor. Atr = 4this makes it about 8× slower than the fixed-length ball (see the tables above). Atr = 5the difference grows to about 11×, which fork = 24means an estimated 14 minutes per call. - Why
k = 28,r = 4isn/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.ACandAACare distinguishable). This allows sequences of at most 31 bases. The longest sequence in a ball isk + rbases long (rinsertions), sok + rmust be at most 31. Fork = 28,r = 4this is 32, and the functions raise aValueError. The fixed-length functions do not need the extra bit and supportk≤ 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)
| 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)
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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logSecurity 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.
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 logA 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.