"""Resource-level QIR to Fibonacci braid backend.""" from __future__ import annotations from dataclasses import dataclass from typing import Iterable, List from qlambda.compiler import QIRInstruction @dataclass(frozen=True) class BraidOp: sigma: int forward: bool = True class TopologicalBraidBackend: """Compile QIR gate names to Fibonacci braid words. This is a resource-level backend. It emits braid-word schedules for accounting and falsification tests; it is not a matrix-equivalence proof. """ H_BRAID = (BraidOp(0), BraidOp(1), BraidOp(0), BraidOp(1), BraidOp(0)) X_BRAID = (BraidOp(0), BraidOp(0)) S_BRAID = (BraidOp(0), BraidOp(0)) CNOT_BRAID = (BraidOp(2), BraidOp(1), BraidOp(0), BraidOp(1), BraidOp(2)) CCX_BRAID = ( BraidOp(4), BraidOp(5), BraidOp(4), BraidOp(5), BraidOp(4), BraidOp(2), BraidOp(3), BraidOp(4), BraidOp(2), BraidOp(3), BraidOp(4), BraidOp(4), BraidOp(5), BraidOp(4), BraidOp(5), BraidOp(4), ) def __init__(self, sk_t_length: int = 300): self.sk_t_length = sk_t_length def compile(self, qir: Iterable[QIRInstruction]) -> List[BraidOp]: braids: List[BraidOp] = [] for inst in qir: braids.extend(self.compile_gate(inst)) return braids def compile_gate(self, inst: QIRInstruction) -> List[BraidOp]: gate = inst.gate.upper() if gate == "X": return list(self.X_BRAID) if gate == "H": return list(self.H_BRAID) if gate == "S": return list(self.S_BRAID) if gate in {"T", "TDG"}: forward = gate == "T" return [BraidOp(0, forward=forward) for _ in range(self.sk_t_length)] if gate == "CX": return list(self.CNOT_BRAID) if gate == "CCX": return list(self.CCX_BRAID) if gate in {"ROTR", "SHR", "BARRIER"}: return [] if gate.endswith("_DAGGER"): base = QIRInstruction(gate[:-7], inst.controls, inst.targets, inst.params) return [BraidOp(op.sigma, not op.forward) for op in reversed(self.compile_gate(base))] raise NotImplementedError(f"Gate {inst.gate!r} has no topological braid mapping")