快速入门¶
Quantum-Resource-Estimator 采用 register-level Operation tree。一个量子程序既可以用于
PySparQ simulation,也可以 lowering 到 QEC-Compiler AbstractCircuit。
基本概念¶
RegisterMetadata:声明寄存器名、宽度和类型。
Operation:量子操作节点,分为
Primitive和Composite。Visitor:遍历 Operation tree,用于 simulation、resource counting、QEC lowering。
YAML DSL:声明 composite operation,并生成 Python 类。
第一个 simulation 例子¶
import pysparq as ps
from pyqres.core.metadata import RegisterMetadata
from pyqres.core.simulator import SimulatorVisitor
from pyqres.primitives import Hadamard, X
rm = RegisterMetadata.get_register_metadata()
rm.declare_register("q", 2, "UnsignedInteger")
sim = SimulatorVisitor()
Hadamard(["q"]).traverse(sim)
X(["q"], [0]).traverse(sim)
print(ps.StatePrint(sim.state, ps.StatePrintDisplay.Detail))
第一个 QEC lowering 例子¶
from pyqres.core.lowering import to_abstract_circuit
from pyqres.core.metadata import RegisterMetadata
from pyqres.primitives import Hadamard, CNOT
rm = RegisterMetadata.get_register_metadata()
rm.declare_register("q0", 1, "Boolean")
rm.declare_register("q1", 1, "Boolean")
class BellProgram:
def __init__(self):
self.program_list = [Hadamard(["q0"]), CNOT(["q0", "q1"], [0, 0])]
def traverse(self, visitor, dagger_ctx=False, controllers_ctx=None):
for op in self.program_list:
op.traverse(visitor, dagger_ctx, controllers_ctx or {})
circuit = to_abstract_circuit(BellProgram())
print(circuit.num_qubits) # 2
print([gate.name for gate in circuit.gates]) # ['H', 'CNOT']
使用 YAML generated operation¶
pyqres compile
from pyqres.core.lowering import to_abstract_circuit
from pyqres.core.metadata import RegisterMetadata
from pyqres.generated import QECExampleGHZ
RegisterMetadata.get_register_metadata().declare_register("q", 4, "General")
op = QECExampleGHZ(["q"], [4])
circuit = to_abstract_circuit(op)
assert [gate.name for gate in circuit.gates] == ["H", "CNOT", "CNOT", "CNOT"]
进入 QEC-Compiler¶
from qec_compiler import QECCompiler
compilation = QECCompiler().compile(
circuit,
data_block_style="intermediate",
distance_data=3,
distance_factory=3,
)
print(compilation.operation_schedule.total_cycles)
下一步阅读¶
pyqres -> PySparQ -> QEC-Compiler 联合工作流:完整三项目工作流。
YAML DSL:YAML DSL 示例。
QEC 中间层 Primitive Contract:pyqres/QEC-Compiler 中间层 primitive contract。