Skip to content

gds_business.vsm.compile

Compiler: ValueStreamModel → GDSSpec / SystemIR.

Semantic Types

Public Functions

Compile a ValueStreamModel into a GDSSpec.

Registers: types, spaces, entities, blocks, wirings.

Source code in packages/gds-business/gds_business/vsm/compile.py
def compile_vsm(model: ValueStreamModel) -> GDSSpec:
    """Compile a ValueStreamModel into a GDSSpec.

    Registers: types, spaces, entities, blocks, wirings.
    """
    spec = GDSSpec(name=model.name, description=model.description)

    # 1. Register types
    spec.collect(MaterialType, ProcessSignalType)

    # 2. Register spaces
    spec.collect(MaterialSpace, ProcessSignalSpace)

    # 3. Register entities (one per buffer)
    for buf in model.buffers:
        spec.register_entity(_build_buffer_entity(buf))

    # 4. Register blocks
    for s in model.suppliers:
        spec.register_block(_build_supplier_block(s))

    for c in model.customers:
        spec.register_block(_build_customer_block(c))

    for step in model.steps:
        spec.register_block(_build_step_block(step, model))

    for buf in model.buffers:
        spec.register_block(_build_buffer_mechanism(buf, model))

    # 5. Register spec wirings
    all_block_names = [b.name for b in spec.blocks.values()]
    wires: list[Wire] = []

    for flow in model.material_flows:
        source = flow.source
        target = flow.target
        if source in model.buffer_names:
            source = _buffer_block_name(source)
        if target in model.buffer_names:
            target = _buffer_block_name(target)
        wires.append(Wire(source=source, target=target, space="VSM MaterialSpace"))

    for flow in model.information_flows:
        source = flow.source
        target = flow.target
        if source in model.buffer_names:
            source = _buffer_block_name(source)
        if target in model.buffer_names:
            target = _buffer_block_name(target)
        wires.append(Wire(source=source, target=target, space="VSM ProcessSignalSpace"))

    if wires:
        spec.register_wiring(
            SpecWiring(
                name=f"{model.name} Wiring",
                block_names=all_block_names,
                wires=wires,
                description=f"Auto-generated wiring for VSM {model.name!r}",
            )
        )

    return spec

Compile a ValueStreamModel directly to SystemIR.

Builds the composition tree and delegates to GDS compile_system().

Source code in packages/gds-business/gds_business/vsm/compile.py
def compile_vsm_to_system(model: ValueStreamModel) -> SystemIR:
    """Compile a ValueStreamModel directly to SystemIR.

    Builds the composition tree and delegates to GDS compile_system().
    """
    root = _build_composition_tree(model)
    return compile_system(model.name, root)