Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yoga_layout_python-0.1.1.tar.gz (75.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yoga_layout_python-0.1.1-py3-none-any.whl (65.4 kB view details)

Uploaded Python 3

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

Hashes for yoga_layout_python-0.1.1.tar.gz
Algorithm Hash digest
SHA256 9b62b7fd9ebf406c5edb28ff78260942cb71999d92979939cb70db8517f32846
MD5 d7c8d63ef39dc8df0332c35b108b87c2
BLAKE2b-256 e7bb110c845ec369303e1e4cb6f0a2b12c7718e8a549c8555b3c74871bd1573a

See more details on using hashes here.

File details

Details for the file yoga_layout_python-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for yoga_layout_python-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 377fbb1c158d51c1722573ae2f52bba6fabfae1fbae788e413c21c2b36122298
MD5 9b06b9b21d22539d5b5991a1c94460aa
BLAKE2b-256 9821730caa04de6ed76b313d9251881ca266204a18e33534446eccf405d2c898

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page