Pure Python port of Meta Yoga layout engine
Project description
yoga-layout-python
yoga-layout-python is a pure Python port of Meta's Yoga layout engine.
Current Status
- Public enums, value/config primitives, and the core layout algorithm are implemented in Python.
- Internal module layout mirrors upstream
yoga/so translation and parity work can stay file-for-file aligned. - Upstream test translations pass, and a Python-vs-C++ differential parity harness is available under
tools/.
Installation
pip install -e .
For development:
pip install -e ".[dev]"
API Shape
The Python package keeps Yoga's public naming style:
from yoga import *
config = YGConfigNew()
node = YGNodeNewWithConfig(config)
YGNodeStyleSetWidth(node, 100)
YGNodeStyleSetHeight(node, 50)
YGNodeCalculateLayout(node, YGUndefined, YGUndefined, YGDirectionLTR)
width = YGNodeLayoutGetWidth(node)
height = YGNodeLayoutGetHeight(node)
Running Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=yoga --cov-report=term-missing
# Run specific test file
pytest tests/test_smoke.py -v
Differential Parity
The repository includes a differential parity runner that compares Python layout results against the vendored upstream C++ Yoga engine on the same captured tree.
# Run the default parity suite
python tools/run_differential_ci.py
# Rebuild the C++ runner first
python tools/run_differential_ci.py --force-rebuild
# Increase the random batch size
python tools/run_differential_ci.py --random-count 1000 --seed 20260317
On failure, the script writes a repro capture to
build/differential_failure_capture.json.
The lower-level harness remains available if you want the raw output format:
python tools/differential_test.py
Project Structure
src/yoga/
├── algorithm/ # Core layout algorithms (CalculateLayout, FlexLine, etc.)
├── config/ # Configuration handling
├── debug/ # Debug utilities (logging, assertions)
├── event/ # Event system
├── node/ # Node class and layout results
├── numeric/ # Numeric utilities (FloatOptional, Comparison)
├── style/ # Style system (Style, StyleLength, etc.)
└── *.py # Public API modules
tools/
├── differential_cpp_runner.cpp # C++ capture runner used for parity checks
├── differential_test.py # Python/C++ differential harness
└── run_differential_ci.py # Stable CLI entrypoint for parity checks
License
This project uses the same MIT license as upstream Yoga. See LICENSE.
Contributing
Contributions are welcome! Please see the upstream Yoga repository for reference.
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 Distribution
Built Distribution
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 yoga_layout_python-0.1.1.tar.gz.
File metadata
- Download URL: yoga_layout_python-0.1.1.tar.gz
- Upload date:
- Size: 75.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b62b7fd9ebf406c5edb28ff78260942cb71999d92979939cb70db8517f32846
|
|
| MD5 |
d7c8d63ef39dc8df0332c35b108b87c2
|
|
| BLAKE2b-256 |
e7bb110c845ec369303e1e4cb6f0a2b12c7718e8a549c8555b3c74871bd1573a
|
File details
Details for the file yoga_layout_python-0.1.1-py3-none-any.whl.
File metadata
- Download URL: yoga_layout_python-0.1.1-py3-none-any.whl
- Upload date:
- Size: 65.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
377fbb1c158d51c1722573ae2f52bba6fabfae1fbae788e413c21c2b36122298
|
|
| MD5 |
9b06b9b21d22539d5b5991a1c94460aa
|
|
| BLAKE2b-256 |
9821730caa04de6ed76b313d9251881ca266204a18e33534446eccf405d2c898
|