pykentron
Python bindings for kentron, with a CadQuery-compatible API, so that CadQuery scripts run on kentron unchanged.
Installing
pip install pykentron # the kernel and pykentron's own CadQuery-like API
pip install "pykentron[cadquery]" # also what CadQuery's own layers need, to run CadQuery scripts
Python 3.10 or later. The wheels on PyPI are built for any x86-64 Linux machine.
Using it
import pykentron as cq
box = cq.Workplane("XY").box(10, 20, 30).faces(">Z").workplane().hole(5)
print(box.val().Volume())
To run CadQuery scripts unchanged, import pykentron.shim first: import cadquery then gives
CadQuery's own pure-Python layers (Workplane, Sketch, selectors, cqgi, free functions,
assemblies: copied unchanged from CadQuery v2.8.0, Apache-2.0, see
pykentron/cadquery_shim/cadquery/VENDORED.txt) on pykentron's shapes. Or run a script as it
is with pykentron-run script.py. Nothing named cadquery is installed, so a real CadQuery
beside pykentron is unaffected unless the shim is activated (the two cannot share one
process).
Names pykentron does not have yet, and the OCP names scripts use directly (beyond Bnd_Box,
BRepBndLib.AddOptimal_s, BRepTools.Clean_s), import but raise NotImplementedError when
used.
Building from source
pip install ./crates/pykentron # with maturin, as the PyPI wheels are built
python3 crates/pykentron/build.py # in place, optimized (LTO, AVX2/FMA), into python/pykentron/_kentron.abi3.so
python3 crates/pykentron/build.py --portable # in place, for any x86-64 CPU
python3 crates/pykentron/build.py --quick # in place, the tests' release profile
The in-place build installs the extension by renaming, so interpreters that have it loaded
keep running; put crates/pykentron/python on sys.path to use it. The CadQuery layers need
pyparsing, multimethod, runtype, typing_extensions and numpy (and nlopt, casadi
for constraints), as CadQuery does: the cadquery extra.
Memory and speed
Shapes no Python object refers to any more are collected from time to time. How much is
freed, and which allocator kentron's memory comes from, is a profile, chosen by
PYKENTRON_PROFILE before pykentron is imported:
| profile | allocator | collection | a complex five-part CadQuery model, against no collection |
|---|---|---|---|
low-memory |
the system's | also forgets cached values of removed shapes | 62% of the peak memory, ~5–10% slower |
balanced (default) |
the system's | removes unreachable shapes | 72% of the peak memory, ~3% slower |
fast |
mimalloc | as balanced |
the same peak memory, ~17% faster |
pykentron.profile() gives the profile in use and pykentron.set_profile(name) switches
between low-memory and balanced at any time; the allocator is chosen once, at startup,
so fast is only had through the variable. Building without the mimalloc feature
(cargo build -p pykentron --no-default-features) drops mimalloc and the fast profile.
What is there
Workplane: sketching (polylines, lines, arcs, rectangles, circles, polygons, points, workplanes and transforms),extrude/cutBlind/revolve/box/cylinder, booleans,fillet, selection (faces,edges, ... with string selectors|,#,+,-,<,>,%TYPE), placement.- Shapes (
Vertex,Edge,Wire,Face,Shell,Solid,Compound): construction (boxes, cylinders, cones, spheres, tori, prisms, revolutions, lofts,offset2D, shell offsets and thick solids), booleans,clean, transforms and mirrors, queries (volume, area, length, centres, bounding boxes, validity, normals, geometry types,distance,isInside,tessellate). As in CadQuery, a shape's bounding box is tight until it is tessellated, then bounded by its meshes, widened by their deviation. - Files: STEP import and export (shapes, or an
Assemblywith names, colours and placements), BRep import and export, STL export. Assembly,Location,Plane,Vector,Color,BoundBox.
Not yet: DXF import, SVG and other exporters, cadquery.vis.show (warns).
Checking it
tests/test_against_cadquery.pycompares pykentron with the real CadQuery case by case (run it with a Python that has CadQuery:PYTHON crates/pykentron/tests/test_against_cadquery.py).scripts/cadquery_build.py --project DIR MODULEruns a CadQuery project'sbuild()on pykentron and reports each part's volume, faces and validity;--oracleruns it on CadQuery instead.scripts/cadquery_sweep.py --project DIR --python PYTHONbuilds every module of a project both ways and checks that each part is valid and within 0.1% of CadQuery's volume (--oracle-cache FILEkeeps CadQuery's results, which do not change).scripts/cadquery_tests.pyruns CadQuery's own test suite (release v2.8.0, fetched from GitHub intotarget/cadquery-testswith a virtual environment of its own, made withuv) against pykentron, unchanged:python3 crates/pykentron/scripts/cadquery_tests.py [pytest arguments]. It fails on any test failing that is not intests/cadquery_baseline.txtand reports those of the baseline that pass;--update-baselinerecords the current failures. The suite reaches CadQuery's internals (cadquery.occ_impl.*,cadquery.func, OCP): the shim resolves those names to pykentron's where it has them, and makes the rest placeholders that raise NotImplementedError when used.
Metadata
Release files for pykentron 0.11.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pykentron-0.11.1.tar.gz | 845.5 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pykentron-0.11.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
Total release size: 3.9 MB
Release files / pykentron-0.11.1.tar.gz
| Download URL | pykentron-0.11.1.tar.gz |
|---|---|
| Size | 845.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b0f518680a60292c4c900763f91e77ff7a581230ad49f00e8325aba257eeacc3
|
|
BLAKE2b-256 checksum How to use checksums |
d720327197d27728149de471da8c5e778659db58dafc0002ae7908b8c99fed8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 13, 2026.
Transparency logRelease files / pykentron-0.11.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pykentron-0.11.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
dc7ee1000ea809e8516a84641a70ba16ef798742ff727dc522e5b39e055e2395
|
|
BLAKE2b-256 checksum How to use checksums |
f35fc1868414ff0a48cac0e0d397ca43b26ed5fac3346c3e1303371998aa619b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 13, 2026.
Transparency logSecurity for pykentron 0.11.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for pykentron-0.11.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.