LEGO: Layout Expression Language for Code Generation
Project description
LEGO: Layout Expression Language for Code Generation
LEGO is an algebraic, compiler-agnostic framework for specifying and transforming memory layouts. It provides composable layout primitives that lower through a custom MLIR dialect to generate optimized code for CPU and GPU targets.
[LEGO: A Layout Expression Language for Code Generation of Hierarchical Mapping] [CGO 2026 Artifact]
Project Structure
LEGO/
├── python/ # Python package (lego-layout)
│ ├── lego/
│ │ ├── core.py # Layout primitives (Row, Col, RegP, GenP, OrderBy, GroupBy, TileByLayout)
│ │ ├── rewriter.py # DSL-agnostic AST rewriting engine
│ │ ├── python_printer.py# SymPy code printer (base + DSL subclasses)
│ │ ├── rust_printer.py # Rust code printer
│ │ ├── fortran_printer.py # Fortran code printer
│ │ ├── cxx_printer.py # C++ code printer
│ │ ├── julia_printer.py # Julia code printer
│ │ ├── cuda_c_printer.py# CUDA C code printer
│ │ ├── js_printer.py # JavaScript code printer
│ │ ├── glsl_printer.py # GLSL code printer
│ │ ├── backend/ # MLIR compilation, JIT, SymPy lowering, PyTorch autograd
│ │ └── frontends/ # DSLAdapter ABC + adapters (Triton, cuTile, Numba, JAX, Rust, Fortran, C++, Julia, CUDA C, JS, GLSL, python_mlir)
│ ├── examples/ # Usage examples (triton, numba_cuda, jax, cutile, python_mlir, symbolic, rust, cxx, fortran, julia, cuda_c, js, glsl)
│ │ └── puzzles/ # GPU puzzles — multi-backend kernel tests (CUDA, ROCm, Vulkan, WebGPU, Metal)
│ └── tests/ # Python tests
│
├── include/Lego/ # MLIR dialect headers (ODS definitions, passes)
├── lib/Lego/ # MLIR dialect implementation (lowering, verification, simplification)
├── tools/lego-opt/ # MLIR optimizer CLI
├── test/ # MLIR lit tests
│
├── viz/ # LEGO Studio (browser-based visualizer)
│ ├── wasm/ # Emscripten-compiled LEGO compiler (lego_driver.wasm)
│ ├── js/ # Frontend JavaScript
│ └── css/ # Styles
│
├── paper/ # Paper benchmarks and evaluation scripts
├── docs/ # Architecture and dialect documentation
├── scripts/ # Setup scripts
└── CMakeLists.txt # Build system (monolithic and decoupled modes)
Architecture
All paths flow through the MLIR lego dialect, which normalizes, simplifies,
and strength-reduces layout expressions before handing off to target-specific
backends. JIT frontends lower through the dialect, extract simplified
patterns, then return control to the original framework. Source code
generators lower through the dialect, extract SymPy expressions from the
optimized arith IR, then emit target-language source. GPU/CPU backends
lower the dialect all the way to machine code:
User Code
|
+-------------------------+-------------------------+
| | |
+---------+---------+ +-----------+----------+ +------------+----------+
| JIT Frontends | | GPU / CPU | | Source CodeGen |
| Triton, Numba, | | KernelBuilder, | | Rust, C++, Fortran, |
| JAX, cuTile | | Tensor API | | Julia, CUDA C, |
+---------+---------+ +-----------+----------+ | JS, GLSL |
| | +------------+----------+
+------------+-----------+---------------------------+
|
+------------+------------+
| lego MLIR dialect |
| ................... |
| normalization |
| lowering |
| simplification |
| strength reduction |
| verification (SMT) |
+-----+-------+--------+-+
| | |
v v v
+---------------+ +----+----+ ++----------------+
| extract | | extract | | compile |
| patterns | | SymPy | | to target |
+-------+-------+ +----+----+ +---+-----+-----++
| | | | |
+-------+--------+ +---+------+ | | |
| return to | | code | | | |
| original | | printers | | | |
| framework | +---+------+ | | |
| | | | | |
| Triton PTX, | +---+------+ | | |
| Numba CUDA, | | target | | | |
| JAX XLA, | | source | | | |
| cuTile | | code | | | |
+----------------+ +----------+ | | |
| | |
+------------------+------------------+------------------+---------------------+---------------------+
| | | | | |
+---+------------+ +---+------------+ +---+------------+ +---+---------------+ +---+---------------+ |
| lego-to-llvm | | lego-to-nvvm | | lego-to-rocdl | | lego-to-xevm | | lego-to-spirv | |
+---+------------+ +---+------------+ +---+------------+ +---+---------------+ +---+---------------+ |
| | | | | |
+---+------------+ +---+------------+ +---+------------+ +---+---------------+ +---+---------------+ |
| CPU | | CUDA | | AMD | | Intel GPU | | SPIR-V | |
| X86, ARM | | PTX/cubin | | HSACO | | binary | | (Vulkan) | |
+----------------+ +----------------+ +----------------+ +------------------+ +---+---+---+---+---+ |
| | | | |
+------------------+ +--------+ | | | | |
| lego-to-llvmspirv | | naga +---+ | | | |
+---+--------------+ +--------+ | | | |
| +--------+ | | | |
+---+--------------+ | naga +-------+ | | |
| LLVM SPIR-V | +--------+ | | |
| (OpenCL) | +--------+ | | |
+------------------+ | naga +-----------+ | |
+--------+ | |
+--------+ | |
| naga +---------------+ |
+---+----+ |
| |
+------+ +--+---+ +-------+ +---------++
| WGSL | | MSL | | GLSL | | WebGL |
+------+ +------+ +-------+ +----------+
Frontends
| Frontend | Module | Decorator | Description |
|---|---|---|---|
| Triton | lego.frontends.triton_jit |
@lego.jit |
Transforms Triton GPU kernels via AST rewriting; supports block_ptr (TMA) code generation (vecadd, matmul, vecadd block_ptr, matmul block_ptr) |
| cuTile | lego.frontends.cutile_jit |
@lego.jit |
Transforms cuda.tile (cuTile) kernels via AST rewriting (vecadd, matmul) |
| Numba CUDA | lego.frontends.numba_jit |
@lego_jit |
Transforms Numba CUDA kernels, scalar thread indexing (vecadd, matmul) |
| JAX | lego.frontends.jax_jit |
@lego_jit |
Transforms JAX functions, preserves static_argnums (vecadd, matmul) |
| Tensor API | lego.frontends.python_mlir |
-- | JIT-compiled layout transforms for NumPy/PyTorch with torch.compile support (example) |
| Rust | lego.frontends.rust_gen |
lego.rust_gen.generate() |
Generates Rust source code (example) |
| Fortran | lego.frontends.fortran_gen |
lego.fortran_gen.generate() |
Generates Fortran source code (example) |
| C++ | lego.frontends.cxx_gen |
lego.cxx_gen.generate() |
Generates C++ source code (example) |
| Julia | lego.frontends.julia_gen |
lego.julia_gen.generate() |
Generates Julia source code (example) |
| CUDA C | lego.frontends.cuda_c_gen |
lego.cuda_c_gen.generate() |
Generates CUDA C kernel source code (example) |
| JavaScript | lego.frontends.js_gen |
lego.js_gen.generate() |
Generates JavaScript source for WebGPU/WASM (example) |
| GLSL | lego.frontends.glsl_gen |
lego.glsl_gen.generate() |
Generates GLSL shader source code (example) |
| Symbolic | lego.core |
-- | SymPy-based algebraic layout expressions (example) |
Each JIT frontend implements the DSLAdapter interface (frontends/_adapter.py), which defines four hooks: unwrap, find_runtime_vars, get_code_printer, and compile_and_wrap. The DSL-agnostic rewriter (rewriter.py) handles AST transformation and symbolic evaluation. The Triton adapter additionally supports block_ptr (TMA) code generation, emitting tl.make_block_ptr / tl.advance calls with automatic boundary checks.
Source Code Generation Backends
Seven source-code generation backends take a Python function with LEGO layout expressions and emit equivalent index arithmetic in the target language. Each leverages SymPy's built-in code printers:
import lego
from lego.core import OrderBy, Row
def index_kernel(M, N, BM, BN):
L = OrderBy(Row(M, N)).TileBy((M // BM, N // BN), (BM, BN))
offset = L[pid_m, pid_n, :, :]
return offset
rust_src = lego.rust_gen.generate(index_kernel)
cxx_src = lego.cxx_gen.generate(index_kernel)
fortran_src = lego.fortran_gen.generate(index_kernel)
julia_src = lego.julia_gen.generate(index_kernel)
cuda_src = lego.cuda_c_gen.generate(index_kernel)
js_src = lego.js_gen.generate(index_kernel)
glsl_src = lego.glsl_gen.generate(index_kernel)
Key differences by language:
| Feature | Rust | C++ | Fortran | Julia | CUDA C | JavaScript | GLSL |
|---|---|---|---|---|---|---|---|
| Range | (0..N) |
std::views::iota(0, N) |
(/ (i, i=0, N-1) /) |
(0:N-1) |
comment | Array.from(...) |
comment |
| Floor div | a / b |
a / b |
a / b |
div(a, b) |
a / b |
Math.floor(a/b) |
a / b |
| Modulo | a % b |
a % b |
mod(a, b) |
mod(a, b) |
a % b |
a % b |
a % b |
| Power | .powi(n) |
std::pow(a, n) |
a**n |
a^n |
pow(a, n) |
Math.pow(a, n) |
pow(a, n) |
| Sqrt | (x as f64).sqrt() |
std::sqrt(x) |
sqrt(dble(x)) |
sqrt(x) |
sqrt(x) |
Math.sqrt(x) |
sqrt(x) |
Tensor API
The Tensor API provides layout constructors and transforms for NumPy and PyTorch:
from lego import Tiled, ColMajor, ZCurve, Swizzle, BlockCyclic, Batched
# Basic layouts
layout = Tiled((8, 8), tile_shape=(4, 4))
result = layout.transform(tensor) # or layout(tensor)
back = layout.inverse_transform(result)
# GPU-oriented layouts
z = ZCurve((4, 4)) # Morton curve for 2D spatial locality
s = Swizzle((8, 8)) # XOR swizzle to avoid shared memory bank conflicts
bc = BlockCyclic((16,), 2, 2) # ScaLAPACK-style distribution
# Batched transforms (vectorized, no Python loop)
batched = Batched(layout, batch_shape=(32,))
batched.transform(batch_tensor) # (32, 8, 8)
# Composition and comparison
composed = layout_a.compose(layout_b)
assert RowMajor((4, 4)) == RowMajor((4, 4))
PyTorch integration compiles layout transforms to native PyTorch arithmetic via the MLIR lowering pipeline. Instead of materializing O(numel) permutation tables, layout index expressions are lowered through MLIR (lego-lower pass with simplification and strength reduction), extracted as SymPy expressions, and compiled to vectorized PyTorch functions. For example, Col(4,8) becomes 4*j + i -- pure arithmetic, no lookup table.
import lego
import torch
layout = lego.ColMajor((4, 8))
x = torch.randn(4, 8)
# Transform: uses compiled arithmetic (arange + mul + add + gather)
physical = layout.transform(x) # autograd-compatible
logical = layout.inverse_transform(physical) # round-trips exactly
# LegoTensor: layout-aware tensor subclass
lx = lego.as_lego_tensor(x, layout)
result = lx + lx # operates on physical storage, no permutation
back = result.to_logical() # converts back to row-major
# torch.compile: traces through compiled index arithmetic
@torch.compile(backend="lego")
def fn(t):
return layout.transform(t) * 2
LegoTensor is a torch.Tensor subclass that carries layout metadata. Elementwise ops between same-layout tensors operate directly on physical storage. LegoArray provides the same for NumPy.
MLIR Backend
The lego MLIR dialect defines layout operations (gen_p, reg_p, row, col, order_by, group_by, tile_by, apply, apply_inverse) with types !lego.layout and !lego.view<T>. Layouts may contain symbolic (SymPy) dimensions, which are lowered to MLIR function parameters and resolved to concrete values at invocation time. The dialect includes passes for:
- Normalization -- desugar
row/col/tile_byto primitivereg_p/order_by/group_by - Lowering --
legoops toarith/scf/affine - Simplification -- optimize
divui/remuipatterns, distributive factoring (muli(a,c) + muli(b,c) → muli(addi(a,b), c)) - Strength Reduction -- convert power-of-2
muli/divui/remuito shift/mask operations - Verification -- unified
lego.checkop for bijectivity, GPU bank conflicts, and memory coalescing (SMT-backed via Z3)
Seven lowering pipelines target different backends:
| Pipeline | Target | Output | Shared memory |
|---|---|---|---|
lego-to-llvm |
CPU | LLVM IR (X86, AArch64) | N/A |
lego-to-nvvm |
CUDA | PTX/cubin via NVPTX | Yes |
lego-to-rocdl |
AMD | HSACO via AMDGPU | Yes |
lego-to-xevm |
Intel GPU | LLVM SPIR-V + XeVM binary | Yes |
lego-to-spirv |
Vulkan/WebGPU/Metal/WebGL | SPIR-V binary; naga converts to WGSL/MSL/GLSL | Yes (workgroup) |
lego-to-llvmspirv |
SPIR-V (OpenCL) | LLVM dialect with SPIR-V calling conventions | Yes |
| WASM (Emscripten) | Browser | lego_driver.wasm — full compiler in the browser |
N/A |
The NVVM, ROCDL, XeVM, and LLVM SPIR-V backends share the same three-phase architecture:
buildLegoGPUOutlinePipeline-- LEGO lower + GPU kernel outlining- Backend-specific GPU-to-LLVM conversion (
GPUToNVVM/GPUToROCDL/GPUToLLVMSPV/XeVM) buildGPUHostLLVMPipeline-- host-side LLVM lowering
Example: compile for sm_80 with max optimization:
lego-to-nvvm{chip=sm_80 opt-level=3}
Requirements
| Dependency | Version | Notes |
|---|---|---|
| Python | >= 3.12 | Tested with 3.12, 3.13, 3.14 |
| LLVM/MLIR | commit 7477045 |
Included as a submodule |
| CMake | >= 3.20 | |
| Ninja | Recommended build generator | |
| NumPy | 2.1.2 | |
| SymPy | 1.14.0 |
Optional:
| Dependency | Used by |
|---|---|
| PyTorch | Tensor API, torch.compile |
| Triton | Triton JIT frontend |
| cuda.tile | cuTile JIT frontend |
| Numba | Numba CUDA frontend |
| JAX | JAX JIT frontend |
| wgpu | Vulkan/WebGPU execution verification |
| naga-cli | SPIR-V to WGSL/MSL conversion (cargo install naga-cli) |
Installation
Quick install (Python package only)
pip install lego-layout
This installs the core layout algebra and frontends. The MLIR dialect native extensions are included in the wheel when available.
Platform support:
| Platform | Wheel tag | GPU backends included |
|---|---|---|
| Linux x86_64 | manylinux_2_28 (glibc 2.28+: RHEL 8+, Ubuntu 20.04+, Debian 11+) |
CUDA (PTX), ROCm, Intel (XeVM), Vulkan, WebGPU, Metal, LLVM SPIR-V |
| macOS ARM64 | macosx_15_0_arm64 |
CUDA (PTX), Intel (XeVM), Vulkan, WebGPU, Metal, LLVM SPIR-V |
All GPU backends are cross-compilers — no GPU hardware required at install time. The naga binary is bundled for SPIR-V to WGSL/MSL/GLSL conversion.
Development install
1. Clone and set up the environment
git clone https://github.com/tavakkoliamirmohammad/lego.git
cd lego
./scripts/setup.sh
source venv/bin/activate
pip install -e ./python
2. Build the MLIR dialect
Monolithic build (builds LLVM/MLIR + LEGO together):
cmake -S . -B build -DLEGO_MONOLITHIC_LLVM=ON
cmake --build build -j$(nproc) --target check-lego
Decoupled build (uses a prebuilt MLIR for fast iteration):
cmake -S . -B build -DMLIR_DIR=<mlir_build>/lib/cmake/mlir -DLEGO_MONOLITHIC_LLVM=OFF
cmake --build build -j$(nproc) --target check-lego
The build system automatically detects and uses fast linkers (mold/lld) and ccache.
To customize LLVM targets (default X86;NVPTX;AMDGPU;SPIRV):
cmake -S . -B build -DLEGO_MONOLITHIC_LLVM=ON -DLEGO_LLVM_TARGETS="X86;NVPTX;AMDGPU;SPIRV;AArch64"
GPU Runners
GPU execution tests are controlled by per-backend flags, auto-detected from hardware:
| Flag | Hardware | What it enables |
|---|---|---|
LEGO_ENABLE_CUDA_RUNNER |
NVIDIA GPU (nvidia-smi) |
CUDA kernel execution via mlir-runner |
LEGO_ENABLE_ROCM_RUNNER |
AMD GPU (rocm-smi) |
ROCm kernel execution |
LEGO_ENABLE_METAL_RUNNER |
macOS Metal GPU | Metal/Vulkan/WebGPU execution via wgpu |
If any runner is enabled, SPIR-V execution tests (Vulkan, WebGPU, Metal) also run since SPIR-V works on any GPU backend. To explicitly enable a runner:
cmake -S . -B build -DLEGO_ENABLE_METAL_RUNNER=ON # macOS Metal
cmake -S . -B build -DLEGO_ENABLE_CUDA_RUNNER=ON # NVIDIA CUDA
cmake -S . -B build -DLEGO_ENABLE_ROCM_RUNNER=ON # AMD ROCm
Testing
# MLIR lit tests
cmake --build build --target check-lego
# Python tests
cmake --build build --target check-lego-python
# Compile-only puzzle tests (no GPU required — tests all 7 backends)
cmake --build build --target check-lego-puzzles-compile
# GPU puzzle tests (requires at least one runner enabled)
cmake --build build --target check-lego-puzzles
# All tests
cmake --build build --target check-lego-all
Citation
If you use LEGO in your research, please cite:
Amir Mohammad Tavakkoli, Cosmin E. Oancea, and Mary Hall. "LEGO: A Layout Expression Language for Code Generation of Hierarchical Mapping." In 2026 IEEE/ACM International Symposium on Code Generation and Optimization (CGO), pp. 228-241, 2026.
@INPROCEEDINGS{tavakkoli2026lego,
author={Tavakkoli, Amir Mohammad and Oancea, Cosmin E. and Hall, Mary},
booktitle={2026 IEEE/ACM International Symposium on Code Generation and Optimization (CGO)},
title={LEGO: A Layout Expression Language for Code Generation of Hierarchical Mapping},
year={2026},
pages={228-241},
keywords={Codes;Algebra;Shape;Instruction sets;Layout;Graphics processing units;Organizations;Optimization;Indexing;Python;data layout;MLIR compiler;domain-specific optimization tools},
doi={10.1109/CGO68049.2026.11394846}}
The paper artifact is available at: https://zenodo.org/records/17633994
License
MIT License. See LICENCE.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lego_layout-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: lego_layout-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 49.6 MB
- Tags: CPython 3.14, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f99d1fe726d7908d196b65d35e509189d3f10a3f88f3d45871d7f3e0f1467fc3
|
|
| MD5 |
257bd2b46f3190fdbc4df453df0b355a
|
|
| BLAKE2b-256 |
05372cd02a5a9aedca7c0bdcef6529236156a46ea6f873bdef0a1f7c4b813f30
|
Provenance
The following attestation bundles were made for lego_layout-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl:
Publisher:
ci.yml on tavakkoliamirmohammad/LEGO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lego_layout-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl -
Subject digest:
f99d1fe726d7908d196b65d35e509189d3f10a3f88f3d45871d7f3e0f1467fc3 - Sigstore transparency entry: 1280257339
- Sigstore integration time:
-
Permalink:
tavakkoliamirmohammad/LEGO@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/tavakkoliamirmohammad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lego_layout-0.2.5-cp314-cp314-macosx_15_0_universal2.whl.
File metadata
- Download URL: lego_layout-0.2.5-cp314-cp314-macosx_15_0_universal2.whl
- Upload date:
- Size: 35.7 MB
- Tags: CPython 3.14, macOS 15.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
728a3d2bd7e6a52d82aed657ebbc4d60834a6010bec3f7f768580a5cd4cafdf3
|
|
| MD5 |
69e8d792251d9a2a86c15bf5a9084a6c
|
|
| BLAKE2b-256 |
1be5a84a2a58d829c751d59fdfb8196dfe70fa502fcd563f3df3130aefce2677
|
Provenance
The following attestation bundles were made for lego_layout-0.2.5-cp314-cp314-macosx_15_0_universal2.whl:
Publisher:
ci.yml on tavakkoliamirmohammad/LEGO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lego_layout-0.2.5-cp314-cp314-macosx_15_0_universal2.whl -
Subject digest:
728a3d2bd7e6a52d82aed657ebbc4d60834a6010bec3f7f768580a5cd4cafdf3 - Sigstore transparency entry: 1280257461
- Sigstore integration time:
-
Permalink:
tavakkoliamirmohammad/LEGO@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/tavakkoliamirmohammad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lego_layout-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: lego_layout-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 49.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
084fe00f80060c57b817391a9f80ed7dd45de615195ceecdf67940f4a5fd6be2
|
|
| MD5 |
41570c94fd453d252935ecc382ee49a1
|
|
| BLAKE2b-256 |
1d80a84897788416a8d7b6bf653c2702cdae54abc4cfb3e1ec754b3c02b2681d
|
Provenance
The following attestation bundles were made for lego_layout-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl:
Publisher:
ci.yml on tavakkoliamirmohammad/LEGO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lego_layout-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl -
Subject digest:
084fe00f80060c57b817391a9f80ed7dd45de615195ceecdf67940f4a5fd6be2 - Sigstore transparency entry: 1280257398
- Sigstore integration time:
-
Permalink:
tavakkoliamirmohammad/LEGO@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/tavakkoliamirmohammad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lego_layout-0.2.5-cp313-cp313-macosx_15_0_universal2.whl.
File metadata
- Download URL: lego_layout-0.2.5-cp313-cp313-macosx_15_0_universal2.whl
- Upload date:
- Size: 35.7 MB
- Tags: CPython 3.13, macOS 15.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
549a2b106ab19ff421f7fa7a3f3d1b2df9b6d0de54e3debc6fcb373bf77cebf0
|
|
| MD5 |
66c5e45663e24fb881d9ce7d1aed9903
|
|
| BLAKE2b-256 |
01c0bd06719bd4f9648a6126574bca96e730b799f93a07dadb05c316fb9174aa
|
Provenance
The following attestation bundles were made for lego_layout-0.2.5-cp313-cp313-macosx_15_0_universal2.whl:
Publisher:
ci.yml on tavakkoliamirmohammad/LEGO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lego_layout-0.2.5-cp313-cp313-macosx_15_0_universal2.whl -
Subject digest:
549a2b106ab19ff421f7fa7a3f3d1b2df9b6d0de54e3debc6fcb373bf77cebf0 - Sigstore transparency entry: 1280257500
- Sigstore integration time:
-
Permalink:
tavakkoliamirmohammad/LEGO@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/tavakkoliamirmohammad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lego_layout-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: lego_layout-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 49.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efebc73edf77e14ad42d336a60a8d31071754c6af779fef5d687eb4b45be6cfd
|
|
| MD5 |
2657362cbeebce0363888abf23d05e55
|
|
| BLAKE2b-256 |
b0b7132270b3abf596b2feb09251af0a15972a168d0481ba7b0a327867f52db4
|
Provenance
The following attestation bundles were made for lego_layout-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl:
Publisher:
ci.yml on tavakkoliamirmohammad/LEGO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lego_layout-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl -
Subject digest:
efebc73edf77e14ad42d336a60a8d31071754c6af779fef5d687eb4b45be6cfd - Sigstore transparency entry: 1280257428
- Sigstore integration time:
-
Permalink:
tavakkoliamirmohammad/LEGO@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/tavakkoliamirmohammad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lego_layout-0.2.5-cp312-cp312-macosx_15_0_universal2.whl.
File metadata
- Download URL: lego_layout-0.2.5-cp312-cp312-macosx_15_0_universal2.whl
- Upload date:
- Size: 35.7 MB
- Tags: CPython 3.12, macOS 15.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12cba5a558dc80923916616f91ff3b2d9d3f777d878546503f12685b105cb4bf
|
|
| MD5 |
6adda6014935ef9c19d8a41cca7ba21b
|
|
| BLAKE2b-256 |
4b7117d109e9273062d5a96553a0252a23fd61f2422898750de8ec9d20dd48eb
|
Provenance
The following attestation bundles were made for lego_layout-0.2.5-cp312-cp312-macosx_15_0_universal2.whl:
Publisher:
ci.yml on tavakkoliamirmohammad/LEGO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lego_layout-0.2.5-cp312-cp312-macosx_15_0_universal2.whl -
Subject digest:
12cba5a558dc80923916616f91ff3b2d9d3f777d878546503f12685b105cb4bf - Sigstore transparency entry: 1280257374
- Sigstore integration time:
-
Permalink:
tavakkoliamirmohammad/LEGO@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/tavakkoliamirmohammad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@8eba2aa98454c7844dd5a3d9db5ab08d434c9a47 -
Trigger Event:
push
-
Statement type: