Files
wehub-resource-sync 91e75e620b
CI: cua-driver distro-compat matrix / debian:12 (glibc 2.36) (push) Has been cancelled
CI: SPDX Headers / Check SPDX headers (warn-only) (push) Has been cancelled
CD: Docs MCP Server / build (linux/amd64) (push) Has been cancelled
CD: Docs MCP Server / build (linux/arm64) (push) Has been cancelled
CD: Docs MCP Server / merge (push) Has been cancelled
CI: cua-driver distro-compat matrix / Resolve release version (push) Has been cancelled
CI: cua-driver distro-compat matrix / fedora:41 (glibc 2.40) (push) Has been cancelled
CI: cua-driver distro-compat matrix / rockylinux:9 (glibc 2.34) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:22.04 (glibc 2.35) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:24.04 (glibc 2.39) (push) Has been cancelled
CI: cua-driver distro-compat matrix / Distro compat summary (push) Has been cancelled
CI: Rust Linux unit / Rust Linux unit and compile (push) Has been cancelled
CI: Rust Windows unit / Rust Windows unit and compile (push) Has been cancelled
CI: Nix Linux Rust source / Nix / compositor build (push) Has been cancelled
CI: Nix Linux Rust source / Nix / driver package (push) Has been cancelled
CI: Nix Linux Rust source / Nix / Rust unit tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:19 +08:00

103 lines
4.2 KiB
Python

"""Auto-generated cb task for KiCad submission c4baee36-ea0a-4451-81f0-fd540d47326c."""
from __future__ import annotations
import asyncio
from pathlib import Path
import cua_bench as cb
_SUBMISSION_ID = "c4baee36-ea0a-4451-81f0-fd540d47326c"
_REMOTE_PROJECT_DIR = "/home/cua/kicad_project"
_HARNESS_DIR = Path(__file__).parent
@cb.tasks_config
def tasks() -> list[cb.Task]:
return [
cb.Task(
description='Design a KiCad-style schematic of a switching, step-down voltage regulator to convert 48 Vdc to 3.3 Vdc. Use the LM2576HVS-3.3 from Texas Instruments. \n\n\t• Pin 1 is the input and should be connected to both the input of 48 Vdc and a polarized capacitor (C1) of 100 uF. C1 has its negative terminal connected to ground. \n\t• Pin 2 is connected to both a catch diode 1N5822 cathode and an inductor of 100 uH. The other end of the diode is connected to ground. The other end of the inductor is connected to both Pin 4 and the positive end of polarized capacitor (C2) of 1000 uF. The other end of C2 is grounded.\nPins 3 and 5 should be connected directly to ground.',
metadata={"difficulty": 'easy', "submission_id": _SUBMISSION_ID},
)
]
@cb.setup_task(split="train")
async def start(task_cfg: cb.Task, session: cb.DesktopSession) -> None:
await session.apps.kicad.install(with_shortcut=True)
initial_dir = _HARNESS_DIR / "initial"
for local_path in sorted(initial_dir.rglob("*")):
if not local_path.is_file():
continue
rel = local_path.relative_to(initial_dir)
remote_path = f"{_REMOTE_PROJECT_DIR}/{rel.as_posix()}"
remote_dir = f"{_REMOTE_PROJECT_DIR}/{rel.parent.as_posix()}"
await session.run_command(f"mkdir -p '{remote_dir}'", check=False)
await session.write_bytes(remote_path, local_path.read_bytes())
try:
await session.apps.kicad.launch(project_path=None)
except Exception:
pass
await asyncio.sleep(5)
@cb.solve_task(split="train")
async def solve(task_cfg: cb.Task, session: cb.DesktopSession) -> None:
"""Oracle solver: upload reference.net directly to the expected output path."""
await session.run_command(f"mkdir -p '{_REMOTE_PROJECT_DIR}'", check=False)
await session.write_bytes(
f"{_REMOTE_PROJECT_DIR}/output.net",
(_HARNESS_DIR / "reference.net").read_bytes(),
)
@cb.evaluate_task(split="train")
async def evaluate(task_cfg: cb.Task, session: cb.DesktopSession) -> float:
from cua_bench.netlist_compare import (
compare_kicad_netlists,
load_reference_netlist,
)
reference = load_reference_netlist(_HARNESS_DIR / "reference.net", _HARNESS_DIR)
# Try common netlist output locations first
candidate_paths = [
f"{_REMOTE_PROJECT_DIR}/{_SUBMISSION_ID}.net",
f"{_REMOTE_PROJECT_DIR}/output.net",
]
for path in candidate_paths:
result = await session.run_command(f"cat '{path}'", check=False)
candidate = result.get("stdout", "")
if candidate.strip():
return compare_kicad_netlists(candidate, reference)
# Search for any .net file in the project dir
result = await session.run_command(
f"find {_REMOTE_PROJECT_DIR} -name '*.net' | head -1", check=False
)
net_path = result.get("stdout", "").strip()
if net_path:
result = await session.run_command(f"cat '{net_path}'", check=False)
candidate = result.get("stdout", "")
if candidate.strip():
return compare_kicad_netlists(candidate, reference)
# Fall back: agent edited schematic without exporting — use kicad-cli to generate netlist
result = await session.run_command(
f"find {_REMOTE_PROJECT_DIR} -name '*.kicad_sch' | head -1", check=False
)
sch_path = result.get("stdout", "").strip()
if sch_path:
out_net = "/tmp/kicad_eval_output.net"
await session.run_command(
f"kicad-cli sch export netlist '{sch_path}' -o '{out_net}'",
check=False,
)
result = await session.run_command(f"cat '{out_net}'", check=False)
candidate = result.get("stdout", "")
if candidate.strip():
return compare_kicad_netlists(candidate, reference)
return 0.0