Skip to content

kernel-builder: move build.toml parsing to kernels-data - #768

Merged
danieldk merged 2 commits into
mainfrom
python-build-parse
Aug 18, 2026
Merged

kernel-builder: move build.toml parsing to kernels-data#768
danieldk merged 2 commits into
mainfrom
python-build-parse

Conversation

@danieldk

Copy link
Copy Markdown
Member

This change moves over parse_and_validate to kernels-data and exposes it as Build::open. We also make this function available through the Python API as well as a small number of methods from Build.

The Build methods that are made available through the Python API are guided by what is needed for dependency support. In general, we do not want to do any build.toml parsing in kernels, since it's a build-side file format. However, to be able to build a kernel with dependencies in Nix, we need to lock the dependencies and this is the same locking code as used by kernels lock. The only difference is that we take the kernels from build.toml and not pyproject.toml. For this reason, exposing build.toml to the client in a minor way seems justified for this specific purpose.

This change moves over `parse_and_validate` to `kernels-data` and
exposes it as `Build::open`. We also make this function available
through the Python API as well as a small number of methods from
`Build`.

The `Build` methods that are made available through the Python API are
guided by what is needed for dependency support. In general, we do not
want to do any `build.toml` parsing in `kernels`, since it's a
build-side file format. However, to be able to build a kernel with
dependencies in Nix, we need to lock the dependencies and this is the
same locking code as used by `kernels lock`. The only difference is that
we take the kernels from `build.toml` and not `pyproject.toml`. For this
reason, exposing `build.toml` to the client in a minor way seems
justified for this specific purpose.
def __repr__(self) -> str: ...

@final
class Build:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

Comment thread kernels-data/bindings/python/tests/test_config.py
sayakpaul
sayakpaul previously approved these changes Aug 18, 2026

@sayakpaul sayakpaul left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Just one question regarding adding a test.

@github-actions

Copy link
Copy Markdown

Coverage report — kernels/

Measured on: Python 3.10 / Torch 2.13.0.
Other CI configurations are not included in this number.
Hardware-gated code paths (ROCm/XPU/NPU/Darwin/Windows) are excluded or unreachable on the Linux+CUDA runner.

Total coverage: 84.3% — threshold: 80% — ✅

Per-file breakdown
Name Stmts Miss Cover Missing
src/kernels/__init__.py 13 0 100%
src/kernels/_system.py 6 1 83% 10
src/kernels/_versions.py 63 7 89% 46, 49, 52-53, 56-57, 100
src/kernels/backends.py 212 62 71% 40, 44, 48-51, 68, 90, 108, 117, 121, 125-127, 148, 157, 161, 165-167, 188, 199, 201, 208-211, 224, 228, 232-252, 260, 283-303
src/kernels/compat.py 8 1 88% 5
src/kernels/deps.py 58 4 93% 59-60, 101, 104
src/kernels/hf_hub.py 62 5 92% 18, 20, 114, 136-137
src/kernels/importer.py 48 3 94% 106, 110, 113
src/kernels/install.py 50 5 90% 78, 116-117, 155, 173
src/kernels/layer/__init__.py 6 0 100%
src/kernels/layer/_interval_tree.py 103 4 96% 23, 52, 147, 150
src/kernels/layer/device.py 48 14 71% 42, 47-49, 91, 96-98, 101, 149, 152, 155-157
src/kernels/layer/func.py 82 7 91% 83, 113, 185, 303, 309, 322, 340
src/kernels/layer/globals.py 5 0 100%
src/kernels/layer/kernelize.py 74 8 89% 255, 281, 289-290, 296, 300, 316-318
src/kernels/layer/layer.py 211 16 92% 169, 212, 218, 231, 339, 419-420, 432, 441, 449, 460, 489, 493, 506, 559, 589
src/kernels/layer/mode.py 14 0 100%
src/kernels/layer/repos.py 144 42 71% 27, 33, 36-43, 63-64, 70, 73-76, 90, 94, 103-104, 110, 113-116, 123-124, 130, 133-136, 143-144, 150, 153-156, 163-164, 170, 173-176, 257
src/kernels/load.py 74 9 88% 218, 224, 230-231, 252-264
src/kernels/locking.py 108 70 35% 42-109, 113-136, 144, 148-155, 159-169, 173-180
src/kernels/status.py 49 2 96% 23, 81
src/kernels/variants.py 278 22 92% 64, 95, 116, 146, 255-256, 298-301, 303, 387-394, 400-406, 437-443, 455-461, 611-613
src/kernels/verify.py 88 1 99% 32
TOTAL 1804 283 84%

Updated by the Test kernels workflow on commit e38cc32c4206fa2e69e159902dbecae7a9e99fc9.

@sayakpaul sayakpaul left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great!

@danieldk
danieldk merged commit 3e4f63a into main Aug 18, 2026
54 of 55 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants