janus.simulator

目录

janus.simulator#

量子电路模拟器模块。

模拟器#

StatevectorSimulator#

class janus.simulator.StatevectorSimulator(seed=None, precision='double')[源代码]#

基类:object

状态向量模拟器

使用完整状态向量进行精确模拟,适用于小规模量子电路(< 25 qubits)

Features:
  • 精确模拟(无采样误差)

  • 支持参数化电路

  • 支持初始状态设置

  • 支持部分测量

  • 支持期望值计算

示例

from janus.circuit import Circuit from janus.simulator import StatevectorSimulator

# 创建 Bell 态电路 qc = Circuit(2) qc.h(0) qc.cx(0, 1)

# 模拟 sim = StatevectorSimulator() result = sim.run(qc, shots=1000)

print(result.counts) # {'00': ~500, '11': ~500}

参数:
  • seed (Optional[Union[int, np.random.Generator]])

  • precision (str)

__init__(seed=None, precision='double')[源代码]#

初始化模拟器

参数:
  • seed (int | Generator | None) -- 随机数种子

  • precision (str) -- 精度 ('single' 或 'double')

property seed: int | Generator | None#

获取随机数种子

run(circuit, shots=1024, initial_state=None, parameter_binds=None, measure_qubits=None, return_statevector=True)[源代码]#

运行模拟

参数:
  • circuit -- 要模拟的电路

  • shots (int) -- 测量次数

  • initial_state (Statevector | ndarray | str | None) -- 初始状态(默认 |0...0⟩)

  • parameter_binds (Dict | None) -- 参数绑定字典

  • measure_qubits (List[int] | None) -- 要测量的量子比特(默认全部)

  • return_statevector (bool) -- 是否返回状态向量

返回:

模拟结果

返回类型:

SimulatorResult

run_batch(circuits, shots=1024, **kwargs)[源代码]#

批量运行多个电路

参数:
  • circuits (List) -- 电路列表

  • shots (int) -- 每个电路的测量次数

  • **kwargs -- 传递给 run() 的其他参数

返回:

结果列表

返回类型:

List[SimulatorResult]

statevector(circuit, initial_state=None, parameter_binds=None)[源代码]#

获取电路的最终状态向量(不进行测量)

参数:
  • circuit -- 要模拟的电路

  • initial_state (Statevector | ndarray | str | None) -- 初始状态

  • parameter_binds (Dict | None) -- 参数绑定

返回:

最终状态向量

返回类型:

Statevector

expectation_value(circuit, observable, qargs=None, initial_state=None, parameter_binds=None)[源代码]#

计算可观测量的期望值

参数:
  • circuit -- 量子电路

  • observable (ndarray) -- 可观测量矩阵

  • qargs (List[int] | None) -- 可观测量作用的量子比特

  • initial_state (Statevector | ndarray | str | None) -- 初始状态

  • parameter_binds (Dict | None) -- 参数绑定

返回:

期望值

返回类型:

complex

probabilities(circuit, qargs=None, initial_state=None, parameter_binds=None)[源代码]#

计算测量概率分布

参数:
  • circuit -- 量子电路

  • qargs (List[int] | None) -- 要测量的量子比特

  • initial_state (Statevector | ndarray | str | None) -- 初始状态

  • parameter_binds (Dict | None) -- 参数绑定

返回:

概率分布

返回类型:

np.ndarray

NoisySimulator#

class janus.simulator.NoisySimulator(noise_model=None, seed=None)[源代码]#

基类:object

噪声模拟器

使用密度矩阵进行带噪声的量子电路模拟

示例

from janus.simulator import NoisySimulator from janus.simulator.noise import NoiseModel, depolarizing_channel

# 创建噪声模型 noise_model = NoiseModel() noise_model.add_all_qubit_quantum_error(

depolarizing_channel(0.01), ['cx']

)

# 模拟 sim = NoisySimulator(noise_model) result = sim.run(circuit, shots=1000)

参数:
  • noise_model (Optional[NoiseModel])

  • seed (Optional[Union[int, np.random.Generator]])

__init__(noise_model=None, seed=None)[源代码]#

初始化噪声模拟器

参数:
property noise_model: NoiseModel | None#

获取噪声模型

run(circuit, shots=1024, initial_state=None, parameter_binds=None, measure_qubits=None)[源代码]#

运行噪声模拟

参数:
  • circuit -- 要模拟的电路

  • shots (int) -- 测量次数

  • initial_state (DensityMatrix | Statevector | ndarray | None) -- 初始状态

  • parameter_binds (Dict | None) -- 参数绑定

  • measure_qubits (List[int] | None) -- 要测量的量子比特

返回:

模拟结果

返回类型:

SimulatorResult

density_matrix(circuit, initial_state=None, parameter_binds=None)[源代码]#

获取电路的最终密度矩阵

参数:
返回:

最终密度矩阵

返回类型:

DensityMatrix

量子态#

Statevector#

class janus.simulator.Statevector(data, num_qubits=None)[源代码]#

基类:object

状态向量类

表示纯量子态 |ψ⟩,支持: - 从电路演化 - 测量采样 - 期望值计算 - 子系统操作

示例

# 创建 |00⟩ 态 sv = Statevector.from_label('00')

# 从电路创建 sv = Statevector.from_circuit(circuit)

# 测量 counts = sv.sample_counts(shots=1000)

参数:
  • data (Union[np.ndarray, List, 'Statevector'])

  • num_qubits (Optional[int])

__init__(data, num_qubits=None)[源代码]#

初始化状态向量

参数:
  • data (ndarray | List | Statevector) -- 状态向量数据,可以是数组、列表或另一个 Statevector

  • num_qubits (int | None) -- 量子比特数(可选,自动推断)

classmethod from_int(i, num_qubits)[源代码]#

从计算基态创建状态向量

参数:
  • i (int) -- 基态索引

  • num_qubits (int) -- 量子比特数

返回:

|i⟩ 态

返回类型:

Statevector

示例

sv = Statevector.from_int(0, 2) # |00⟩ sv = Statevector.from_int(3, 2) # |11⟩

classmethod from_label(label)[源代码]#

从标签创建状态向量

支持的标签: - '0', '1': 计算基态 - '+', '-': X 基态 - 'r', 'l': Y 基态

参数:

label (str) -- 状态标签字符串

返回:

对应的状态向量

返回类型:

Statevector

示例

sv = Statevector.from_label('00') # |00⟩ sv = Statevector.from_label('+0') # |+0⟩ = (|00⟩ + |10⟩)/√2

classmethod from_circuit(circuit)[源代码]#

从电路创建状态向量

参数:

circuit -- Janus Circuit 对象

返回:

电路作用后的状态向量

返回类型:

Statevector

property data: ndarray#

获取状态向量数据

property num_qubits: int#

获取量子比特数

property dim: int#

获取状态向量维度

seed(value=None)[源代码]#

设置随机数种子

参数:

value (int | Generator | None)

copy()[源代码]#

创建副本

返回类型:

Statevector

is_valid(atol=1e-10)[源代码]#

检查是否为有效的归一化状态向量

参数:

atol (float)

返回类型:

bool

normalize()[源代码]#

归一化状态向量

返回类型:

Statevector

evolve(operator, qargs=None)[源代码]#

通过算符演化状态向量

参数:
  • operator (ndarray) -- 酉矩阵

  • qargs (List[int] | None) -- 作用的量子比特索引列表

返回:

演化后的状态向量(原地修改)

返回类型:

Statevector

evolve_circuit(circuit)[源代码]#

通过电路演化状态向量

参数:

circuit -- Janus Circuit 对象

返回:

演化后的状态向量

返回类型:

Statevector

probabilities(qargs=None)[源代码]#

计算测量概率分布

参数:

qargs (List[int] | None) -- 要测量的量子比特索引,None 表示全部

返回:

概率分布数组

返回类型:

np.ndarray

probabilities_dict(qargs=None, decimals=None)[源代码]#

获取概率分布字典

参数:
  • qargs (List[int] | None) -- 要测量的量子比特索引

  • decimals (int | None) -- 小数位数

返回:

比特串到概率的映射

返回类型:

Dict[str, float]

sample_memory(shots, qargs=None)[源代码]#

采样测量结果(保留顺序)

参数:
  • shots (int) -- 采样次数

  • qargs (List[int] | None) -- 要测量的量子比特索引

返回:

测量结果数组,每个元素是比特串

返回类型:

np.ndarray

sample_counts(shots, qargs=None)[源代码]#

采样测量结果(返回计数)

参数:
  • shots (int) -- 采样次数

  • qargs (List[int] | None) -- 要测量的量子比特索引

返回:

测量计数

返回类型:

Counts

measure(qargs=None)[源代码]#

执行测量并返回结果和坍缩后的状态

参数:

qargs (List[int] | None) -- 要测量的量子比特索引

返回:

(测量结果, 坍缩后的状态)

返回类型:

Tuple[str, Statevector]

expectation_value(operator, qargs=None)[源代码]#

计算可观测量的期望值 ⟨ψ|O|ψ⟩

参数:
  • operator (ndarray) -- 可观测量矩阵

  • qargs (List[int] | None) -- 作用的量子比特索引

返回:

期望值

返回类型:

complex

tensor(other)[源代码]#

张量积 self ⊗ other

参数:

other (Statevector) -- 另一个状态向量

返回:

张量积状态

返回类型:

Statevector

inner(other)[源代码]#

内积 ⟨self|other⟩

参数:

other (Statevector) -- 另一个状态向量

返回:

内积值

返回类型:

complex

conjugate()[源代码]#

返回共轭状态向量

返回类型:

Statevector

equiv(other, atol=1e-10)[源代码]#

检查两个状态向量是否等价(忽略全局相位)

参数:
返回:

是否等价

返回类型:

bool

to_dict(decimals=None)[源代码]#

转换为字典表示

参数:

decimals (int | None) -- 小数位数

返回:

比特串到振幅的映射

返回类型:

Dict[str, complex]

draw(output='text', **kwargs)[源代码]#

绘制状态向量

参数:

output (str) -- 输出格式 ('text', 'latex')

返回:

状态向量的字符串表示

返回类型:

str

DensityMatrix#

class janus.simulator.DensityMatrix(data, num_qubits=None)[源代码]#

基类:object

密度矩阵类

表示混合量子态 ρ,支持: - 噪声信道演化 - 部分迹 - 保真度计算

示例

# 从纯态创建 dm = DensityMatrix.from_statevector(sv)

# 应用去极化噪声 dm = dm.apply_channel(depolarizing_channel(0.01), [0])

参数:
  • data (Union[np.ndarray, 'DensityMatrix'])

  • num_qubits (Optional[int])

__init__(data, num_qubits=None)[源代码]#

初始化密度矩阵

参数:
classmethod from_statevector(sv)[源代码]#

从纯态创建密度矩阵 ρ = |ψ⟩⟨ψ|

参数:

sv (Statevector | ndarray)

返回类型:

DensityMatrix

classmethod from_label(label)[源代码]#

从标签创建密度矩阵

参数:

label (str)

返回类型:

DensityMatrix

classmethod maximally_mixed(num_qubits)[源代码]#

创建最大混合态 ρ = I/d

参数:

num_qubits (int)

返回类型:

DensityMatrix

property data: ndarray#

获取密度矩阵数据

property num_qubits: int#

获取量子比特数

property dim: int#

获取维度

seed(value=None)[源代码]#

设置随机数种子

参数:

value (int | Generator | None)

copy()[源代码]#

创建副本

返回类型:

DensityMatrix

is_valid(atol=1e-10)[源代码]#

检查是否为有效密度矩阵

参数:

atol (float)

返回类型:

bool

trace()[源代码]#

计算迹

返回类型:

complex

purity()[源代码]#

计算纯度 Tr(ρ²)

返回类型:

float

is_pure(atol=1e-10)[源代码]#

检查是否为纯态

参数:

atol (float)

返回类型:

bool

evolve(operator, qargs=None)[源代码]#

酉演化 ρ → U ρ U†

参数:
  • operator (ndarray) -- 酉矩阵

  • qargs (List[int] | None) -- 作用的量子比特

返回:

演化后的密度矩阵

返回类型:

DensityMatrix

apply_channel(kraus_ops, qargs=None)[源代码]#

应用量子信道(Kraus 表示)

ρ → Σ_k K_k ρ K_k†

参数:
  • kraus_ops (List[ndarray]) -- Kraus 算符列表

  • qargs (List[int] | None) -- 作用的量子比特

返回:

演化后的密度矩阵

返回类型:

DensityMatrix

evolve_circuit(circuit)[源代码]#

通过电路演化密度矩阵

返回类型:

DensityMatrix

probabilities(qargs=None)[源代码]#

计算测量概率分布

参数:

qargs (List[int] | None)

返回类型:

ndarray

sample_counts(shots, qargs=None)[源代码]#

采样测量结果

参数:
返回类型:

Counts

expectation_value(operator, qargs=None)[源代码]#

计算期望值 Tr(ρO)

参数:
返回类型:

complex

partial_trace(qargs)[源代码]#

计算部分迹,保留指定量子比特

参数:

qargs (List[int]) -- 要保留的量子比特索引

返回:

约化密度矩阵

返回类型:

DensityMatrix

fidelity(other)[源代码]#

计算保真度

F(ρ, σ) = (Tr√(√ρ σ √ρ))² F(ρ, |ψ⟩) = ⟨ψ|ρ|ψ⟩

参数:

other (DensityMatrix | Statevector)

返回类型:

float

von_neumann_entropy()[源代码]#

计算冯诺依曼熵 S(ρ) = -Tr(ρ log ρ)

返回类型:

float

结果#

SimulatorResult#

class janus.simulator.SimulatorResult(counts=None, statevector=None, shots=0, metadata=None)[源代码]#

模拟器结果类

封装单次模拟运行的所有结果

参数:
counts#

测量计数

statevector#

最终状态向量(可选)

probabilities#

概率分布

shots#

测量次数

metadata#

额外元数据

__init__(counts=None, statevector=None, shots=0, metadata=None)[源代码]#
参数:
property counts: Counts#

获取测量计数

property statevector: ndarray | None#

获取最终状态向量

property shots: int#

获取测量次数

property metadata: Dict#

获取元数据

property probabilities: ndarray#

获取概率分布

get_counts(threshold=0.0)[源代码]#

获取测量计数,可选过滤低于阈值的结果

参数:

threshold (float) -- 概率阈值,低于此值的结果将被过滤

返回类型:

Counts

get_statevector()[源代码]#

获取状态向量的副本

返回类型:

ndarray | None

get_probabilities(decimals=None)[源代码]#

获取概率分布字典

参数:

decimals (int | None) -- 小数位数,None 表示不舍入

返回类型:

Dict[str, float]

expectation_value(observable)[源代码]#

计算可观测量的期望值

参数:

observable (ndarray) -- 可观测量矩阵(厄米矩阵)

返回:

期望值 <ψ|O|ψ>

返回类型:

complex

Counts#

class janus.simulator.Counts(data=None)[源代码]#

测量计数类

继承自 Counter,提供额外的量子计算相关方法

示例

counts = Counts({'00': 512, '11': 488}) print(counts.most_frequent()) # '00' print(counts.int_outcomes()) # {0: 512, 3: 488}

参数:

data (Dict[str, int] | None)

__init__(data=None)[源代码]#

Create a new, empty Counter object. And if given, count elements from an input iterable. Or, initialize the count from another mapping of elements to their counts.

>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'a': 4, 'b': 2})           # a new counter from a mapping
>>> c = Counter(a=4, b=2)                   # a new counter from keyword args
参数:

data (Dict[str, int] | None)

most_frequent()[源代码]#

返回出现次数最多的测量结果

返回类型:

str

int_outcomes()[源代码]#

将二进制字符串结果转换为整数

返回类型:

Dict[int, int]

hex_outcomes()[源代码]#

将二进制字符串结果转换为十六进制

返回类型:

Dict[str, int]

total_shots()[源代码]#

返回总测量次数

返回类型:

int

probabilities()[源代码]#

返回概率分布

返回类型:

Dict[str, float]

marginal(indices)[源代码]#

边缘化到指定的比特位置

参数:

indices (List[int]) -- 要保留的比特索引列表(从右到左,0 是最低位)

返回:

边缘化后的计数

返回类型:

Counts

噪声#

NoiseModel#

class janus.simulator.NoiseModel[源代码]#

噪声模型

定义电路中各种门的噪声

示例

noise_model = NoiseModel() noise_model.add_all_qubit_quantum_error(

depolarizing_channel(0.01), ['cx']

) noise_model.add_readout_error(0.02, 0.03)

__init__()[源代码]#
add_quantum_error(error, gate_names, qubits=None)[源代码]#

添加量子错误

参数:
  • error (NoiseChannel) -- 噪声信道

  • gate_names (List[str]) -- 门名称列表

  • qubits (List[int] | None) -- 特定量子比特(None 表示所有)

add_all_qubit_quantum_error(error, gate_names)[源代码]#

为所有量子比特添加量子错误

参数:
add_readout_error(p0_given_1, p1_given_0, qubits=None)[源代码]#

添加读出错误

参数:
  • p0_given_1 (float) -- 测量 |1⟩ 得到 0 的概率

  • p1_given_0 (float) -- 测量 |0⟩ 得到 1 的概率

  • qubits (List[int] | None) -- 特定量子比特(None 表示所有)

get_gate_error(gate_name, qubits)[源代码]#

获取门的噪声信道

参数:
返回类型:

NoiseChannel | None

get_readout_error(qubit)[源代码]#

获取读出错误

参数:

qubit (int)

返回类型:

Tuple[float, float] | None

NoiseChannel#

class janus.simulator.NoiseChannel(kraus_ops, num_qubits=1)[源代码]#

噪声信道基类

使用 Kraus 表示:ρ → Σ_k K_k ρ K_k†

参数:
  • kraus_ops (List[np.ndarray])

  • num_qubits (int)

__init__(kraus_ops, num_qubits=1)[源代码]#

初始化噪声信道

参数:
  • kraus_ops (List[ndarray]) -- Kraus 算符列表

  • num_qubits (int) -- 作用的量子比特数

property kraus_ops: List[ndarray]#

获取 Kraus 算符

property num_qubits: int#

获取量子比特数

compose(other)[源代码]#

组合两个噪声信道

参数:

other (NoiseChannel)

返回类型:

NoiseChannel

tensor(other)[源代码]#

张量积两个噪声信道

参数:

other (NoiseChannel)

返回类型:

NoiseChannel

噪声信道函数#

janus.simulator.depolarizing_channel(p, num_qubits=1)[源代码]#

去极化信道

ρ → (1-p)ρ + p/3 (XρX + YρY + ZρZ) (单比特) ρ → (1-p)ρ + p/(4^n-1) Σ_P PρP (多比特)

参数:
  • p (float) -- 去极化概率

  • num_qubits (int) -- 量子比特数

返回:

去极化信道

返回类型:

NoiseChannel

janus.simulator.amplitude_damping_channel(gamma)[源代码]#

振幅阻尼信道(能量弛豫)

模拟 |1⟩ → |0⟩ 的自发衰减

参数:

gamma (float) -- 衰减概率

返回:

振幅阻尼信道

返回类型:

NoiseChannel

janus.simulator.phase_damping_channel(gamma)[源代码]#

相位阻尼信道(纯退相干)

参数:

gamma (float) -- 退相干概率

返回:

相位阻尼信道

返回类型:

NoiseChannel

janus.simulator.bit_flip_channel(p)[源代码]#

比特翻转信道

ρ → (1-p)ρ + p XρX

参数:

p (float) -- 翻转概率

返回:

比特翻转信道

返回类型:

NoiseChannel

janus.simulator.phase_flip_channel(p)[源代码]#

相位翻转信道

ρ → (1-p)ρ + p ZρZ

参数:

p (float) -- 翻转概率

返回:

相位翻转信道

返回类型:

NoiseChannel

janus.simulator.thermal_relaxation_channel(t1, t2, time, excited_state_population=0.0)[源代码]#

热弛豫信道

结合 T1(能量弛豫)和 T2(退相干)效应

参数:
  • t1 (float) -- T1 时间

  • t2 (float) -- T2 时间

  • time (float) -- 门操作时间

  • excited_state_population (float) -- 热平衡时激发态布居

返回:

热弛豫信道

返回类型:

NoiseChannel

janus.simulator.readout_error_channel(p0_given_1, p1_given_0)[源代码]#

读出错误(经典噪声)

返回混淆矩阵,用于后处理测量结果

参数:
  • p0_given_1 (float) -- 测量 |1⟩ 得到 0 的概率

  • p1_given_0 (float) -- 测量 |0⟩ 得到 1 的概率

返回:

(混淆矩阵, 逆混淆矩阵)

返回类型:

Tuple[np.ndarray, np.ndarray]

异常#

exception janus.simulator.SimulatorError[源代码]#

模拟器基础异常

exception janus.simulator.InvalidStateError[源代码]#

无效量子态异常

exception janus.simulator.InvalidCircuitError[源代码]#

无效电路异常

exception janus.simulator.ParameterBindingError[源代码]#

参数绑定异常