cuquantum.CircuitToEinsum

class cuquantum.CircuitToEinsum(circuit, dtype='complex128', backend='cupy')[源代码]

创建一个转换器对象,该对象可以为给定的电路生成爱因斯坦求和表达式和张量操作数。

支持的电路类型包括 cirq.Circuitqiskit.QuantumCircuit。输入电路必须是完全参数化的,并且不能包含在张量网络模拟中未明确定义的操作,例如,重置量子态或执行任何中间测量。

参数
  • circuit – 完全参数化的 cirq.Circuitqiskit.QuantumCircuit 对象。

  • dtype – 输出张量操作数的数据类型。如果未指定,则使用双精度复数。

  • backend – 输出张量操作数的后端。如果未指定,则使用 cupy

注意

  • 对于 qiskit.QuantumCircuit,复合门将被分解为 Qiskit 标准门或自定义酉门。

示例

使用 Qiskit 的示例

>>> import qiskit.circuit.random
>>> from cuquantum import contract, CircuitToEinsum

生成随机量子电路

>>> qc = qiskit.circuit.random.random_circuit(num_qubits=8, depth=7)

创建 CircuitToEinsum 对象

>>> converter = CircuitToEinsum(qc, backend='cupy')

查找状态向量的爱因斯坦求和表达式和张量操作数

>>> expression, operands = converter.state_vector()

收缩以上方程以计算状态向量

>>> sv = contract(expression, *operands)
>>> print(sv.shape)
(2, 2, 2, 2, 2, 2, 2, 2)

查找用于计算位串 00000000 的概率幅度的爱因斯坦求和表达式和张量操作数

>>> expression, operands = converter.amplitude('00000000')

收缩以上方程以计算幅度

>>> amplitude = contract(expression, *operands)

查找用于计算前两个量子比特上的约化密度矩阵的爱因斯坦求和表达式和张量操作数,条件是最后一个量子比特固定在状态 1

>>> where = qc.qubits[:2]
>>> fixed = {qc.qubits[-1]: '1'}
>>> expression, operands = converter.reduced_density_matrix(where, fixed=fixed)

收缩以上方程以计算约化密度矩阵

>>> rdm = contract(expression, *operands)
>>> print(rdm.shape)
(2, 2, 2, 2)

方法

__init__(circuit, dtype='complex128', backend='cupy')[源代码]
amplitude(bitstring)[源代码]

生成爱因斯坦求和表达式和张量操作数,以计算输入电路的位串的概率幅度。

参数

bitstring – 指定所需测量状态的 0/1 序列。位串的顺序应与 CircuitToEinsum.qubits 一致。对于 cirq.Circuit,此顺序对应于电路中按升序排序的所有量子比特。对于 qiskit.QuantumCircuit,此顺序与 qiskit.QuantumCircuit.qubits 相同。

返回

爱因斯坦求和表达式和张量操作数列表

batched_amplitudes(fixed)[源代码]

生成爱因斯坦求和表达式和张量操作数,以计算输入电路的一批位串幅度。

参数

fixed – 一个字典,将某些量子比特映射到相应的固定状态 0 或 1。

返回

爱因斯坦求和表达式和张量操作数列表。输出模式标签的顺序与 CircuitToEinsum.qubits 一致。对于 cirq.Circuit,此顺序对应于电路中按升序排序的所有量子比特。对于 qiskit.QuantumCircuit,此顺序与 qiskit.QuantumCircuit.qubits 相同。

expectation(pauli_string, lightcone=True)[源代码]

生成爱因斯坦求和表达式和张量操作数,以计算输入电路的泡利串的期望值。

酉逆光锥消除是指当两者之间不存在其他算符时,移除由酉门(来自右矢态)及其逆(来自左矢态)形成的恒等式。人们可以利用此技术,通过仅包括因果门(位于光锥中的门)来减小有效网络大小。

参数
  • pauli_string

    用于期望值计算的泡利串。它可以是

    • 字符 'I'/'X'/'Y'/'Z' 的序列。长度必须等于量子比特的数量。

    • 一个字典,将选定的量子比特映射到泡利字符。未指定的量子比特假定应用恒等算符 'I'

  • lightcone – 是否应用酉逆光锥消除技术来减少期望值计算中张量的数量。

返回

爱因斯坦求和表达式和张量操作数列表。

注意

lightcone=True 时,恒等泡利算符将在输出操作数中省略。然后,基于剩余的因果量子比特应用酉逆光锥消除技术,以进一步减小网络的大小。减少效果取决于电路拓扑和输入泡利串(因此,收缩路径不能重用于不同泡利串的收缩)。当 lightcone=False 时,恒等泡利算符将保留在输出操作数中,以便输出张量网络对于不同的泡利串具有相同的拓扑结构,并且收缩路径仅需要计算一次,并且可以重用于所有泡利串。

另请参阅

酉逆光锥消除

reduced_density_matrix(where, fixed=None, lightcone=True)[源代码]

生成爱因斯坦求和表达式和张量操作数,以计算输入电路的约化密度矩阵。

酉逆光锥消除是指当两者之间不存在其他算符时,移除由酉门(来自右矢态)及其逆(来自左矢态)形成的恒等式。人们可以利用此技术,通过仅包括因果门(位于光锥中的门)来减小有效网络大小。

参数
  • where – 指定密度矩阵约化到其上的量子比特序列。

  • fixed – 可选,一个字典,将某些量子比特映射到相应的固定状态 0 或 1。

  • lightcone – 是否应用酉逆光锥消除技术来减少密度矩阵计算中张量的数量。

返回

爱因斯坦求和表达式和张量操作数列表。表达式输出的模式标签的顺序与 where 参数相同。例如,如果 where = (\(a, b\)),则约化密度矩阵的模式标签将为 (\(a, b, a^{\prime}, b^{\prime}\))

另请参阅

酉逆光锥消除

state_vector()[源代码]

生成爱因斯坦求和表达式和张量操作数,以计算输入电路的状态向量。

返回

爱因斯坦求和表达式和张量操作数列表。输出模式标签的顺序与 CircuitToEinsum.qubits 一致。对于 cirq.Circuit,此顺序对应于电路中按升序排序的所有量子比特。对于 qiskit.QuantumCircuit,此顺序与 qiskit.QuantumCircuit.qubits 相同。

属性

gates

表示电路中所有门的 2 元组 (gate_operand, qubits) 序列

返回

  • gate_operand: 类似 ndarray 的张量对象。操作数的模式按 AB...ab... 排序,其中 AB... 表示所有输出模式,ab... 表示所有输入模式。

  • qubits: 对应于所有量子比特和门张量操作数的数组列表。

返回类型

tuple

qubits

电路中所有量子比特的序列。