Skip to main content

GeomPP

A modern C++20 geometry library for 2D and 3D spatial computation — fast, mathematically correct, thoroughly tested, and usable from C++, C# (.Net 8/9/10 or .Net Framework 4.8), and Python 3.

You may be a CAD or a Game developer using C#.Net, and you use APIs native to the platform you develop into. These native APIs are easy to get in, but may contain bugs that have not been fixed, or simply lack some functionalities. You may be a Data Scientist using Python on a GIS project, and having to import 3+ libraries, and covert from data-structure to data-structure to use it. You may be a C++ developer who wants to import a more lightweight library than those which already exist, and possibly more user friendly.

This library was born a few years ago to solve all these problems. It was recently augmented with the aim of using the most modern algorithms to solve a variety of geometrical problems.

The sources of these algorithms are to be found in several textbooks, such as

  • Practical Geometry Algorithms (Danniel Sunday)
  • Computational Geometry in C (Joseph O'Rourke)
  • Computational Geometry (Mark de Berg, Marc van Kreveld, Mark Overmars, Otfried Schwarzkopf)

Finally, the help of AI was used to validate algorithms (bug-free, guarantee the desired big-O), bind into other languages than C++, add edge cases to achieve a high test coverage, and build documentation.

Python Bindings

Python bindings for geompp — a C++ 2D/3D geometry library.

Changelog — full release notes for every version.

Install

pip install geompp

Platform note

Pre-built wheels are available for:

Platform Python versions
Linux x86_64 3.8 · 3.9 · 3.10 · 3.11 · 3.12 · 3.13 · 3.14
Windows x64 3.8 · 3.9 · 3.10 · 3.11 · 3.12 · 3.13 · 3.14

If your platform or Python version is not in the table above, pip will compile from source — you will need CMake ≥ 3.15 and a C++20-capable compiler.

Test Coverage

This is the summary of the current test coverage. More on test coverage.

Metric Count Notes
Public methods (C++) ~519 Excl. ctors/dtors/operators. geompp::maths/geompp::transformations (templated/free-function, header-only) tracked separately, see test_coverage_report.md
C++ methods tested ~499/519 ~96% (1303 TEST cases, 1301 run, 2 disabled — incl. 37+17 for geompp::maths +6 for its own detail::, 30+6 for geompp::transformations (incl. TransformBuilder2D/3D::Apply), +40 direct detail::/detail::view:: tests, +39 for the polygonize()/merge()/Mesh2D/3D.Polygonize()/ConnectedMesh2D/3D.Polygonize() family, +6 T-junction regression fix, +14 for the standalone AdjacencyConformity/PolygonizationParams.conformity feature)
Python methods tested 478/498 ~96% (949 pytest cases — incl. 27+6 for geompp.maths, 24+9+6 for geompp.transformations (incl. TransformBuilder2D/3D.apply), +4 for distance_to(Point) on Polygon2D/3D/Triangle2D/3D, +19 for polygonization, +6 T-junction regression fix, +15 for AdjacencyConformity/PolygonizationParams.conformity)
C# methods tested 527/606 ~87% (1049 harness tests — incl. 24+6 for GeomPP.Maths, 23+9+6 for GeomPP.Transformations (incl. TransformBuilder2D/3D.Apply), +6 for DistanceTo(Point) on Polygon2D/3D/Triangle2D/3D, +2 for Triangle2D-Triangle2D intersection parity, +19 for polygonization, +6 T-junction regression fix, +15 for AdjacencyConformity/PolygonizationParams.Conformity)
Stubs (not yet impl.) 0 MonotonePolygon and ConstrainedDelaunay are now fully implemented (v0.18.0)

How to use it

You can look at the test suite to see detailed usage.

A quick list of code examples per topic is provided here.

👉 Visual Documentation and Code Examples on Github

What it provides

Serialization

All primitives support:

  • WKT (Well-Known Text) — to_wkt() / from_wkt() for standard text interchange
  • Binary file I/O — to_file() / from_file() for compact storage

Precision

Floating-point comparisons use a thread-local DECIMAL_PRECISION constant via AlmostEquals() methods, making the library robust against rounding errors while remaining configurable per thread.

Classes

Where not explicitely specified, both 2D and 3D variants are available for all core types:

Primitive Description
Point A coordinate in space
Vector Direction and magnitude
Line An infinite line through two points
Ray A semi-infinite line from an origin in one direction
LineSegment A finite segment between two endpoints
Polyline A connected chain of segments
Triangle Three non-collinear points forming a closed face
Polygon A closed polygon defined by an ordered list of vertices
BBox Axis-aligned bounding box
BBall Minimum bounding sphere (Ritter's algorithm)
BRect2D Minimum oriented bounding rectangle (rotating calipers)
BPrism3D Minimum oriented bounding prism (PCA + rotating calipers)
Plane A flat surface in 3D defined by a point and a normal
View2D A class that converts a 3D point into 2D quicker than plane
Mesh A set of adjacent triangles that together make up a detailed 2D or 3D shape (a surface or a solid)
ConnectedMesh This one keeps track of the neighbors of each triangle, so that going from a facet to its 0-3 neighbors is very quick
PolyMesh Not just triangles, also polygons are allowed, in order to save on the number of vertices on the same planar regions of the surface

Algorithm overview

Each class supports a consistent set of spatial operations where applicable:

  • Containment — does a shape contain a given point?
  • Intersection — do two shapes strike through each other, and what is the resulting geometry? Also available as the free function find_intersections() on a free set of segments. The meaning of this operation changes from 2D to 3D — check the class docs.
  • Overlap — do two shapes have a portion in common, and what is the resulting geometry? Meaning changes from 2D to 3D.
  • Touch — do two shapes have a point in common, and which is it? Meaning changes from 2D to 3D.
  • Distance — closest distance from a point to a shape.
  • Plane operations — projection of a point from 3D to 2D, and re-projection from 2D to 3D, via the Plane class or the faster View2D (one of the 3 world planes XY/YZ/ZX, or a custom plane).
  • Interpolation / Location — lerp(p0, p1, t) retrieves a point at parameter t between two points (not clamped); interpolate(t) does the same along a segment or polyline; the opposite operation finds the parameter t for a point already on a shape.
  • Area / Perimeter / Centroid — geometric properties for closed shapes.
  • Signed area — encodes orientation (clockwise vs. counter-clockwise in 2D, surface normal direction in 3D).
  • Simplicity / self-intersection — Polygon2D.is_simple() and the free functions has_intersections(segments) (Shamos–Hoey, boolean) / find_intersections(segments) (Bentley–Ottmann, every crossing point).
  • Convex hull — convex_hull(points) — Andrew's monotone chain, returns hull vertices in CCW order.
  • Bounding containers — tight-fitting containers around point clouds: axis-aligned bounding box, bounding ball, minimal oriented rectangle, convex hull.
  • Polyline operations — Polyline.reduce() (decimation) and Polyline.expand() (Bezier corner smoothing), or the underlying free functions (dist_decimation()/rdp_decimation()/vw_decimation(), bezier_smoothing_2(), polyline_expansion()) for a plain point list.
  • Polygon boolean operations — intersection(), union(), difference(), xor() between two polygons (map-overlay method), or the free function clip(clipper_loop, subject_loop) for raw point loops without constructing a Polygon first.
  • Point cloud operations — principal_axes() (PCA) finds the empirical 3 directive axes of a list of points in space.
  • Triangulation — decomposition of a polygon into n-triangles. Four strategies: EarClipping, EarClippingBestFit (default), MonotonePolygon (O(n log n) y-monotone sweep — check precondition with is_axis_monotone), ConstrainedDelaunay (O(n²) ear clipping + Lawson flips — boundary kept, all triangles inside, minimum angle maximized, verify with in_circumcircle). Point clouds: delaunay(points) / delaunay(points, normal) — unconstrained Delaunay covering the convex hull.
  • Polygonization — the reverse of triangulation: merges coplanar, edge-adjacent triangles back into polygons, via Mesh2D/3D.polygonize() / ConnectedMesh2D/3D.polygonize() or the free polygonize(triangles, settings), under 3 strategies (PlanarBoundaryExtraction — O(n) external boundary of a triangle set, PlanarQuads — O(n) pairs of coplanar triangles into quads, HertelMehlhorn — merges coplanar triangles into convex n-gons). A related free function merge(polygons) welds a set of non-overlapping polygons that tile a plane (3D: grouped by plane first) into fewer, bigger polygons, including merging any of their holes that touch along the same seam.
  • Linear algebra (geompp.maths) — a small fixed-size linear algebra submodule, independent of the geometry classes above: Vector2/Vector3/Vector4, Matrix2/Matrix3/Matrix4, and the solve_gauss() / solve_cramer() system solvers for Ax = b.
  • Affine transformations (geompp.transformations) — translate(), rotate(), scale(), shear(), reflect() (fast, single-point, no matrix needed), and the general transform(primitive, matrix) for every primitive from Point2D/Point3D to PolyMesh2D/PolyMesh3D. Use TransformBuilder2D/TransformBuilder3D to fluently chain several transforms (e.g. .translate(...).rotate(...).scale(...)) into a single Matrix3/Matrix4, then apply it once with .build()/transform().

Return values are None on no-intersection, and sometimes a Point/list[LineSegment]/list[Polygon] depending on what the operation produced — check each method's docstring for the exact shape.

Free functions

Function Description
are_collinear(p1, p2, p3) Three points on the same line
remove_consecutive_duplicates(points) Drop consecutive duplicate points
remove_duplicates(points) Drop duplicate points
remove_collinear(points) Drop collinear intermediate points
linear_combination(points, weights) Weighted sum
average(points) Arithmetic mean
lerp(p0, p1, t) Linear interpolation between two points — P0 + t*(P1-P0), not clamped
centroid(points[, plane]) Centroid of a polygon (3D: plane auto-detected if omitted)
signed_area(points[, plane]) Signed area of a polygon; positive = CCW, negative = CW
are_ccw(points[, ref_plane]) Counter-clockwise winding (2D or 3D)
are_cw(points[, ref_plane]) Clockwise winding (2D or 3D)
are_coplanar(points) List of Point3D on the same plane
closest_world_plane_to(points) XY / YZ / ZX plane nearest to the point cloud
has_intersections(segments) Shamos–Hoey: True if any two segments in list[LineSegment2D] cross
find_intersections(segments) Bentley–Ottmann: returns list[Point2D] — every crossing point, sorted left-to-right
convex_hull(points) Andrew's monotone chain: convex hull of a list[Point2D], returned in CCW order
convex_hull(points, normal=None) Convex hull of a coplanar list[Point3D]; optional Vector3D normal (auto-detected if omitted)
clip(clipper_loop, subject_loop) Set intersection of two point loops — list[Point2D] natively, list[Point3D] if coplanar (same map-overlay engine as Polygon.intersection())
dist_decimation(points, threshold) O(n) radial-distance point decimation
rdp_decimation(points, threshold) Ramer–Douglas–Peucker point decimation
vw_decimation(points, threshold) Visvalingam–Whyatt point decimation
bezier_smoothing_2(p0, p1, p2, smoothness, min_distance|num_segments, min_segment_length=...) Rounds one polyline corner with a quadratic Bezier arc
polyline_expansion(points, settings) Rounds every inner corner of a point list and works with either fixed number of segmens or fixed min segment length (the engine behind Polyline.expand())
principal_axes(points) PCA on a list[Point3D]: returns CoordinateFrame (.x primary, .y secondary, .z best-fit normal)
principal_normal(points) Best-fit plane normal of a list[Point3D] (PCA eigenvector with smallest eigenvalue)
principal_direction(points) Dominant direction of a list[Point3D] (PCA eigenvector with largest eigenvalue)
find_extreme_points(polygon, line) The two polygon vertices least/greatest projected along a line's direction
distance_to(polygon, line) Distance from a polygon to a line (zero if they intersect)
tangents_to(polygon, point_or_polygon) PolygonTangents2D/PolygonTangents3D (.left/.right) — tangent segments to a point, or common outer tangents to another polygon
is_axis_monotone(ring, direction) Returns True if the ring has at most one local max and one local min when projected onto direction — guard for triangulate with MonotonePolygon
in_circumcircle(a, b, c, p) Returns True if p lies strictly inside the circumcircle of CCW triangle (a,b,c) — verify the Delaunay condition
delaunay(points[, normal]) Delaunay triangulation of a list[Point2D] or list[Point3D] cloud, covering its convex hull. O(n²). Duplicates ignored; all-collinear → []; fewer than 3 points → ValueError
triangulate(polygons, settings) Returns a set of adjacent triangles replacing the surface of 1+ polygons (the engine behind Polygon.triangulate() and PolyMesh.triangulate()), and with a robust input validation
maths.solve_gauss(a, b) Solve Ax = b via Gaussian elimination
maths.solve_cramer(a, b) Solve Ax = b via Cramer's rule; raises ValueError if a is singular
transformations.translate(primitive, offset) Translate a primitive by a vector
transformations.rotate(primitive, angle_rad[, axis]) Rotate about the origin — 3D takes an axis
transformations.scale(primitive, factor | sx, sy[, sz]) Uniform or non-uniform scale about the origin
transformations.shear(primitive, ...) Shear along one axis by a multiple of another
transformations.reflect(primitive, normal) Reflect about a line/plane through the origin with the given normal
transformations.transform(primitive, matrix) Apply an arbitrary Matrix3/Matrix4 (homogeneous) to any primitive from Point to PolyMesh

Metadata

Release files for geompp 0.18.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 geompp 0.18.0
File Size Uploaded
geompp-0.18.0.tar.gz 108.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for geompp 0.18.0
File
geompp-0.18.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
geompp-0.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
geompp-0.18.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
geompp-0.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
geompp-0.18.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
geompp-0.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
geompp-0.18.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
geompp-0.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
geompp-0.18.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
geompp-0.18.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
geompp-0.18.0-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
geompp-0.18.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details

Total release size: 57.6 MB

Release files / geompp-0.18.0.tar.gz

Download URL geompp-0.18.0.tar.gz
Size 108.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6e00f2df3b0386863f76da052d51d97c15c9f454f73c53dc201b2d2b72ba5982
BLAKE2b-256 checksum
How to use checksums
5c0bcab0c589ed01f6314c01f68fdde83f84fc7c17d03b4d19c7cce6c50074fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp313-cp313-win_amd64.whl

Download URL geompp-0.18.0-cp313-cp313-win_amd64.whl
Size 6.2 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
761a51d39cc822ffdcc21a495763f74a382f21a1cd254e11f1f78ca6d9b147e4
BLAKE2b-256 checksum
How to use checksums
3ebf009206b9d00e7e1dcb2bb1d7c25bfecef22146c4ec45f3eca85edccab78c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL geompp-0.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 9.9 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
188a66aa488e220b51cbc28d255479c60ea86cf6792a52b6ebce3ddb08541aa6
BLAKE2b-256 checksum
How to use checksums
36de22454308590cae5db4a74fb80e31d2a8593d0a5eecbe2777f99c56030b99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp312-cp312-win_amd64.whl

Download URL geompp-0.18.0-cp312-cp312-win_amd64.whl
Size 5.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
7bf8793c857cfb239b0b9e2a24a6a0096ffcba5be36fd3e3e4d99817bf71ac73
BLAKE2b-256 checksum
How to use checksums
6a4530c0453e3b1b10736161ce498f72d13e8df76c1cf53d6f7ae42b3c5e3809
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL geompp-0.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 8.3 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c594dc4ce8a5bec6298178f7c85502d2b69523da4c6453a001c9e46e3c905e9d
BLAKE2b-256 checksum
How to use checksums
76ad73105cc61c09c494fc0e64f584e387b3f2bb4860b454a9bcb8808fca3baa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp311-cp311-win_amd64.whl

Download URL geompp-0.18.0-cp311-cp311-win_amd64.whl
Size 4.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
e7298db1feb73fad7dc7e403079e1e6b715b57e7bab93c82c38ce629281acb16
BLAKE2b-256 checksum
How to use checksums
ac0e3bcf9a72d385684fd071c555a02f66b68f1d156167ca34727b5d39091194
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL geompp-0.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 6.6 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9ede94ba3bceaad177503e7b31b621c83ccec25a12693ffa64e15f44dde41282
BLAKE2b-256 checksum
How to use checksums
e508fd33f301d58096f705109965dc05d791870b0cbdedec538b95f67515c56a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp310-cp310-win_amd64.whl

Download URL geompp-0.18.0-cp310-cp310-win_amd64.whl
Size 3.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4d9428e7c5f1956fde17677ab628aa170aa1d9305058c23245bf73f3adbc1b94
BLAKE2b-256 checksum
How to use checksums
b5a0b1a4f667b241366aaa086305299a1e9859ee6cb8ccd7e699b02d881454a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL geompp-0.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 4.9 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fe60e07a788dda7fd9421117902a25a823df1c76a25b365b2bc7464c9d7db8e6
BLAKE2b-256 checksum
How to use checksums
eaefa9874e1ab33e253e2430086da4bd899179815023058583ebe856ff578d7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp39-cp39-win_amd64.whl

Download URL geompp-0.18.0-cp39-cp39-win_amd64.whl
Size 2.4 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
a983de1ac205839601763b3d028b3a28784ae7e97f72a7d82ebf87c2d6b8e995
BLAKE2b-256 checksum
How to use checksums
244cf49c0981f96a2780ba3cac08bdddf792214db799ab8d04aea918451c52f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL geompp-0.18.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 3.3 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5473d5da77da154bfb5eaa2a5b15fbe49dc2d5db10d504a7e342e00b5d64efc3
BLAKE2b-256 checksum
How to use checksums
8f6d467623a1d92882a7653f8594d8e3a81e2557a77ebd5462adfb582cc0b650
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp38-cp38-win_amd64.whl

Download URL geompp-0.18.0-cp38-cp38-win_amd64.whl
Size 1.4 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
471bcb8485be6537a3d567a950f6c720adc09c99b5fa3cf3f07184af0ebf99bb
BLAKE2b-256 checksum
How to use checksums
246ff11d354535efdb05ac46e2482dddff0e777816524f3b387cd53799c615a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / geompp-0.18.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL geompp-0.18.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.7 MB
Tags CPython 3.8 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
117d28eb4c996b608b11cc48746d03b2914065e19d979383fa9057a44776fb07
BLAKE2b-256 checksum
How to use checksums
58a5222e4953bedfb9d6530aa115cdd67657a011d9da16f7aeba903fedec1afe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14
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