量子位元#

量子计算的量子比特。

待办事项: 完成测量逻辑的实现。这应该包括POVM。 更新docstrings。*更新测试。

class sympy.physics.quantum.qubit.IntQubit(*args, **kwargs)[源代码]#

一种量子位ket,它将整数作为二进制数存储在量子位值中。

这个班和 Qubit 是:

  • 构造函数的形式。

  • qubit值被打印为其对应的整数,而不是原始的qubit值。qubit值的内部存储格式与 Qubit .

参数:

价值观 :int,元组

如果是单个参数,则是我们要用qubit值表示的整数。这个整数将用尽可能少的量子位来表示。如果一对整数和第二个值大于一,则第一个整数给出以二进制形式表示的整数,第二个整数给出要使用的量子位数。零和一的列表也被接受来生成逐位模式。

纳比特 :内景

表示量子位数的整数。此数字应与关键字一起传递 nqubits=N . 您可以使用它来避免Qubit样式的位元组的模糊性。请参阅下面的示例了解更多详细信息。

实例

为整数5创建一个量子位:

>>> from sympy.physics.quantum.qubit import IntQubit
>>> from sympy.physics.quantum.qubit import Qubit
>>> q = IntQubit(5)
>>> q
|5>

我们还可以创建一个 IntQubit 通过一个 Qubit 实例。

>>> q = IntQubit(Qubit('101'))
>>> q
|5>
>>> q.as_int()
5
>>> q.nqubits
3
>>> q.qubit_values
(1, 0, 1)

我们可以回到正常的量子位形式。

>>> Qubit(q)
|101>

请注意 IntQubit 也接受 Qubit -位的样式列表。所以,下面的代码产生量子比特3,而不是一个比特 1 .

>>> IntQubit(1, 1)
|3>

为避免歧义,请使用 nqubits 参数。建议使用此关键字,尤其是当您按变量提供值时。

>>> IntQubit(1, nqubits=1)
|1>
>>> a = 1
>>> IntQubit(a, nqubits=1)
|1>
class sympy.physics.quantum.qubit.IntQubitBra(*args, **kwargs)[源代码]#

一种量子位bra,它将整数作为二进制数存储在qubit值中。

class sympy.physics.quantum.qubit.Qubit(*args, **kwargs)[源代码]#

在计算(z)基础上的一种多量子比特ket。

我们使用最不重要的量子位在右边,所以 |00001> 在最低有效量子位中有1。

参数:

价值观 :列表,str

作为整数列表的qubit值( [0,0,0,1,1,] )或字符串('011')。

实例

用几种不同的方法创建一个量子位,并查看它们的属性:

>>> from sympy.physics.quantum.qubit import Qubit
>>> Qubit(0,0,0)
|000>
>>> q = Qubit('0101')
>>> q
|0101>
>>> q.nqubits
4
>>> len(q)
4
>>> q.dimension
4
>>> q.qubit_values
(0, 1, 0, 1)

我们可以翻转单个量子比特的值:

>>> q.flip(1)
|0111>

我们可以拿一把匕首去买一个胸罩:

>>> from sympy.physics.quantum.dagger import Dagger
>>> Dagger(q)
<0101|
>>> type(Dagger(q))
<class 'sympy.physics.quantum.qubit.QubitBra'>

内部产品按预期工作:

>>> ip = Dagger(q)*q
>>> ip
<0101|0101>
>>> ip.doit()
1
class sympy.physics.quantum.qubit.QubitBra(*args, **kwargs)[源代码]#

计算基(quz)多比特bra。

我们使用最不重要的量子位在右边,所以 |00001> 在最低有效量子位中有1。

参数:

价值观 :列表,str

作为整数列表的qubit值( [0,0,0,1,1,] )或字符串('011')。

参见

Qubit

使用量子位的例子

sympy.physics.quantum.qubit.matrix_to_density(mat)[源代码]#

通过求矩阵的特征向量和特征值来工作。我们知道我们可以分解rho,方法是:求和(EigenVal*| Eigenvect><Eigenvect |

sympy.physics.quantum.qubit.matrix_to_qubit(matrix)[源代码]#

从矩阵表达式转换。一个量子比特对象的总和。

参数:

矩阵 :矩阵,numpy.matrix公司, 稀疏稀疏

The matrix to build the Qubit representation of. This works with SymPy matrices, numpy matrices and scipy.sparse sparse matrices.

实例

表示一个状态,然后返回到它的量子位形式:

>>> from sympy.physics.quantum.qubit import matrix_to_qubit, Qubit
>>> from sympy.physics.quantum.represent import represent
>>> q = Qubit('01')
>>> matrix_to_qubit(represent(q))
|01>
sympy.physics.quantum.qubit.measure_all(qubit, format='sympy', normalize=True)[源代码]#

对所有量子位进行系综测量。

参数:

量子比特 :Qubit,添加

要测量的量子位。这可以是任何量子位,也可以是它们的线性组合。

格式 :结构

要使用的中间矩阵的格式。可能的值是('sypy','numpy','稀疏稀疏'). 当前只实现了“sympy”。

返回:

结果 :列表

由原始状态及其概率组成的列表。

实例

>>> from sympy.physics.quantum.qubit import Qubit, measure_all
>>> from sympy.physics.quantum.gate import H
>>> from sympy.physics.quantum.qapply import qapply
>>> c = H(0)*H(1)*Qubit('00')
>>> c
H(0)*H(1)*|00>
>>> q = qapply(c)
>>> measure_all(q)
[(|00>, 1/4), (|01>, 1/4), (|10>, 1/4), (|11>, 1/4)]
sympy.physics.quantum.qubit.measure_all_oneshot(qubit, format='sympy')[源代码]#

对所有量子位执行一次集成测量。

一次测量相当于对量子系统进行测量。这种测量不像集合测量那样返回概率,而是返回 one 可能的结果状态。返回的确切状态是通过根据集合概率随机选取一个状态来确定的。

参数:

量子比特 :量子比特

要测量的量子位。这可以是任何量子位,也可以是它们的线性组合。

格式 :结构

要使用的中间矩阵的格式。可能的值是('sypy','numpy','稀疏稀疏'). 当前只实现了“sympy”。

返回:

结果 :量子比特

测量时系统崩溃的量子位。

sympy.physics.quantum.qubit.measure_partial(qubit, bits, format='sympy', normalize=True)[源代码]#

对指定的量子位执行部分集成测量。

参数:

量子比特 :量子比特

要测量的量子位。这可以是任何量子位,也可以是它们的线性组合。

bits :元组

要测量的量子位。

格式 :结构

要使用的中间矩阵的格式。可能的值是('sypy','numpy','稀疏稀疏'). 当前只实现了“sympy”。

返回:

结果 :列表

由原始状态及其概率组成的列表。

实例

>>> from sympy.physics.quantum.qubit import Qubit, measure_partial
>>> from sympy.physics.quantum.gate import H
>>> from sympy.physics.quantum.qapply import qapply
>>> c = H(0)*H(1)*Qubit('00')
>>> c
H(0)*H(1)*|00>
>>> q = qapply(c)
>>> measure_partial(q, (0,))
[(sqrt(2)*|00>/2 + sqrt(2)*|10>/2, 1/2), (sqrt(2)*|01>/2 + sqrt(2)*|11>/2, 1/2)]
sympy.physics.quantum.qubit.measure_partial_oneshot(qubit, bits, format='sympy')[源代码]#

对指定的量子位执行部分一次性测量。

一次测量相当于对量子系统进行测量。这种测量不像集合测量那样返回概率,而是返回 one 可能的结果状态。返回的确切状态是通过根据集合概率随机选取一个状态来确定的。

参数:

量子比特 :量子比特

要测量的量子位。这可以是任何量子位,也可以是它们的线性组合。

bits :元组

要测量的量子位。

格式 :结构

要使用的中间矩阵的格式。可能的值是('sypy','numpy','稀疏稀疏'). 当前只实现了“sympy”。

返回:

结果 :量子比特

测量时系统崩溃的量子位。

sympy.physics.quantum.qubit.qubit_to_matrix(qubit, format='sympy')[源代码]#

将Qubit对象的Add/Mul转换为它的矩阵表示

这个函数与 matrix_to_qubit 它是 represent(qubit) .