Skip to main content

A software package for enumerating lattice points in convex polyhedra

Project description

latticepts

Nate MacFadden, Liam McAllister Group, Cornell

DOI

Fast lattice point enumeration for convex polyhedra. A C/Cython implementation of Kannan's algorithm, significantly outperforming Normaliz and OR-Tools CP-SAT in speed for certain problems. To demonstrate the performance, latticepts materializes ~108M lattice points in the strict interior of an example 7D cone ('Manwe') in ~15s single-threaded, or ~7.7s on 12 cores on a Intel Core i5-10600K (4.1 GHz, 16 GB RAM, Ubuntu 24.04). We can also just count points, which is quicker.

Used by CYTools and Macaulay2 (see here).

Citation

If you use latticepts in your research, please cite it:

@software{latticepts,
  author  = {MacFadden, Nate},
  title   = {latticepts},
  doi     = {10.5281/zenodo.19405318},
  url     = {https://github.com/natemacfadden/latticepts},
  orcid   = {0000-0002-8481-3724},
}

Description

More explicitly, latticepts enumerates lattice points

$$ \{x\in\mathbb{Z}^{\text{dim}}: Hx\geq\text{rhs}\} $$

for $H\in\mathbb{Z}^{N_\text{hyps}\times\text{dim}}$ and $\text{rhs}\in\mathbb{Z}^{N_\text{hyps}}$. Here each row of $H$ is an inward-facing facet normal and the corresponding entry of $\text{rhs}$ is its offset. Cones correspond to $\text{rhs}=0$; 'stretched cones' (e.g., for finding strict interior points) correspond to $\text{rhs} > 0$; polyhedra to general $\text{rhs}$.

latticepts materializes the lattice points (lists them). The exposed count_only mode is there primarily to size that allocation -- it runs the search and reports how many output points there are (the matrix size to allocate) without itself allocating the (multi-GB) output array. Getting a count is incidental; for counting alone, LattE is likely faster. For generating the points, the closer competing approach is to compute/use a Hilbert basis.

Limitations

  • Maximum dimension: 256. For convex cones, latticepts excels at low-dimensions. It can become sluggish in comparison to alternatives at higher-dimensions (well before 256)
  • Windows is not supported: the C kernel uses C99 variable-length arrays, which MSVC does not support

Installation

pip install -e .

Requires a C compiler.

For a faster, machine-specific build from source, set LATTICEPTS_NATIVE=1:

LATTICEPTS_NATIVE=1 pip install -e .

Enumeration runs in parallel over the independent top-level search branches -- both counting and materializing. Opt in with LATTICEPTS_OPENMP=1 (needs an OpenMP-capable compiler -- standard on most Linux machines, not on most Macs):

LATTICEPTS_OPENMP=1 pip install -e .

then set the thread count at runtime via the OMP_NUM_THREADS environment variable:

OMP_NUM_THREADS=8 python your_script.py

The two build flags are independent and compose; for the fastest build, set both:

LATTICEPTS_NATIVE=1 LATTICEPTS_OPENMP=1 pip install -e .

Counting parallelizes well -- ~6x on 12 cores when there are many top-level branches (latticepts splits the search across the top coordinate's values, so that count caps the speedup); materializing gains less (~2x: its two-pass count-then-fill is more memory-bound), and the thread-startup overhead can make the serial path (parallel=False) faster for small outputs. No extra memory either way: counting holds only each thread's small O(N_hyps * dim) search state, and materializing fills disjoint slices of the single output buffer (no per-thread copies). See the benchmarks for thread-scaling plots.

Algorithm Notes

This repo contains a Cython wrapper of a C implementation of Kannan's algorithm. See this webpage for some other relevant work (not by me). The specific implementation in this repo is for lattice point enumeration in square boxes $|x_i|\leq B$ for $B\geq 1$. I.e.,

$$ \{x\in\mathbb{Z}^{\text{dim}}: Hx\geq\text{rhs} \text{ and } |x|_\infty \leq B\}. $$

It is a short, single-file implementation: one self-contained, dependency-free C header (box_enum.h, ~290 lines of code, depending only on standard C libraries... no extra install) - I encourage you to read it. The single-file format was inspired by the stb-style. If Python is easier to follow, reference/kannan_reference.py is a pedagogical numba.njit port of the same algorithm. The Python port is efficient but has less options than box_enum (scalar rhs only, so cones and stretched cones but not general polyhedra) and is not used at runtime.

A helper method to box_enum is provided in case the user wants $N$ points but doesn't care about box size. One such task here is for enumerating some lattice points in convex cones. In this case, boxes of increasing sizes $B$ are studied until $\geq N$ lattice points are found.

Benchmarks

The three comparison benchmarks below are single-threaded -- each tool is given one thread, so none is helped or hurt by its own parallelism -- measured on a 6-core / 12-thread Intel Core i5-10600K (4.1 GHz, 16 GB RAM, Ubuntu 24.04) with the default pip install build (GCC -O3). Each plotted point is the median of several warmed-up runs; error bars are usually smaller than the marker. To recreate: conda env create -f environment-bench.yml, then run the benchmarks/ scripts. latticepts's own multicore scaling is shown separately below.

Convex cones: runtime vs requested number of interior lattice points in a cone (i.e., not on the boundary). The cone studied is the 7D 'Manwe' from https://arxiv.org/abs/2406.13751:

Runtime vs N on the Manwe example: latticepts outperforms PyNormaliz and OR-Tools CP-SAT

Polytopes: runtime to enumerate all contained lattice points for various 4D reflexive polytopes. Size of the polytope is measured by h11 with one polytope per h11 value, h11 = 6..491:

Runtime vs h11 for 4D reflexive polytopes

More polytopes: runtime vs dimension of length-2 hypercubes $[0,2]^{dim}$ for dim = 2..14:

Runtime vs dimension for the length-2 hypercube

Thread scaling: latticepts also parallelizes (build with LATTICEPTS_OPENMP=1; the comparison plots above use the single-threaded serial path). It splits the search across the top coordinate's values, so the number of top-level branches caps the speedup. On a bounded cube $|x_i|\leq 10$ in 6D (~86M points, 21 top-level branches, the parallelization achieves ~6x speedup for counting the points and ~2x speedup for materializing them. Parallelization was often counterproductive (slower) for Normaliz and CP-SAT.

latticepts thread scaling on a bounded cube: counting ~6x on 6 cores, materializing ~2x

Usage

There are two primary interfaces. For unbounded polyhedra (e.g., cones), the focus is on efficiently generating a finite collection of lattice points. This can be done via enum_lattice_points which enumerates all lattice points with components bounded by $|x_i|\leq B$ in the polyhedron. The algorithm increases the size of $B$ until a user-requested number of points is found. See the following example of how to use this to get lattice points in the strict (since $rhs=1$) interior of a convex cone:

import numpy as np
from latticepts import enum_lattice_points

# Find at least 1000 lattice points in {x : H @ x >= rhs}
H   = np.array([[1, 2], [3, -1]], dtype=np.int32)
rhs = 1
pts = enum_lattice_points(H=H, rhs=rhs, min_N_pts=1000)

# Optionally restrict to primitive vectors (GCD = 1)
pts = enum_lattice_points(H=H, rhs=rhs, min_N_pts=1000, primitive=True)

box_enum allows direct control over the box size $B$ instead of the number of lattice points. I.e., to enumerate all lattice points in $\{x: Hx \geq \text{rhs},\ |x|_\infty \leq B\}$:

from latticepts import box_enum

pts, status, N_nodes = box_enum(B=5, H=H, rhs=rhs, max_N_out=10_000)
# status: 0 = success, -1 = dim>256, -2 = hit max_N_out, -3 = hit max_N_nodes, -4 = too many constraints
# (statuses are also explained in the docstring)

box_enum is well suited to lattice point enumeration in polytopes (assuming an H-representation is known). For example, if one knows a bounding box of the polytope (if you have a V-representation, this is trivial: $B = \max|v_i|$ over all vertices), then the lattice point enumeration can be done as follows. Here's an example of the $h^{1,1}=491$ 4D reflexive polytope:

import numpy as np
from latticepts.box_enum import box_enum

H   = np.array([[ 1,   0,   0,   0],
                [-15,  8,   6,   1],
                [-15,  8,   6,  -1],
                [ -1,  1,  -1,   0],
                [  0, -1,   0,   0]], dtype=np.int32)
rhs = np.array([-1, -1, -1, -1, -1], dtype=np.int32)
# has bounding box B = max(|vertices|) = 42 (basis-dependent)
B   = 42

# one can then get the lattice points via:
pts, status, N_nodes = box_enum(B=B, H=H, rhs=rhs, max_N_out=10_000)

Organization

latticepts/
├── latticepts/
│   ├── box_enum.h                       # STB-style library for the Kannan enumeration (serial)
│   ├── box_enum_omp.h                   # optional OpenMP parallel layer (count + materialize) over box_enum.h
|   ├── box_enum.pyx                     # Cython wrapper
|   └── latticepts.py                    # the enum_lattice_points wrapper for box_enum
├── tests/
│   ├── conftest.py                      # shared test helpers (pytest)
│   ├── test_box_enum.py                 # tests of box_enum
│   ├── test_manwe.py                    # tests relating to 'Manwe' (arXiv:2406.13751)
│   ├── test_enum_lattice_points.py      # tests of enum_lattice_points
|   └── c/                               # simple C-kernel tests (no Python interface)
├── benchmarks/                          # perf benchmarks; double as usage examples + make the README figures
│   ├── benchmark_box_enum.py            # runtime vs B for the Manwe geometry (h11=491, 7D)
│   ├── benchmark_enum_lattice_points.py # runtime vs requested N for the Manwe cone (h11=491, 7D)
│   ├── benchmark_polytopes.py           # runtime vs h11 for 4D reflexive polytopes; runtime vs dimension for hypercubes
│   └── benchmark_narrowness.py          # runtime vs narrowness for a 4D convex cone
├── reference/
│   └── kannan_reference.py              # readable pure-Python (numba.njit) port of the algorithm; not used at runtime
├── docs/                                # README figures (benchmark_*.png)
├── pyproject.toml
└── setup.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

latticepts-0.3.0.tar.gz (192.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

latticepts-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl (762.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

latticepts-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (729.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

latticepts-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (268.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

latticepts-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl (270.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

latticepts-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl (767.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

latticepts-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

latticepts-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (269.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

latticepts-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl (271.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

latticepts-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl (770.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

latticepts-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (743.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

latticepts-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (268.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

latticepts-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl (270.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

latticepts-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl (741.1 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

latticepts-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (710.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

latticepts-0.3.0-cp310-cp310-macosx_11_0_arm64.whl (269.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

latticepts-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl (270.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

latticepts-0.3.0-cp39-cp39-musllinux_1_2_x86_64.whl (740.1 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

latticepts-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (709.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

latticepts-0.3.0-cp39-cp39-macosx_11_0_arm64.whl (269.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

latticepts-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl (271.2 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file latticepts-0.3.0.tar.gz.

File metadata

  • Download URL: latticepts-0.3.0.tar.gz
  • Upload date:
  • Size: 192.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for latticepts-0.3.0.tar.gz
Algorithm Hash digest
SHA256 91dd3f553dc9afbfc4efbccee1b1b21359193fcf4de67954ca66e320430aeecf
MD5 657ba4188df6c45e44bb3f0943daf945
BLAKE2b-256 b66ef7864d7a0e162ea0a6b5fa101e4a63293436c2de20bdb66d343cc2211d72

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0.tar.gz:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1e3a531f7dfecd73af4b09439bf20b0a3c0cc80b73c916957c13e4f5d815af4e
MD5 8eabe1f0fa304d603610670ea1d31edb
BLAKE2b-256 965c71ed606b073b43435aaf633e8f265d210fca8b6f56deac85316044481030

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9d99b5810c72999b9d55a4ea0e35fdf784cfc4bae1352d96788611e10ef17ac3
MD5 d7b12902d7bbf0c00d11fa917dc222d7
BLAKE2b-256 13782bc931565ed837d3ead3d0ad2f542646e7ca7d8369ffe6c0b15a3632ce84

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 64d14601da36e994237e1cc0c5759ecc5906b9c6f94c5f75a07ca7d4e1a8f245
MD5 09d629eceab2d9690065ede259cbd19b
BLAKE2b-256 177159e482e24f7a3be3cc4412968846b25e7e457607a573ac05af801492f1e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 32f69e9a55039039dde9bc60910873a6d6c2d204b9c44d9a57dd86a059552ff1
MD5 2aa47be72cdae32f9af723cdf1701234
BLAKE2b-256 bbc82738cd45ad5b46696b661af7b78cd14989645500c59129b24b31b4b05930

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4295b0c8f59c593b01da9b851825750e5d9ded648d306ae20ae9ec62ccbbdd7c
MD5 32b16f845aaab86247aa022b65c6d610
BLAKE2b-256 5493f9ab0bb9133fb09355caf17fcc06a1c4c72300fd17704bc79e354db47c30

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ec89ad788a4197b41c15e4eca5f82ee07682b39aaa6d20d04d4855badc3d43d9
MD5 8fe0cff3be83ef703f3b03d8870659b8
BLAKE2b-256 1cd9c3e7774384d2fa0ad0f7c1150ad5e262df53410fe34f8081575d82757c7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 087d9789e2c2de0adf5025d1d6d06b1efd7249a4e58c691cc2c01dd330dabb65
MD5 50ef974cab2bfdce3794c4cd153c46d2
BLAKE2b-256 6a356328ea2e6b1ead9cd903fb27cb55e613bec9acca72c90b7850bd15864984

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 deb617951c721f12e90347573494a6fe16a5142d1c2f39c6e5f38ea6c3030f7d
MD5 3acf438ffb1a14bfcdea60fef0ef0ebd
BLAKE2b-256 4c1f833f81e1d7509965c728f75669ed7bb726a15368316f059b72dcda24ef08

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 aa98b86194a68021faee017f4c7c31580502e8911409593c7eb79114d7dda817
MD5 d3911eec87b070b3e78a1b5edafb61c8
BLAKE2b-256 0c506aad525832fa95d09806555da6a4b687dc176a184000115291d2fb13f083

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 17378162beda6e9cae792770acd938b8a3b2a28f9c5559a2b39e17b71b40a129
MD5 133534b911a49d1cfe59753690522811
BLAKE2b-256 e4dbc69c09a7200f1664e92e3b0561207c0ca97fb41df001da3d4af29513c0fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7aa94f1b57bac61ab3e2c43f67faddf540a7ea477cdd62eaf38383695679e936
MD5 77ba95c6762639f8079c2c841ccf927f
BLAKE2b-256 5f26893e6b53466d97081334103cbb92309ad4805d78d99c2768f2e09ad8d6b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 02094e474b26158ad33eff32f42dabe4af5ea626b4235b78b938a4686c655127
MD5 c83a8fb23bb975b110d5e63086f40e1c
BLAKE2b-256 148271238c3b21d6a2385b649382c0e90b0fa673b6d7c8675dbed814accb9a2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 37cecd04e743e2d4a8b90744d5953deda9d033fdb4c12b12f1806d0559858f37
MD5 8f39918b863066671ee8588c0e77f9b5
BLAKE2b-256 74dc05fa7831f7c0f18a04305736277905ba2bea08de09b12e9c1ecad9198d50

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 34080c7a2273a394965465fb8cd2fdbcf89b0f13644e3435e515c019ec2227c3
MD5 a00539fe11fe6b6b9bcb11dae3a5d70e
BLAKE2b-256 ad75b647388a511323bc9d4748715f33fab56c9bb29bbf353b716cee4ce2d295

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aba70db2b84c3699c9b1d4db5b5cb0dc43ba034f49b15d3ac11478902b764b3e
MD5 eb8b992c4de5392dcfc75dffba11f34b
BLAKE2b-256 1729aff52f028e33ae283d6d2dea52afc3d1885310bfec96573651973b54b28a

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bcf6ef477233874e78fb346277d115fa355bc1f229238b9602f07e4bd8843600
MD5 f09c340152afd41ff457d85016badab1
BLAKE2b-256 7409268c204154cfcf5b1caf779ac9a83439ec99465b8884ce391ad2570082c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c70f61ce3aafa1d55e2de97470e64d50e56614c76468b2a0275121825de73082
MD5 600a653f6160cb3d21df55ac3db9bac1
BLAKE2b-256 20e030a8dd819b0d1c0d05613ac155748afcc453768f9c53ac4e513b374cc9be

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 877cc5235216f5f018ed0da32e7de2f2eb3dcee03e8ee224e7e3648c25f7e574
MD5 1ebae039df3ebd7894b285ea84a38798
BLAKE2b-256 16a79764b814d33c64b2db5bf841e93070b193ff6a3fb10934b927d1990c1b71

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 218d87730b96893900c42808874517532fc753fbd56f38e105589bbbb57273fc
MD5 6330087f5094366d6110eb86fe5ede1d
BLAKE2b-256 000675f2c1c52af0c07b65808585e7dfab6a88ee0a18c281bec5e13d4cb02494

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latticepts-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for latticepts-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 130f7ec4290f6c778537aed81f4732dc5cf8bde9e099089a21fe96001860938a
MD5 23fd2044d043d922e82a9e1d4891e7ec
BLAKE2b-256 f723aa5f7c6d1f53cb0f4238e48a84b569ff2c6430d33b8420ce17b5a25bb657

See more details on using hashes here.

Provenance

The following attestation bundles were made for latticepts-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: deploy.yml on natemacfadden/latticepts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page