Skip to content

gds.compiler

Compile a Block tree into a flat SystemIR.

Parameters:

Name Type Description Default
name str

System name.

required
root Block

Root of the composition tree.

required
block_compiler Callable[[AtomicBlock], BlockIR] | None

Domain-specific function to convert AtomicBlock → BlockIR. If None, uses a default that extracts name + interface.

None
wiring_emitter Callable[[StructuralWiring], WiringIR] | None

Domain-specific function to convert StructuralWiring → WiringIR. If None, uses the default GDS emitter.

None
composition_type CompositionType

Top-level composition type.

SEQUENTIAL
source str

Source identifier.

''
inputs list[InputIR] | None

External inputs to include in the SystemIR. Layer 0 never infers inputs — domain packages supply them.

None
Source code in packages/gds-framework/gds/compiler/compile.py
def compile_system(
    name: str,
    root: Block,
    block_compiler: Callable[[AtomicBlock], BlockIR] | None = None,
    wiring_emitter: Callable[[StructuralWiring], WiringIR] | None = None,
    composition_type: CompositionType = CompositionType.SEQUENTIAL,
    source: str = "",
    inputs: list[InputIR] | None = None,
) -> SystemIR:
    """Compile a Block tree into a flat SystemIR.

    Args:
        name: System name.
        root: Root of the composition tree.
        block_compiler: Domain-specific function to convert AtomicBlock → BlockIR.
            If None, uses a default that extracts name + interface.
        wiring_emitter: Domain-specific function to convert StructuralWiring →
            WiringIR. If None, uses the default GDS emitter.
        composition_type: Top-level composition type.
        source: Source identifier.
        inputs: External inputs to include in the SystemIR. Layer 0 never
            infers inputs — domain packages supply them.
    """
    if block_compiler is None:
        block_compiler = _default_block_compiler

    blocks = flatten_blocks(root, block_compiler)
    wirings = extract_wirings(root, wiring_emitter)
    hierarchy = extract_hierarchy(root)

    return SystemIR(
        name=name,
        blocks=blocks,
        wirings=wirings,
        inputs=inputs or [],
        composition_type=composition_type,
        hierarchy=hierarchy,
        source=source,
    )