Python Bindings and Frontend
This component provides Python bindings via pybind11 to build SDFGs with Python.
Additionally, this component provides the @native decorator, which automatically
converts Python functions into SDFGs and codegens them for the available target.
- Bindings: Build SDFGs programmatically with Python
- AST Parser: Automatically compile Python/NumPy code to optimized native code
- Targets: Support for CPU (sequential, OpenMP), CUDA GPUs, and other accelerators
Build from Sources
To build the Python component from sources run pip on the component's directory:
pip install -e python/
Requirements
Python Dependencies
- Python >= 3.11
- NumPy >= 1.19.0
System Dependencies
The following system dependencies must be installed (same as core components):
sudo apt-get install -y libgmp-dev libzstd-dev
sudo apt-get install -y nlohmann-json3-dev
sudo apt-get install -y libboost-graph-dev libboost-graph1.74.0
sudo apt-get install -y libisl-dev
Compiler Requirements
Clang/LLVM 19 is required for code generation. Install it with:
# Ubuntu/Debian
sudo apt-get install -y clang-19 llvm-19
For CUDA support, you also need the NVIDIA CUDA Toolkit installed.
Usage
The @native Decorator
The @native decorator is the primary way to use the Python frontend. It automatically:
- Parses the Python function's AST
- Converts it to an SDFG representation
- Applies optimizations based on the target
- Compiles to native code
- Executes and returns results
Basic Example
from docc.python import native
import numpy as np
@native
def vector_add(A, B, C, N):
for i in range(N):
C[i] = A[i] + B[i]
# Usage
N = 1024
A = np.random.rand(N).astype(np.float64)
B = np.random.rand(N).astype(np.float64)
C = np.zeros(N, dtype=np.float64)
vector_add(A, B, C, N) # JIT compiles and executes
Compilation Targets
The @native decorator accepts a target parameter to specify the code generation backend:
target="none" (Default)
No scheduling or optimization is applied. The SDFG is compiled as-is without parallelization. Useful for debugging or when you want to manually control the generated code.
@native(target="none")
def simple_loop(A, B, N):
for i in range(N):
B[i] = A[i] * 2.0
target="sequential"
Generates optimized sequential code with SIMD vectorization.
import math
@native(target="sequential")
def vectorized_sin(A, B):
for i in range(A.shape[0]):
B[i] = math.sin(A[i])
N = 128
A = np.random.rand(N).astype(np.float64)
B = np.zeros(N, dtype=np.float64)
vectorized_sin(A, B)
target="openmp"
Generates parallel code using OpenMP. Suitable for multi-core CPUs. Loops are automatically parallelized with appropriate scheduling.
@native(target="openmp", category="desktop")
def parallel_add(A, B, C, N):
for i in range(N):
C[i] = A[i] + B[i]
# Executes in parallel across CPU cores
N = 1000000
A = np.random.rand(N).astype(np.float64)
B = np.random.rand(N).astype(np.float64)
C = np.zeros(N, dtype=np.float64)
parallel_add(A, B, C, N)
target="cuda"
Generates CUDA code for NVIDIA GPUs. Loops are mapped to GPU thread blocks and threads.
@native(target="cuda", category="server")
def gpu_add(A, B, C, N):
for i in range(N):
C[i] = A[i] + B[i]
# Executes on GPU (data is automatically transferred)
N = 1024
A = np.random.rand(N).astype(np.float64)
B = np.random.rand(N).astype(np.float64)
C = np.zeros(N, dtype=np.float64)
gpu_add(A, B, C, N)
The category Parameter
The category parameter provides hints to the scheduler about the target hardware:
"edge""desktop""server"
@native(target="openmp", category="desktop")
def cpu_kernel(A, B):
...
@native(target="cuda", category="server")
def gpu_kernel(A, B):
...
Advanced: Manual Compilation
For more control, you can manually compile and cache the SDFG:
@native(target="openmp")
def my_kernel(A, B, C, N):
for i in range(N):
C[i] = A[i] + B[i]
# Pre-compile with sample arguments
compiled = my_kernel.compile(A, B, C, N)
# Reuse compiled version
result = compiled(A, B, C, N)
# Access the underlying SDFG
sdfg = my_kernel.last_sdfg
License
This component is part of docc and is published under the BSD-3-Clause license. See LICENSE for details.
Release files for docc-compiler 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 132.1 MB
Release files / docc_compiler-0.7.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | docc_compiler-0.7.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.6 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
90b3f9483b09fde0a95f1e0a17caa6844546681876867849e7220357f42be2cf
|
|
BLAKE2b-256 checksum How to use checksums |
3789c40bfbaf844e23316c7a015b9223ec4bc246ae2ed943c986dea81471211e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
| Download URL | docc_compiler-0.7.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.8 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
a45f745564eadc5c3fd79489fdf129822f58a44575089f3342ba91bc18ca7936
|
|
BLAKE2b-256 checksum How to use checksums |
2f0de156cd0147a3665f52d6269a902d7b1cb9675e711cdf4c72bd17395fd98a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp314-cp314-macosx_14_0_arm64.whl
| Download URL | docc_compiler-0.7.0-cp314-cp314-macosx_14_0_arm64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.14 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
56e507e5c064430fedf14c968a15105d24e89cd1598169362377b8a2f81ff9bd
|
|
BLAKE2b-256 checksum How to use checksums |
12606b2b55894e23121cd202874b8bbde72728428fa018b518292babab39a914
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | docc_compiler-0.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.6 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9c1107dd7e26aebc53018e53e24c57552bac1355f158e31c15be2b266d51503f
|
|
BLAKE2b-256 checksum How to use checksums |
c634087e8edccf820ca8ef9cf5811d824b833f7356f48c1b910087deda9c3a54
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
| Download URL | docc_compiler-0.7.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.7 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
3e81533ba520625172ab1dcf61d2e88b6f85d03687ed7c15f27fd1293137415f
|
|
BLAKE2b-256 checksum How to use checksums |
94554838c9033ea001864f17654a425f448167bdb1de2757ef995661f0d32989
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp313-cp313-macosx_14_0_arm64.whl
| Download URL | docc_compiler-0.7.0-cp313-cp313-macosx_14_0_arm64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.13 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3e6227442df93c7bb4d257d43d8fbe9a2a219e50c61a9ba1c45341f1e9ffd1ea
|
|
BLAKE2b-256 checksum How to use checksums |
ad3d5c2109152961c2326b50d53e09b9cb76bad479fb3cb0e135a5cbc76e1f99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | docc_compiler-0.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.6 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
64a8999c94356f2c2b8880a1c2f5707bf1b09ab09e3b5552c21b648570d7e4f8
|
|
BLAKE2b-256 checksum How to use checksums |
fd86ae7a0a06971f3b87ac8a77aee5f5409491ad2b2126f7a6e5c9109ef86c14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
| Download URL | docc_compiler-0.7.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.7 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
bec29707a4b13a8277b4e35938262e4b2b91e5ca91220501aa498d9fcf6410ea
|
|
BLAKE2b-256 checksum How to use checksums |
45effcf648dc570c655867c7e48814067ed30bb7a9d1011b2e857ec5f77939e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp312-cp312-macosx_14_0_arm64.whl
| Download URL | docc_compiler-0.7.0-cp312-cp312-macosx_14_0_arm64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.12 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4737409eee8bbf676f4367d91d2f850c86cefc379fa304e7e284e57d33846345
|
|
BLAKE2b-256 checksum How to use checksums |
971f8989301b660a9034b382a572d866fce5a15f7e9c970ca570da650070b9f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | docc_compiler-0.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.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 |
28e3f1eecf882b81764c13aa300a37176b7a2242c14a2331c31964d7e6b7ccc4
|
|
BLAKE2b-256 checksum How to use checksums |
8b27333f5d88dcb7b4b87b70f8803b16d14766892de6270a35b5522493317fca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
| Download URL | docc_compiler-0.7.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.7 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
153aaaf835ddd23855fe591276b0a67f3bd3f8b9203af77afba567cae5f0ae10
|
|
BLAKE2b-256 checksum How to use checksums |
ec3b165ce5dd13ed190ed07848093a5b06da452c093ab0585ac8886d3bc8826a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|
Release files / docc_compiler-0.7.0-cp311-cp311-macosx_14_0_arm64.whl
| Download URL | docc_compiler-0.7.0-cp311-cp311-macosx_14_0_arm64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.11 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
829a2b36d918e2fcd178a35dc1e5807e3ebae5c194fe0f8cf98a364065315ccb
|
|
BLAKE2b-256 checksum How to use checksums |
4ed156ba4163016bdfb479243a5f2019f5f0b19bf6e27cdbf34f11c2e8aba24d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.14
|