Skip to main content

Yggdrasil

pyyggdrasil packages the native dependency prefix used by the planning projects in this repository family.

The Python distribution name and import package are both pyyggdrasil; Python 3.11 or newer is required.

pyyggdrasil is the base of the planning-and-learning package chain. The shared workspace layout, the layered install order, and the common build-from-source and CMake-integration patterns are documented in the Planning and Learning build instructions; the sections below cover pyyggdrasil-specific details.

Each binary release has a matching complete corresponding-source archive on the GitHub releases page, containing Yggdrasil and its exact native dependency sources.

The C++ headers also include a small relational-algebra library for arbitrary-arity tuple sets and queries.

Python Integration

Install the wheel and query the native prefix:

import pyyggdrasil

print(pyyggdrasil.native_prefix())
print(pyyggdrasil.cmake_prefix())  # prefix to put on CMAKE_PREFIX_PATH
print(pyyggdrasil.cmake_dir())     # directory containing yggdrasilConfig.cmake
print(pyyggdrasil.include_dir())
print(pyyggdrasil.library_dirs())
print(pyyggdrasil.cmake_dirs())

The same paths are available from the shell:

python -m pyyggdrasil --prefix
python -m pyyggdrasil --cmake-dir
python -m pyyggdrasil --include-dir
python -m pyyggdrasil --version

Python packages that consume this native prefix should depend on:

dependencies = [
    "pyyggdrasil>=0.3.0,<0.4",
]

The bundled shared libraries make the coupling ABI-level, so pin to the same minor version. The exported CMake package version file uses SameMinorVersion compatibility accordingly.

Serialization Tables

pyyggdrasil.serialization.table provides the shared JSONValue, Row, and Table types and a pipe-separated table renderer:

from pyyggdrasil.serialization.table import Row, render_table

rows: list[Row] = [
    {"name": "first", "children": ["n1", "n2"]},
    {"name": "second", "children": []},
]
print(render_table(rows, prefix="n", aligned=False))  # Compact default.
print(render_table(rows, prefix="n", aligned=True))   # Pad columns for alignment.

The first column contains references n0 and n1 under the id header. Both modes use pipes without decorative separator rows. Dictionaries expand recursively into columns with grouped headers. Parent names appear above their first child; all leaf labels share the bottom header row. Empty dictionaries have no columns.

Flat lists of unambiguous scalars use brackets and commas, such as [n1,n2] or [n1] for a singleton. Empty lists render as []; nested or ambiguous lists use compact JSON. None renders as a blank cell; numbers and booleans use str. Pipes, backslashes, carriage returns, newlines, and tabs are escaped, so cells never span multiple lines. Empty input produces an empty string.

For a serialization dictionary, render its snapshots directly:

for name, table in dictionaries.tables().items():
    print(name)
    print(render_table(table["rows"], prefix=table["prefix"]))

Enums and variant kinds use their textual names directly. Native entities require registered tables, including entities encountered in nested fields. Missing registrations raise an error naming the type. Convert an entity to a string explicitly in a projection when its native text is wanted. The surrounding output order and text belong to the caller.

Build Python

Build a wheel from source:

uv build --wheel

The build recreates dependencies-build/ and dependencies-install/ from scratch. To package an existing native prefix without rebuilding dependencies:

YGGDRASIL_BUILD_NATIVE=OFF \
YGGDRASIL_NATIVE_PREFIX=/path/to/dependencies-install \
uv build --wheel

This bypass trusts the prefix as-is; use only one built from the dependency revisions in docs/SOURCES.json.

Native builds use all available processors by default. Set YGGDRASIL_JOBS to override the build parallelism. Set YGGDRASIL_BUILD_TYPE to select the dependency build profile; it defaults to Release.

Runtime libraries are stripped in the wheel by default. Disable that for debugging with:

YGGDRASIL_STRIP_WHEEL=OFF uv build --wheel

C++ contracts

Use CanonicalizableContext<Context, Handle>; it replaces the former handle-first ordering and the CanonicalizableContextFor wrapper. extend and range set require iteration through a const range and append its elements through const references.

RelationBindingsForwardRange and RelationBindingsRandomAccessRange require const iteration with the corresponding traversal capability, matching iterator and sentinel types, and typed row indices. They borrow the source rows, which must outlive the wrapper and its views. Reference-qualified range parameters also provide const access. Generic binding-range view accessors propagate exceptions from the underlying range and canonical-owner lookup; they are no longer unconditionally noexcept.

Build C++

Native Dependencies

Build the native dependency prefix directly with CMake:

cmake -S src -B dependencies-build \
  -DCMAKE_INSTALL_PREFIX=dependencies-install \
  -DCMAKE_INSTALL_LIBDIR=lib

cmake --build dependencies-build --parallel
cmake --install dependencies-build

Yggdrasil builds its bundled dependencies as shared libraries. The native dependency prefix contains C++ headers, shared libraries, and CMake package configuration files consumed by the other projects.

Yggdrasil Targets

Configure Yggdrasil separately against the installed dependency prefix:

cmake -S . -B build \
  -DCMAKE_BUILD_TYPE=Debug \
  -DYGGDRASIL_NATIVE_PREFIX="$PWD/dependencies-install" \
  -DYGGDRASIL_BUILD_TESTS=ON

cmake --build build --parallel
ctest --test-dir build

CMake options:

Option Default Description
YGGDRASIL_BUILD_TESTS OFF Build Yggdrasil C++ tests.
YGGDRASIL_BUILD_PROFILING OFF Build Yggdrasil benchmark executables.
YGGDRASIL_ENABLE_FMT_FORMATTERS ON Enable Yggdrasil's public fmt formatters.
YGGDRASIL_USE_LLD ON Use LLVM lld with Clang when available.
YGGDRASIL_ENABLE_LTO ON Enable link-time optimization for Release builds.

Single-config CMake builds default to Release. On GCC and Clang, Debug builds use -Og with debug symbols, RelWithDebInfo keeps frame pointers and disables LTO, and Release LTO uses GCC LTO or Clang ThinLTO. Editable installs and wheels disable YGGDRASIL_USE_LLD and YGGDRASIL_ENABLE_LTO by default for build reliability. This compiler policy applies only to Yggdrasil's first-party extension and tests; the src/ dependency superbuild leaves each bundled project in control of its own compiler policy.

CMake Integration

The wheel ships a CMake package config (yggdrasilConfig.cmake) defining the yggdrasil::yggdrasil interface target. It carries the include directory, C++20 as a compile feature, and the bundled dependencies (Boost, fmt, gtl, TBB) via find_dependency. (cista is consumed through the include directory only — its target exports compile definitions that would otherwise change cista's hashing and fmt integration.) Downstream CMake projects consume it through CMAKE_PREFIX_PATH:

cmake -S . -B build \
  -DCMAKE_PREFIX_PATH="$(python -m pyyggdrasil --prefix)"
find_package(yggdrasil 0.3.0 CONFIG REQUIRED)
target_link_libraries(my_target PRIVATE yggdrasil::yggdrasil)

For compiler invocations launched from Python, use pyyggdrasil.include_dir() for the C++ headers and pyyggdrasil.library_dirs() for installed native library directories.

MPI

The wheel includes a TCP/shared-memory MPICH runtime and Boost.MPI. MPI remains opt-in and is not linked by yggdrasil::yggdrasil:

find_package(yggdrasil CONFIG REQUIRED)
set(MPI_HOME "${YGGDRASIL_NATIVE_PREFIX}")
set(MPI_CXX_SKIP_MPICXX ON)
find_package(MPI REQUIRED COMPONENTS CXX)
find_package(Boost CONFIG REQUIRED COMPONENTS mpi serialization
    PATHS "${YGGDRASIL_NATIVE_PREFIX}" NO_DEFAULT_PATH)
target_link_libraries(distributed PRIVATE
    MPI::MPI_CXX Boost::mpi Boost::serialization)

The launcher is ${YGGDRASIL_NATIVE_PREFIX}/bin/mpiexec, or from Python, pyyggdrasil.native_prefix() / "bin" / "mpiexec". Use the bundled launcher and libraries together; vendor interconnects and vendor MPI require a separate source build.

fmt Formatters

Yggdrasil's public fmt::formatter specializations are guarded by the YGG_ENABLE_FMT_FORMATTERS macro, which defaults to 1 (yggdrasil/core/config.hpp). Consumers can opt out by defining YGG_ENABLE_FMT_FORMATTERS=0. For Yggdrasil's own builds, the YGGDRASIL_ENABLE_FMT_FORMATTERS CMake option (default ON) toggles the macro.

Metadata

Release files for pyyggdrasil 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyyggdrasil 0.3.0
File Size Uploaded Provenance Actions
pyyggdrasil-0.3.0.tar.gz 338.3 kB With provenance Details for pyyggdrasil-0.3.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for pyyggdrasil 0.3.0
File Interpreter ABI Platform Actions
pyyggdrasil-0.3.0-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 abi3 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pyyggdrasil-0.3.0-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pyyggdrasil-0.3.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details for pyyggdrasil-0.3.0-cp311-abi3-macosx_11_0_arm64.whl

Total release size: 71.2 MB

Release files / pyyggdrasil-0.3.0.tar.gz

Download URL pyyggdrasil-0.3.0.tar.gz
Size 338.3 kB
Tags Source
SHA-256 checksum
How to use checksums
afad825d40e6d5dae8299fbe871508197cf6a461c89c832de42a8dc1e635bd7d
BLAKE2b-256 checksum
How to use checksums
21465236553bec5c8bce11c3d29860b62a7549db65c14c5c71af568ed7c574c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / pyyggdrasil-0.3.0-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pyyggdrasil-0.3.0-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 36.6 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
94db450adda2ae5311746d469c731cf9f43f25d76b0c399cddb40a7fa4d382d4
BLAKE2b-256 checksum
How to use checksums
4f2c79b109daa59a03b881b3239280380f80cd428a3783a0bb954bceed0eeeb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / pyyggdrasil-0.3.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL pyyggdrasil-0.3.0-cp311-abi3-macosx_11_0_arm64.whl
Size 34.3 MB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5811676c493141efd8854b1dfa04173d74b79c0002dad06784700944e554ff38
BLAKE2b-256 checksum
How to use checksums
995ea589f5f258a333f80fd7af90ac6857e5ac1d7c212de5ea063b78b9b4b226
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Security for pyyggdrasil 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 3 files in this release have been uploaded with provenance metadata.

Select from 3 files

Attestation for pyyggdrasil-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page