Skip to content

量子门

pyqpanda3 中所有量子门函数的 API 参考。每个门函数返回一个 QGate 对象,可组合到 QCircuitQProg 结构中。

QGate 类

QGate 是所有门工厂函数返回的基础类型。

签名

python
class QGate

方法

方法签名说明
qubits_numqubits_num() -> int门作用的量子比特数
qubitsqubits() -> list[int]门作用的所有量子比特索引
control_qubitscontrol_qubits() -> list[int]控制量子比特索引
target_qubitstarget_qubits() -> list[int]目标量子比特索引
daggerdagger() -> QGate返回门的 dagger(共轭转置)
is_daggeris_dagger() -> bool门是否处于 dagger 形式
powerpower(k: float) -> QGate将门提升到幂次
clear_controlclear_control() -> None移除所有控制量子比特
controlcontrol(qubit: int) -> QGate添加单个控制量子比特,返回受控门
controlcontrol(qubits: list[int]) -> QGate添加多个控制量子比特,返回受控门
matrixmatrix(expanded: bool = False) -> numpy.ndarray幺正矩阵表示;若 expanded 为 True,扩展至完整系统大小
gate_typegate_type() -> GateType标识门类型的枚举值
remapremap(qubit_map: dict[int, int]) -> QGate使用映射字典重索引量子比特
remapremap(qubit_list: list[int]) -> QGate使用有序列表重索引量子比特
parametersparameters() -> list[float]门参数
set_parametersset_parameters(params: list[float]) -> None设置门参数
namename() -> str门名称字符串

单量子比特门

H — Hadamard 门

python
H(qubit: int) -> QGate

应用 Hadamard 门,创建等概率叠加态。

H=12[1111]
python
from pyqpanda3.core import H, CPUQVM, QProg, measure

qvm = CPUQVM()
prog = QProg()
prog << H(0)
prog << measure(0, 0)
qvm.run(prog, 1000)
result = qvm.result()
print(result.get_counts())

X — 泡利-X(NOT)

python
X(qubit: int) -> QGate

比特翻转(NOT)门。

X=[0110]

Y — 泡利-Y

python
Y(qubit: int) -> QGate
Y=[0ii0]

Z — 泡利-Z

python
Z(qubit: int) -> QGate

相位翻转门。

Z=[1001]

I — 恒等门

python
I(qubit: int) -> QGate

恒等门(无操作)。

I=[1001]

S — 相位门

python
S(qubit: int) -> QGate
S=[100i]

T — T 门(π/8 门)

python
T(qubit: int) -> QGate
T=[100eiπ/4]

X1 — SX 门

python
X1(qubit: int) -> QGate
X1=12[1ii1]

Y1

python
Y1(qubit: int) -> QGate
Y1=12[1111]

Z1

python
Z1(qubit: int) -> QGate

P — 相位门(参数化)

python
P(qubit: int, theta: float) -> QGate
参数类型说明
qubitint目标量子比特索引
thetafloat旋转角度(弧度)
P(θ)=[100eiθ]

RX — 绕 X 轴旋转

python
RX(qubit: int, theta: float) -> QGate
参数类型说明
qubitint目标量子比特索引
thetafloat旋转角度(弧度)
RX(θ)=eiθX/2=[cos(θ/2)isin(θ/2)isin(θ/2)cos(θ/2)]

RY — 绕 Y 轴旋转

python
RY(qubit: int, theta: float) -> QGate
RY(θ)=eiθY/2=[cos(θ/2)sin(θ/2)sin(θ/2)cos(θ/2)]

RZ — 绕 Z 轴旋转

python
RZ(qubit: int, theta: float) -> QGate
RZ(θ)=eiθZ/2=[eiθ/200eiθ/2]

RPHI — R-Phi 门

python
RPHI(control: int, theta: float, phi: float) -> QGate

注意: RPhiRPHI 的别名,两者功能完全相同。

参数类型说明
controlint目标量子比特索引
thetafloat旋转角度
phifloat相位角度

U1

python
U1(qubit: int, theta: float) -> QGate

单参数门,等价于 P(θ)

U2

python
U2(qubit: int, theta: float, phi: float) -> QGate
参数类型说明
qubitint目标量子比特索引
thetafloat第一个角度参数
phifloat第二个角度参数

U3

python
U3(qubit: int, theta: float, phi: float, lambda: float) -> QGate
参数类型说明
qubitint目标量子比特索引
thetafloat旋转角度
phifloat第一个相位
lambdafloat第二个相位
U3(θ,ϕ,λ)=[cos(θ/2)eiλsin(θ/2)eiϕsin(θ/2)ei(ϕ+λ)cos(θ/2)]

U4

python
U4(qubit: int, theta: float, phi: float, lambda: float, gamma: float) -> QGate
参数类型说明
qubitint目标量子比特索引
thetafloat第一个角度
phifloat第二个角度
lambdafloat第三个角度
gammafloat第四个角度

IDLE

python
IDLE(qubit: int, nanoseconds: float) -> QGate
参数类型说明
qubitint目标量子比特索引
nanosecondsfloat延迟持续时间(纳秒)

双量子比特门

CNOT — 受控非门

python
CNOT(qubit1: int, qubit2: int) -> QGate
参数类型说明
qubit1int控制量子比特索引
qubit2int目标量子比特索引
CNOT=[1000010000010010]
python
from pyqpanda3.core import H, CNOT, CPUQVM, QProg, measure

qvm = CPUQVM()
prog = QProg()
# 创建 Bell 态
prog << H(0) << CNOT(0, 1)
prog << measure(0, 0) << measure(1, 1)
qvm.run(prog, 1000)
print(qvm.result().get_counts())

CZ — 受控-Z 门

python
CZ(qubit1: int, qubit2: int) -> QGate
CZ=[1000010000100001]

CP — 受控相位门

python
CP(control: int, target: int, theta: float) -> QGate
参数类型说明
controlint控制量子比特索引
targetint目标量子比特索引
thetafloat相位角度(弧度)
CP(θ)=[100001000010000eiθ]

CR — 受控旋转(CP 的别名)

python
CR(control: int, target: int, theta: float) -> QGate

等价于 CP

CRX — 受控 RX 门

python
CRX(control: int, target: int, theta: float) -> QGate

CRY — 受控 RY 门

python
CRY(control: int, target: int, theta: float) -> QGate

CRZ — 受控 RZ 门

python
CRZ(control: int, target: int, theta: float) -> QGate

SWAP

python
SWAP(qubit1: int, qubit2: int) -> QGate
SWAP=[1000001001000001]

ISWAP

python
ISWAP(qubit1: int, qubit2: int) -> QGate
iSWAP=[100000i00i000001]

SQISWAP — 平方根 iSWAP 门

python
SQISWAP(qubit1: int, qubit2: int) -> QGate

ECHO

python
ECHO(qubit: int, param: float = 0.0) -> QGate
参数类型说明
qubitint目标量子比特索引
paramfloat回波参数(默认 0.0)

CU — 受控 U 门

python
CU(control: int, target: int, theta: float, phi: float, lambda: float, gamma: float) -> QGate
参数类型说明
controlint控制量子比特索引
targetint目标量子比特索引
thetafloat旋转角度
phifloat第一个相位
lambdafloat第二个相位
gammafloat第三个相位

RXX — 绕 XX 旋转

python
RXX(control: int, target: int, theta: float) -> QGate
RXX(θ)=eiθXX/2

RYY — 绕 YY 旋转

python
RYY(control: int, target: int, theta: float) -> QGate
RYY(θ)=eiθYY/2

RZZ — 绕 ZZ 旋转

python
RZZ(control: int, target: int, theta: float) -> QGate
RZZ(θ)=eiθZZ/2

RZX — 绕 ZX 旋转

python
RZX(control: int, target: int, theta: float) -> QGate
RZX(θ)=eiθZX/2

多量子比特门

TOFFOLI — CCX(受控-受控-非门)

python
TOFFOLI(qubit1: int, qubit2: int, qubit3: int) -> QGate
参数类型说明
qubit1int第一个控制量子比特
qubit2int第二个控制量子比特
qubit3int目标量子比特

当且仅当两个控制量子比特都为 |1 时翻转目标量子比特。

特殊门

BARRIER

python
BARRIER(qubits: list[int]) -> QGate
参数类型说明
qubitslist[int]要施加屏障的量子比特索引

在转译期间阻止跨屏障的优化。

MS — Molmer-Sorensen 门

python
MS(qubit1: int, qubit2: int) -> QGate

用于囚禁离子量子计算的双量子比特纠缠门。

Oracle

python
Oracle(qubits: list[int], matrix: numpy.ndarray) -> QGate
参数类型说明
qubitslist[int]Oracle 作用的量子比特索引
matrixnumpy.ndarray复数幺正矩阵

从给定的幺正矩阵创建自定义门。

python
import numpy as np
from pyqpanda3.core import Oracle

# 从幺正矩阵创建 2 量子比特 oracle
mat = np.eye(4, dtype=complex)
gate = Oracle([0, 1], mat)

门操作

所有 QGate 对象支持以下操作:

Dagger(共轭转置)

python
gate = H(0)
dg = gate.dagger()  # 厄米共轭

Control(控制)

python
gate = X(1)
cgate = gate.control([0])  # 以量子比特 0 为控制的 CNOT

Power(幂)

python
gate = S(0)
t_gate = gate.power(2)  # S^2 = Z

另见


create_gate

通过指定名称、目标量子比特和参数来创建量子门。这是一个通用工厂函数,可以动态构造任何支持的门类型。

签名

python
create_gate(gate_name: str, qubits: list[int], params: list[float]) -> QGate

参数

参数类型说明
gate_namestr要创建的门名称(如 "H""RX""CNOT"
qubitslist[int]目标量子比特索引列表
paramslist[float]参数值列表(非参数化门传空列表)

示例

python
from pyqpanda3.core import create_gate

# 在量子比特 0 上创建 Hadamard 门
h = create_gate("H", [0], [])

# 在量子比特 1 上创建角度为 1.57 的 RX 旋转门
rx = create_gate("RX", [1], [1.57])

# 创建 CNOT 门,控制=0,目标=1
cnot = create_gate("CNOT", [0, 1], [])

Released under the MIT License.