Skip to main content

Ducer documentation

This package provides fast and compact read-only maps and sets that scale up to Billions of keys, while being light on resources with a streamable file format. Complex search patterns that would be infeasible with Python's builtin dict and set are not just possible, but very efficient. All of these amazing things are achieved with finite-state-transducers provided by the excellent Rust crate fst by Andrew Gallant.

Performance

Ducer maps and sets can be built and queried at millions of keys per second. Consider the following example:

import ducer
n = 1_000_000_000
items = ((b"%09d" % i, n-i) for i in range(n))
data = ducer.Map.build(":memory:", items)
m = Map(data)
assert m[b"900000000"] == 100_000_000

In our example, most of the time is spent in Python creating item tuples. Regardless, building happens at almost 4 Million items per second on my humble laptop. Retrieving individual keys is similarly speedy, and simply iterating over all items is twice as fast at 8 Million items per second.

This toy example is almost a best case for FSTs, so the resulting output is just 464 bytes. A real-world example with 1.1 Billion keys, where the key-value pairs occupy 21 GiB without any kind of searchability (stored in already quite compact msgpack format), results in a 4.6 GiB file. Building and retrieval are naturally a bit slower, but still within the 2-3 Million items per second range.

Limitations

Performance is rarely free, so there are some limitations you should consider before proceeding:

  • Keys must be bytes
  • Keys must be inserted in lexicographical order
  • Map values must be non-negative integers less than 2^64
  • Once built, maps and sets cannot be altered

Installation

Most users should be able to simply do:

pip install ducer

To build from source you will need a recent Rust toolchain. Use your preferred method of installation, or follow the official instructions to install Rust. Then run the following at the toplevel of the repository:

pip install .

Building

Above, we already showed that Map.build can build maps in memory by passing ":memory:" as path:

data = ducer.Map.build(":memory:", items)

If you pass any other path (either str or Path; the parent directory must exist), your map will be written directly to that file:

ducer.Map.build("path/to/my.map", items)

Building a map like this uses virtually no extra memory.

Opening

One key advantage of ducer maps is streamability. Unlike the builtin dict, a Map does not have to reside entirely in memory. You can, e.g., use the builtin mmap to stream map data:

with open("path/to/my.map", "rb") as f:
    mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
m = ducer.Map(mm)

Note that you can safely close the file once the mmap is created. See mmap(2) for details.

Thanks to high compression ratios, pre-loading maps entirely into memory can be feasible. In our experience, at least for local SSD storage, performance is virtually identical, expect pre-loading data takes extra time. Pre-loading can still make sense though, e.g., with networked storage.

with open("path/to/my.map", "rb") as f:
    data = f.read()
m = ducer.Map(data)

Access

To the extent that it's feasible, Map and Set are intended to be direct replacements for the builtin Python dict and set. For m, o: Map and k: bytes, the following works as intended:

k in m
m == o
m[k]
m.get(k)
m.get(k, 42)
len(m)
for k in m:
    pass
for k in m.keys():
    pass
for v in m.values():
    pass
for k, v in m.items():
    pass

For s, o: Set, and k: bytes, the following works as intended:

k in s
s == o
len(s)
for k in s:
    pass
s.isdisjoint(o)
s.issubset(o)
s <= o  # subset
s < o  # proper subset
s.issuperset(o)
s >= o  # superset
s > o  # proper superset

Note: Comparison operations are currently only implemented for other Set objects, not the builtin set. This may change in a future version if there is demand for it.

Differences to builtins

Not implemented

Since Map is immutable, the following are not implemented:

  • clear
  • fromkeys
  • pop
  • popitem
  • setdefault
  • update, |=

Since Set is immutable, the following are not implemented:

  • add
  • clear
  • difference_update, -=
  • discard
  • intersection_update, &=
  • pop
  • remove
  • symmetric_difference_update, ^=
  • update, |=

Further, the |, &, -, ^ operators are also not implemented, since it is not possible to specify the storage path. Use the respective union, intersection, difference, and symmetric_difference methods instead.

Incompatible syntax

difference, intersection, symmetric_difference, and union have slightly different syntax to accomodate the necessary path. For s: Set and others: Iterable[Set]:

s.difference("path/to/result.set", *others)
s.intersection("path/to/result.set", *others)
s.symmetric_difference("path/to/result.set", *others)
s.union("path/to/result.set", *others)

Like the standard library, difference will create the set of all elements of s that are not present in others.

Set operations on maps

Unlike the builtin dict, the ducer Map offers set operations. The syntax is the same as for sets:

m.difference("path/to/result.map", *others)
m.intersection("path/to/result.map", *others)
m.symmetric_difference("path/to/result.map", *others)
m.union("path/to/result.map", *others)

To resolve conflicts between keys present in multiple maps, a list of possible values is assembled. If the key is present in self, then it will be the first value. Values from others are added in given order. By default the last values in the list is used to mimic the behavior of dict.update. Currently, you can choose between these pre-defined operations:

Some examples:

m1 = ducer.Map(ducer.Map.build(":memory:", [(b"k1", 1), (b"k2", 1)]))
m2 = ducer.Map(ducer.Map.build(":memory:", [(b"k2", 2), (b"k3", 2)]))
m3 = ducer.Map(ducer.Map.build(":memory:", [(b"k3", 3)]))
mu = ducer.Map(m1.union(":memory:", m2, m3))
print(dict(mu.items()))
# {b'k1': 1, b'k2': 2, b'k3': 3}
mu = ducer.Map(m1.union(":memory:", m2, m3, select=ducer.Op.First))
print(dict(mu.items()))
# {b'k1': 1, b'k2': 1, b'k3': 2}

Advanced search patterns

The underlying FSTs allow for some advanced search patterns that would otherwise be costly to implement on top of dict and set. Most basic, you can iterate over a range of keys, where ge = greater or equals, gt = greater than, le = less than or equals, and lt = less than:

m.range(ge=b"key17", lt=b"key42")
m.range(gt=b"key17", le=b"key42")

For maps this yields key-value tuples, meaning m.range() without limits is equivalent to m.items().

You can also iterate over all keys that start with a certain prefix, with optional limits same as range:

m.starts_with(b"key", ge=b"key17", lt=b"key42")
m.starts_with(b"key", gt=b"key17", le=b"key42")

You can also search for subsequences , e.g., all keys matching *k*7*, again with optional limits:

m.subsequence(b"k7", ge=b"key17", lt=b"key42")
m.subsequence(b"k7", gt=b"key17", le=b"key42")

Finally, you can create an Automaton to create your own search patterns. The following automata are available:

For example, to recreate Map.starts_with, you can use the following automata with the Map.search method:

a = ducer.Automaton.str(b"key").starts_with()
m.search(a)

Add complement to search for keys that do not start with the string:

a = ducer.Automaton.str(b"key").starts_with().complement()
m.search(a)

Finally, you can combine multiple automata, e.g. with union:

a1 = ducer.Automaton.str(b"key").starts_with()
a2 = ducer.Automaton.str(b"other").starts_with()
a = a1.union(a2)
m.search(a)

Acknowledgements

Ducer is supported by the Albatross and SustainML projects.

Metadata

Release files for ducer 1.2.0

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

Source distribution (sdist)

Source distribution for ducer 1.2.0
File Size Uploaded
ducer-1.2.0.tar.gz 39.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for ducer 1.2.0
File
ducer-1.2.0-cp314-cp314-win_arm64.whl CPython 3.14 CPython 3.14 Windows ARM64 Details
ducer-1.2.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
ducer-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
ducer-1.2.0-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
ducer-1.2.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
ducer-1.2.0-cp314-cp314-macosx_10_13_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.13+ x86-64 Details
ducer-1.2.0-cp313-cp313-win_arm64.whl CPython 3.13 CPython 3.13 Windows ARM64 Details
ducer-1.2.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
ducer-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
ducer-1.2.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
ducer-1.2.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
ducer-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details
ducer-1.2.0-cp312-cp312-win_arm64.whl CPython 3.12 CPython 3.12 Windows ARM64 Details
ducer-1.2.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
ducer-1.2.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
ducer-1.2.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
ducer-1.2.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
ducer-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details
ducer-1.2.0-cp311-cp311-win_arm64.whl CPython 3.11 CPython 3.11 Windows ARM64 Details
ducer-1.2.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
ducer-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
ducer-1.2.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
ducer-1.2.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
ducer-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
ducer-1.2.0-cp310-cp310-win_arm64.whl CPython 3.10 CPython 3.10 Windows ARM64 Details
ducer-1.2.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
ducer-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
ducer-1.2.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
ducer-1.2.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
ducer-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details
ducer-1.2.0-cp39-cp39-win_arm64.whl CPython 3.9 CPython 3.9 Windows ARM64 Details
ducer-1.2.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
ducer-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64 Details
ducer-1.2.0-cp39-cp39-manylinux_2_28_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ ARM64 Details
ducer-1.2.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
ducer-1.2.0-cp39-cp39-macosx_10_12_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.12+ x86-64 Details

Total release size: 11.1 MB

Release files / ducer-1.2.0.tar.gz

Download URL ducer-1.2.0.tar.gz
Size 39.4 kB
Tags Source
SHA-256 checksum
How to use checksums
22e06cc1cb71597ea7eda575710c38eec70407e42e86557040dc70b13ddce09f
BLAKE2b-256 checksum
How to use checksums
64acf42d716f01849e7183df699ddbb3a3856711943d05359542933d6f669739
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp314-cp314-win_arm64.whl

Download URL ducer-1.2.0-cp314-cp314-win_arm64.whl
Size 262.4 kB
Tags CPython 3.14 Windows ARM64
SHA-256 checksum
How to use checksums
3b9e821ed87367059f7773b79f28d0e227b936fd54236e9821fa91e9ef6e5f97
BLAKE2b-256 checksum
How to use checksums
c7852d13ace31a01bb7de97b0978948f9f1fa6cfda24b3caa1c39b2df1a76ac8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp314-cp314-win_amd64.whl

Download URL ducer-1.2.0-cp314-cp314-win_amd64.whl
Size 285.3 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
50ae7c564e72196612879bf9c84762ead92cb768e218cb1b300de18fced532fa
BLAKE2b-256 checksum
How to use checksums
59c81f246be0bf3b7bffcec062c6cf6138e65ff482bc7051615e1b4575c484e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL ducer-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 343.5 kB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2a44121c7e7d959633ab4151a5de25d4d73cb368c079794ba737a8053f99d533
BLAKE2b-256 checksum
How to use checksums
d3f1b00b6393b287355a4971fabfe8c269a72a5d0a9815c7b4095a71dddd3092
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL ducer-1.2.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 325.1 kB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
7bf306fccd6b742d2bda623e0288ef469c99291f8405ac61b5f8549614a22dbd
BLAKE2b-256 checksum
How to use checksums
99e0e054f54b45876ff36c11c1c3df8c6b9941049447d6cb0a9d8ca5e2098780
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL ducer-1.2.0-cp314-cp314-macosx_11_0_arm64.whl
Size 312.7 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8b7aa81dd8c4a1f1e341cbb01bca2823d6b9065b4328a01098b8638cb98323fa
BLAKE2b-256 checksum
How to use checksums
69c0107216e1349b132a740c4123c6da5f8cff57ace9e70cbc5ff9e89a4fd3d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp314-cp314-macosx_10_13_x86_64.whl

Download URL ducer-1.2.0-cp314-cp314-macosx_10_13_x86_64.whl
Size 336.2 kB
Tags CPython 3.14 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
abfe1908f99178f99334f8c7c55e82d2b221cda08615537a75d65df480c7544e
BLAKE2b-256 checksum
How to use checksums
ef684ebb1a468ec07f8449d87b209bda9de4da6b8ab48925c75522ffa1559245
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp313-cp313-win_arm64.whl

Download URL ducer-1.2.0-cp313-cp313-win_arm64.whl
Size 253.3 kB
Tags CPython 3.13 Windows ARM64
SHA-256 checksum
How to use checksums
05192ba789313931a1cac6c9250c914d186a9161efd3475d73872a4aeecc4942
BLAKE2b-256 checksum
How to use checksums
0ef803d774bb370740e3173dd09795f5d713ccfd95e1e811bb78cd36638da24f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp313-cp313-win_amd64.whl

Download URL ducer-1.2.0-cp313-cp313-win_amd64.whl
Size 275.0 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
7a054e87fca4466fa33610e2f194ebe49e36f1b743b3d1a2a2b1b076eae6e198
BLAKE2b-256 checksum
How to use checksums
7b4ae23eeb2037d97538aa7b0eae44b78978cbc6db405d7b574ea26e9a277bb5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL ducer-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 342.8 kB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
68d9c32c789250f903a5303cba40e18f38356808b43215a701332801a1c44008
BLAKE2b-256 checksum
How to use checksums
1d2ddb688610c2cfd588ce1c18b82b14bb32d952021ad7bc6ac07dd73c2fd3ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL ducer-1.2.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 324.0 kB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3897ee4987280e78f74a45614318a5c17bc813289c365e0e63f39b3d6acc2075
BLAKE2b-256 checksum
How to use checksums
66766dff6c704670027a0c8c96181ae0799d46fb87b204a9f07df241c368fed2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL ducer-1.2.0-cp313-cp313-macosx_11_0_arm64.whl
Size 312.1 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
699fe5433489f660c4aca5df4dd3f6d689f1c7facf6254409e695e1f6f7a9a94
BLAKE2b-256 checksum
How to use checksums
54b6b7acb0f124158025930e2e1264e6937845a74801808306ccda0a7589af19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl

Download URL ducer-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl
Size 335.7 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
a05e55b4c6686aefd1761af410d7bcc0d7d896f0662db8c7e38d1f91302b3416
BLAKE2b-256 checksum
How to use checksums
2e027f6a9ec796950d5227bc2102b1aacbba8f84bb5b8e14fcece62b927a5f47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp312-cp312-win_arm64.whl

Download URL ducer-1.2.0-cp312-cp312-win_arm64.whl
Size 253.4 kB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
981d6d95524210387a05be64c8e8507f879547631de8ac9d35327550f6b271a1
BLAKE2b-256 checksum
How to use checksums
6a73a4c1fb9ea2d69fd32c2eb766ae9ee760be9f22fc67a1a4783427b439bf63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp312-cp312-win_amd64.whl

Download URL ducer-1.2.0-cp312-cp312-win_amd64.whl
Size 275.1 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
3fd1050eb97fb2164c78e6235eac468b4cdb59b0dcc266dfee506554be2d62df
BLAKE2b-256 checksum
How to use checksums
3cc7f8d0b421d5b6f1d6b474bc4f27aecdd5e86ae416ba358cabd2389343247c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL ducer-1.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 342.9 kB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a327a3d9804eecbc57fed64fbffa359561b991c4db477daab8c6c62edd280e40
BLAKE2b-256 checksum
How to use checksums
a5479bdb00ea6bd7b6b2567e64899711c0a63b30401234bf6a2f5f2c60912201
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL ducer-1.2.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 324.0 kB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
212334be7f1de2b8543c9893577c4db80c86ec5b098103482e5071dda8b98cb5
BLAKE2b-256 checksum
How to use checksums
756c67ae19e4970e9e1486ca79249810a2a24f4ed9dddc39735a9da38bd4d81d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL ducer-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Size 312.0 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5e9da5cbd0dac96cc4937a03a2c0c20ecaafa97b851e6653555a17e0a0ed583e
BLAKE2b-256 checksum
How to use checksums
add1275ad0e616ff3fb5045fbac3c418c367323126107518b7219ddabba99d46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL ducer-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl
Size 335.7 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
3e8d9e241099e50c0ad96f765303bfe09ca4ebf62d531a5935c19c69dbb80540
BLAKE2b-256 checksum
How to use checksums
238bef0754a7e21500c28b18ab6fa39c66180888ae739fdd4f7f25bf6a088dd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp311-cp311-win_arm64.whl

Download URL ducer-1.2.0-cp311-cp311-win_arm64.whl
Size 253.0 kB
Tags CPython 3.11 Windows ARM64
SHA-256 checksum
How to use checksums
2edec7acfbdf50009861f55244338674476deab11b8b1995d89735f9219451f8
BLAKE2b-256 checksum
How to use checksums
0f118d029ece0531fdfd0bfd0540e00ce35bcb488399e703ba83293d3f52d36b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp311-cp311-win_amd64.whl

Download URL ducer-1.2.0-cp311-cp311-win_amd64.whl
Size 275.0 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
46b12954f7182da5c3889118e36d1a911a7aef3ef36c9cd4dd73cde06621b324
BLAKE2b-256 checksum
How to use checksums
77367229bfac4d186814cc0c8a89c8683abfce9bdec9abec33d35e00403af496
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL ducer-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 344.2 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6ffe5d00cfd5d9152e4a1336048dd8bdc851892b54fb73f7133a4010aae399a8
BLAKE2b-256 checksum
How to use checksums
5e7dbc39fb950169860633daf427a63f1355aa472d80858b86d67e49ffa4a475
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL ducer-1.2.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 325.5 kB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c1bb106fc3431a11a6578412eb5fb8b22569f93c62037f27029af99a301aeb97
BLAKE2b-256 checksum
How to use checksums
cd3f5944a533acff2856db1bb4c2a333c4e03c921d99698073c8902337fe4c0e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL ducer-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
Size 311.9 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2be7a7108c75f47ad38fa7659ea8d07ff7535e8313c0edfef00fff3956c28e7e
BLAKE2b-256 checksum
How to use checksums
d3e68a9fd08dc4b48490067786f4d875b1791b65a7a58bd110a4cb0203223329
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl

Download URL ducer-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Size 335.4 kB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
7686c39cb066a62e13762888bb6b58f871beb9583970794696a83d08a1da2bc1
BLAKE2b-256 checksum
How to use checksums
f39d8b41f7a968d85da34191e7f39aaf769b3e1b172d7426d35f9e78c3743052
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp310-cp310-win_arm64.whl

Download URL ducer-1.2.0-cp310-cp310-win_arm64.whl
Size 253.2 kB
Tags CPython 3.10 Windows ARM64
SHA-256 checksum
How to use checksums
ceffda62178a742d72fff5e84339df831314d924c29e98d8655f2c8fca66d98b
BLAKE2b-256 checksum
How to use checksums
bac0fc80216911a56dcdf9977df769e5e3c01b609a7e3e04a7b671fa4e58d6e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp310-cp310-win_amd64.whl

Download URL ducer-1.2.0-cp310-cp310-win_amd64.whl
Size 275.2 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
dfbf580f9e62d5c4fa260341481931b21a767918d44b3026c12fb20709b9d285
BLAKE2b-256 checksum
How to use checksums
1c6862beb60444efd7b439831459fd6961ffda2713c828b7334d9fc773c775e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL ducer-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 344.4 kB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7fa3a387ed536ce7d8bf7df3ef6bed5c285d423e048736f08dceb89586a58da4
BLAKE2b-256 checksum
How to use checksums
4c7fd9c5e6187ffee1544111fc8decf1a5fec57881386345ea32a471b4778a24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL ducer-1.2.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 325.7 kB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3e9d606f30e91272c48d9040512c5c02b7088a613fb597a203be7f66795a4e1e
BLAKE2b-256 checksum
How to use checksums
6ea3fb636cd77f18dd8c557b2d7991f1174a95c9b91d1f3fc585981c9661cb11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL ducer-1.2.0-cp310-cp310-macosx_11_0_arm64.whl
Size 312.1 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5623fe08c0a5641cb78798fd0dfd6243ce0866c887af00b53a5a0ee5be190d58
BLAKE2b-256 checksum
How to use checksums
34e1f23126541068aad9b219d89cc1bd9550b7930f8abcf74db3a54cc7c4817d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl

Download URL ducer-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl
Size 335.9 kB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
65b101b19d6dad6aa86120b4852616b884e7ea22282947745a2f241ca863ddd8
BLAKE2b-256 checksum
How to use checksums
7c59437ee568eb0e15adc1abed08ce6aea8a7341e35c665b5a44612754559f6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp39-cp39-win_arm64.whl

Download URL ducer-1.2.0-cp39-cp39-win_arm64.whl
Size 255.2 kB
Tags CPython 3.9 Windows ARM64
SHA-256 checksum
How to use checksums
795120edab75f167dc2a0a44e9dd1a30de81c6709ab90f237db999795a9f0b64
BLAKE2b-256 checksum
How to use checksums
f74f8b3ca60ad1a99f3bf6e483a6bf422cbbfd5f212ffd7e05521f78d459c6d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp39-cp39-win_amd64.whl

Download URL ducer-1.2.0-cp39-cp39-win_amd64.whl
Size 277.2 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
4222a652e8d400ba12e881f18131688d7019b24cf6d1373bd822863138e38c45
BLAKE2b-256 checksum
How to use checksums
3c573cee8623f7c28c7a5565cfef52bcb477b623f495c35a7df40e2ea305a475
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl

Download URL ducer-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl
Size 346.3 kB
Tags CPython 3.9 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c7e1b9f67eca6218e113ad90e25d465a5ac8f4978a9cdb9d56aa627993343a41
BLAKE2b-256 checksum
How to use checksums
c8bca90713f523bea327fe34a73cd0736218b4cc80dd51efe1b7e19c41603de3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp39-cp39-manylinux_2_28_aarch64.whl

Download URL ducer-1.2.0-cp39-cp39-manylinux_2_28_aarch64.whl
Size 327.7 kB
Tags CPython 3.9 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
6fe467e25b5135fcfa69ba4e75757c052397d7803d0eca20b662b175138d2b7e
BLAKE2b-256 checksum
How to use checksums
0cf3ef693af704fd40caca491c88b3d2c81a9bee01f8dbae096a5f00142a7278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL ducer-1.2.0-cp39-cp39-macosx_11_0_arm64.whl
Size 313.9 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9755d80cb30f91def6ec0dbefd948bfdcce0a5d05074aac908ad08d48bbb3897
BLAKE2b-256 checksum
How to use checksums
b2c9ba70c702a3ec62863b4df47a71c6fe0e707b7225eaa1f13a37576da3ccce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release files / ducer-1.2.0-cp39-cp39-macosx_10_12_x86_64.whl

Download URL ducer-1.2.0-cp39-cp39-macosx_10_12_x86_64.whl
Size 337.9 kB
Tags CPython 3.9 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
be5c0778c1be20354114798c8516cdb3b88c433dbc029a1d151b518ec5db6b6a
BLAKE2b-256 checksum
How to use checksums
1532ab5b0732328c6c05e807cb91571bceba0d2ea2e85a0cff08ed382c346b68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 10, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.0 This release

37 release files

1.1.1

26 release files

1.1.0

31 release files

1.0.3

31 release files

1.0.2

26 release files

1.0.1

26 release files

0.2.1

26 release files

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