[ PROMPT_NODE_26306 ]
transformation
[ SKILL_DOCUMENTATION ]
# 电路转换
本指南涵盖使用 Cirq 的转换框架进行电路优化、编译和操作。
## 转换器框架
### 基础转换器
python
import cirq
# 示例电路
qubits = cirq.LineQubit.range(3)
circuit = cirq.Circuit(
cirq.H(qubits[0]),
cirq.CNOT(qubits[0], qubits[1]),
cirq.CNOT(qubits[1], qubits[2])
)
# 应用内置转换器
from cirq.transformers import optimize_for_target_gateset
# 针对特定门集进行优化
optimized = optimize_for_target_gateset(
circuit,
gateset=cirq.SqrtIswapTargetGateset()
)
### 合并单量子比特门
python
from cirq.transformers import merge_single_qubit_gates_to_phxz
# 包含多个单量子比特门的电路
circuit = cirq.Circuit(
cirq.H(q),
cirq.T(q),
cirq.S(q),
cirq.H(q)
)
# 合并为单个操作
merged = merge_single_qubit_gates_to_phxz(circuit)
### 丢弃可忽略的操作
python
from cirq.transformers import drop_negligible_operations
# 移除低于阈值的门
circuit_with_small_rotations = cirq.Circuit(
cirq.rz(1e-10)(q), # 非常小的旋转
cirq.H(q)
)
cleaned = drop_negligible_operations(circuit_with_small_rotations, atol=1e-8)
## 自定义转换器
### 转换器装饰器
python
from cirq.transformers import transformer_api
@transformer_api.transformer
def remove_z_gates(circuit: cirq.Circuit) -> cirq.Circuit:
"""从电路中移除所有 Z 门。"""
new_moments = []
for moment in circuit:
new_ops = [op for op in moment if not isinstance(op.gate, cirq.ZPowGate)]
if new_ops:
new_moments.append(cirq.Moment(new_ops))
return cirq.Circuit(new_moments)
# 使用自定义转换器
transformed = remove_z_gates(circuit)
### 转换器类
python
from cirq.transformers import transformer_primitives
class HToRyTransformer(transformer_primitives.Transformer):
"""将 H 门替换为 Ry(π/2)。"""
def __call__(self, circuit: cirq.Circuit, *, context=None) -> cirq.Circuit:
def map_op(op: cirq.Operation, _) -> cirq.OP_TREE:
if isinstance(op.gate, cirq.HPowGate):
return cirq.ry(np.pi/2)(op.qubits[0])
return op
return transformer_primitives.map_operations(
circuit,
map_op,
deep=True
).unfreeze(copy=False)
# 应用转换器
transformer = HToRyTransformer()
result = transformer(circuit)
## 门退相干