mindquantum.core.operators

MindQuantum算子库。算子由一个或多个基本门的组合而成。

包含以下类的表示: - Qubit算子 - Fermion算子 - 时间演化算子

class mindquantum.core.operators.FermionOperator(term=None, coefficient=1.0)[源代码]

费米子算子,如FermionOperator(‘4^ 3 9 3^’)表示 \(a_4^\dagger a_3 a_9 a_3^\dagger\)。 这些是描述费米子系统的基本运算符,如分子系统。 FermionOperator遵循反交换关系。

参数:
  • terms (str) - 费米子算符的输入项。默认值:None。

  • coefficient (Union[numbers.Number, str, ParameterResolver]) - 单费米子算符的系数。默认值:1.0。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> a_p_dagger = FermionOperator('1^')
>>> a_p_dagger
1.0 [1^]
>>> a_q = FermionOperator('0')
>>> a_q
1.0 [0]
>>> zero = FermionOperator()
>>> zero
0
>>> identity= FermionOperator('')
>>> identity
1.0 []
>>> para_op = FermionOperator('0 1^', 'x')
>>> para_op
x [0 1^]
>>> para_dt = {'x':2}
>>> op = para_op.subs(para_dt)
>>> op
2 [0 1^]
dumps(indent: int = 4)[源代码]

将FermionOperator转储到JSON(JavaScript对象表示法)。

参数:
  • indent (int) - JSON数组元素和对象成员打印时的缩进大小。默认值:4。

返回:

JSON(str),FermionOperator的JSON字符串。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> f = FermionOperator('0', 1 + 2j) + FermionOperator('0^', 'a')
>>> len(f.dumps())
443
static from_openfermion(of_ops, dtype=None)[源代码]

将openfermion格式的费米子运算符转换为mindquantum格式。

参数:
  • of_ops (openfermion.FermionOperator) - openfermion中的费米子算符。

  • dtype (type) - 要生成的TermsOperator的类型(即实数“float”或复数“complex”)。 注意:此参数在 Python 版本的 QubitOperator 中被忽略。

返回:

FermionOperator,mindquantum中的费米子算符。

hermitian()[源代码]

返回费米子运算符的厄米共轭。

property imag

获得系数的虚部。

返回:

FermionOperator,这个FermionOperator的虚部。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> f = FermionOperator('0', 1 + 2j) + FermionOperator('0^', 'a')
>>> f.imag.compress()
2.0 [0]
static loads(strs: str, dtype: type)[源代码]

将JSON(JavaScript对象表示法)加载到FermionOperator中。

参数:
  • strs (str) - 转储的费米子运算符字符串。

  • dtype (type) - 生成的TermsOperator的类型.

返回:

FermionOperator,从字符串加载的FermionOperator。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> f = FermionOperator('0', 1 + 2j) + FermionOperator('0^', 'a')
>>> obj = FermionOperator.loads(f.dumps())
>>> obj == f
True
matrix(n_qubits: int = None)[源代码]

将此费米子运算符转换为jordan_wigner映射下的csr_matrix。

参数:
  • n_qubits (int) - 结果矩阵的总量子比特数。如果是None,则该值将是最大局域量子比特数。默认值:None。

normal_ordered()[源代码]

返回FermionOperator的规范有序形式。

返回:

FermionOperator,规范有序的FermionOperator。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> origin = FermionOperator('0 1^')
>>> origin
1.0 [0 1^]
>>> origin.normal_ordered()
-1.0 [1^ 0]
property real

获得系数的实部。

返回:

FermionOperator,这个FermionOperator的实部。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> f = FermionOperator('0', 1 + 2j) + FermionOperator('0^', 'a')
>>> f.real.compress()
1.0 [0] +
a [0^]
split()[源代码]

将算符的系数跟算符本身分开。

返回:

List[List[ParameterResolver, FermionOperator]],分裂后的结果。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> a = FermionOperator('0', 'a') + FermionOperator('1^', 1.2)
>>> list(a.split())
[[{'a': 1}, const: 0, 1 [0] ], [{}, const: 1.2, 1 [1^] ]]
to_openfermion()[源代码]

将费米子运算符转换为openfermion格式。

class mindquantum.core.operators.Hamiltonian(hamiltonian)[源代码]

QubitOperator哈密顿量的包装器。

参数:
  • hamiltonian (QubitOperator) - 泡利量子比特算子。

样例:

>>> from mindquantum.core.operators import QubitOperator, Hamiltonian
>>> ham = Hamiltonian(QubitOperator('Z0 Y1', 0.3))
>>> ham
3/10 [Z0 Y1]
get_cpp_obj(hermitian=False)[源代码]

获得cpp对象。

参数:
  • hermitian (bool) - 返回的cpp对象是否是原始哈密顿量的厄米共轭。

sparse(n_qubits=1)[源代码]

在后台计算哈密顿量的稀疏矩阵。

参数:
  • n_qubits (int) - 哈密顿量的总量子比特数,仅在模式为’frontend’时需要。默认值:1。

class mindquantum.core.operators.InteractionOperator(constant, one_body_tensor, two_body_tensor)[源代码]

存储用于配置费米子分子哈密顿量的“交互算子”的类。哈密顿量包括存储了自旋和奇偶性的单体项和双体项。在这个模块中,存储的系数可以通过费米子算子表示为分子的哈密顿量。

说明

此类中存储的运算符具有以下形式:

\[C + \sum_{p, q} h_{[p, q]} a^\dagger_p a_q + \sum_{p, q, r, s} h_{[p, q, r, s]} a^\dagger_p a^\dagger_q a_r a_s.\]

其中 \(C\) 是一个常数。

参数:
  • constant (numbers.Number) - 算子中的常量项,以浮点数形式给出。例如,核排斥能量。

  • one_body_tensor (numpy.ndarray) - 单体项的系数(h[p,q])。这是一个 \(n_\text{qubits}\times n_\text{qubits}\) 的NumPy浮点数组。默认情况下,存储带有键值的NumPy数组 \(a^\dagger_p a_q\) (1,0)。

  • two_body_tensor (numpy.ndarray) - 双体项的系数 (h[p, q, r, s]) 。这是一个 \(n_\text{qubits}\times n_\text{qubits}\times n_\text{qubits}\times n_\text{qubits}\) 的NumPy浮点数组。默认情况下,存储带有键值的NumPy数组 \(a^\dagger_p a^\dagger_q a_r a_s\) (1, 1, 0, 0)。

unique_iter(complex_valued=False)[源代码]

迭代不在同一对称组中的所有项。

四点对称:

  1. pq = qp。

  2. pqrs = srqp = qpsr = rspq。

八点对称(当complex_valued为False时):

  1. pq = qp。

  2. pqrs = rqps = psrq = srqp = qpsr = rspq = spqr = qrsp。

参数:
  • complex_valued (bool) - 算子是否有复数系数。默认值:False。

class mindquantum.core.operators.PolynomialTensor(n_body_tensors=None)[源代码]

以张量形式存储费米梯算子系数的类。 例如,在粒子数守恒的分子哈密顿量(4级多项式)中,只有三种项,即常数项、 单激励 \(a^\dagger_p a_q\) 和双激励项 \(a^\dagger_p a^\dagger_q a_r a_s\),它们对应的系数可以存储在标量、 \(n_\text{qubits}\times n_\text{qubits}\) 矩阵和 \(n_\text{qubits}\times n_\text{qubits}\times n_\text{qubits}\times n_\text{qubits}\) 矩阵中。 请注意,由于奇偶性守恒,每个张量必须具有偶数维数。 这个类的大部分功能与FermionOperator的功能相似。

参数:
  • n_body_tensors (dict) - 存储描述n-body作用的张量的字典。 键是指示张量类型的元组。 例如, n_body_tensors[()] 将返回一个常量, 而 n_body_tensors[(1, 0)] 将是一个 \(n_\text{qubits}\times n_\text{qubits}\) 的numpy数组, 和 n_body_tensors[(1,1,0,0)] 将返回一个 \(n_\text{qubits}\times n_\text{qubits}\times n_\text{qubits}\times n_\text{qubits}\) 的numpy数组。 这些常数和数组分别表示identity、 \(a^\dagger_p a_q\)\(a^\dagger_p a^\dagger_q a_r a_s\) 的系数。默认值:None。

说明

这里的’1’代表 \(a^\dagger\),而’0’代表 \(a\)

样例:

>>> import numpy as np
>>> from mindquantum.core.operators import PolynomialTensor
>>> constant = 1
>>> one_body_term = np.array([[1,0],[0,1]])
>>> two_body_term = two_body_term = np.array([[[[1,0],[0,1]],[[1,0],[0,1]]],[[[1,0],[0,1]],[[1,0],[0,1]]]])
>>> n_body_tensors = {(): 1, (1,0): one_body_term,(1,1,0,0):two_body_term}
>>> poly_op = PolynomialTensor(n_body_tensors)
>>> poly_op
() 1
((0, 1), (0, 0)) 1
((1, 1), (1, 0)) 1
((0, 1), (0, 1), (0, 0), (0, 0)) 1
((0, 1), (0, 1), (1, 0), (1, 0)) 1
((0, 1), (1, 1), (0, 0), (0, 0)) 1
((0, 1), (1, 1), (1, 0), (1, 0)) 1
((1, 1), (0, 1), (0, 0), (0, 0)) 1
((1, 1), (0, 1), (1, 0), (1, 0)) 1
((1, 1), (1, 1), (0, 0), (0, 0)) 1
((1, 1), (1, 1), (1, 0), (1, 0)) 1
>>> # get the constant
>>> poly_op.constant
1
>>> # set the constant
>>> poly_op.constant = 2
>>> poly_op.constant
2
>>> poly_op.n_qubits
2
>>> poly_op.one_body_tensor
array([[1, 0],
       [0, 1]])
>>> poly_op.two_body_tensor
array([[[[1, 0],
         [0, 1]],
        [[1, 0],
         [0, 1]]],
       [[[1, 0],
         [0, 1]],
         [[1, 0],
          [0, 1]]]])
property constant

获取常数项的值。

property one_body_tensor

获得单体项。

property two_body_tensor

获得双体项。

class mindquantum.core.operators.Projector(proj)[源代码]

投影算子。

对于一个如下所示的投影算子:

\[\left|01\right>\left<01\right|\otimes I^2\]

字符串格式为’01II’。

说明

索引小的量子比特位于bra和ket字符串格式的右端。

参数:
  • proj (str) - 投影算子的字符串格式。

样例:

>>> from mindquantum.core.operators import Projector
>>> p = Projector('II010')
>>> p
I2 ⊗ ¦010⟩⟨010¦
class mindquantum.core.operators.QubitExcitationOperator(term=None, coefficient=1.0)[源代码]

量子比特激发算子定义为: \(Q^{\dagger}_{n} = \frac{1}{2} (X_{n} - iY_{n})\)\(Q_{n} = \frac{1}{2} (X_{n} + iY_{n})\) 。 与费米子激发算子相比,量子比特激发算子是某种“局部化”的,即费米子激发算子 \(a^{\dagger}_{7} a_{0}\) 涉及到JW变换下从0到7的量子比特, 而量子比特激发 \(Q^{\dagger}_{7} Q_{0}\) 只会影响第0和第7个量子比特。 此外,用量子比特激发算子描述双激发所使用的CNOT门比相应的费米子激发算子少得多。

参数:
  • terms (Union[str, tuple]) - 量子比特激发算子的输入项。默认值:None。

  • coefficient (Union[numbers.Number, str, ParameterResolver]) - 相应单个运算符的系数。默认值:1.0。

样例:

>>> from mindquantum.algorithm.nisq import Transform
>>> from mindquantum.core.operators import QubitExcitationOperator
>>> op = QubitExcitationOperator(((4, 1), (1, 0), (0, 0)), 2.5)
>>> op
5/2 [Q4^ Q1 Q0]
>>> op.fermion_operator
5/2 [4^ 1 0]
>>> op.to_qubit_operator()
5/16 [X0 X1 X4] +
(-0.3125j) [X0 X1 Y4] +
(5/16j) [X0 Y1 X4] +
5/16 [X0 Y1 Y4] +
(5/16j) [Y0 X1 X4] +
5/16 [Y0 X1 Y4] +
-0.3125 [Y0 Y1 X4] +
(5/16j) [Y0 Y1 Y4]
>>> Transform(op.fermion_operator).jordan_wigner()
5/16 [X0 X1 Z2 Z3 X4] +
(-0.3125j) [X0 X1 Z2 Z3 Y4] +
(5/16j) [X0 Y1 Z2 Z3 X4] +
5/16 [X0 Y1 Z2 Z3 Y4] +
(5/16j) [Y0 X1 Z2 Z3 X4] +
5/16 [Y0 X1 Z2 Z3 Y4] +
-0.3125 [Y0 Y1 Z2 Z3 X4] +
(5/16j) [Y0 Y1 Z2 Z3 Y4]
hermitian()[源代码]

返回量子比特激发算子的厄米共轭。

property imag

该算符的虚部。

返回:

QubitExcitationOperator,保留原始算符虚部的量子比特激发算符。

样例:

>>> from mindquantum.core.operators import QubitExcitationOperator
>>> f = QubitExcitationOperator(((1, 0),), 1 + 2j)
>>> f += QubitExcitationOperator(((1, 1),), 'a')
>>> f.imag.compress()
2 [Q1]
normal_ordered()[源代码]

按照比特序号由小到大排列量子比特激发算符。

说明

与费米子不同,玻色子交换不需要乘系数-1。

返回:

QubitExcitationOperator,正规排序后的量子比特激发算符。

样例:

>>> from mindquantum.core.operators import QubitExcitationOperator
>>> op = QubitExcitationOperator("7 1^")
>>> op
1 [Q7 Q1^]
>>> op.normal_ordered()
1 [Q1^ Q7]
property real

该算符的实部。

返回:

QubitExcitationOperator,保留原始算符实部的量子比特激发算符。

样例:

>>> from mindquantum.core.operators import QubitExcitationOperator
>>> f = QubitExcitationOperator(((1, 0),), 1 + 2j)
>>> f += QubitExcitationOperator(((1, 1),), 'a')
>>> f.real.compress()
1 [Q1] +
a [Q1^]
to_qubit_operator()[源代码]

将量子比特激发算子转化为泡利算符。

返回:

QubitOperator,根据量子比特激发算符定义相对应的泡利算符。

样例:

>>> from mindquantum.core.operators import QubitExcitationOperator
>>> op = QubitExcitationOperator("7^ 1")
>>> op.to_qubit_operator()
1/4 [X1 X7] +
(-1/4j) [X1 Y7] +
(1/4j) [Y1 X7] +
1/4 [Y1 Y7]
class mindquantum.core.operators.QubitOperator(term=None, coefficient=1.0)[源代码]

作用于量子比特的项的总和,例如 0.5 * ‘X1 X5’ + 0.3 * ‘Z1 Z2’。 项是一个作用于n个量子比特的运算符,可以表示为:coefficient * local_operator[0] x … x local_operator[n-1],其中x是张量乘积。 本地运算符是作用于一个量子比特的泡利运算符(’I’,’X’,’Y’或者’Z’)。 在数学符号中,一个QubitOperator是例如0.5 * ‘X1 X5’的项,它意味着X运算符作用于量子比特1和5,而恒等运算符作用于其余所有量子比特。

请注意,由QubitOperator算子组成的哈密顿量应该是一个厄米算子,因此要求所有项的系数必须是实数。

QubitOperator的属性设置如下:operators = (‘X’, ‘Y’, ‘Z’),different_indices_commute = True。

参数:
  • term (str) - 量子比特运算符的输入项。默认值:None。

  • coefficient (Union[numbers.Number, str, ParameterResolver]) - 此量子比特运算符的系数,可以是由字符串、符号或参数解析器表示的数字或变量。默认值:1.0。

样例:

>>> from mindquantum.core.operators import QubitOperator
>>> ham = ((QubitOperator('X0 Y3', 0.5)
...         + 0.6 * QubitOperator('X0 Y3')))
>>> ham2 = QubitOperator('X0 Y3', 0.5)
>>> ham2 += 0.6 * QubitOperator('X0 Y3')
>>> ham2
1.1 [X0 Y3]
>>> ham3 = QubitOperator('')
>>> ham3
1 []
>>> ham_para = QubitOperator('X0 Y3', 'x')
>>> ham_para
x [X0 Y3]
>>> ham_para.subs({'x':1.2})
6/5 [X0 Y3]
count_gates()[源代码]

返回单哈密顿量处理时的门数量。

返回:

int,单量子门的数量。

样例:

>>> from mindquantum.core.operators import QubitOperator
>>> a = QubitOperator("X0 Y1") + QubitOperator("X2 Z3")
>>> a.count_gates()
4
dumps(indent: int = 4)[源代码]

将QubitOperator转储到JSON(JavaScript对象表示法)。

参数:
  • indent (int) - JSON数组元素和对象成员打印时的缩进。默认值:4。

返回:

JSON(strings),QubitOperator的JSON字符串。

样例:

>>> from mindquantum.core.operators import QubitOperator
>>> ops = QubitOperator('X0 Y1', 1.2) + QubitOperator('Z0 X1', {'a': 2.1})
>>> len(ops.dumps())
448
static from_openfermion(of_ops, dtype=None)[源代码]

将openfermion格式的量子比特算符转换为mindquantum格式。

参数:
  • of_ops (openfermion.QubitOperator) - openfermion框架中的量子比特算符。

  • dtype (type) - 要生成的TermsOperator的类型(即实数“float”或复数“complex”)。 注意:此参数在 Python 版本的 QubitOperator 中被忽略。

返回:

QubitOperator,mindquantum框架中的量子比特算符。

hermitian()[源代码]

返回QubitOperator的厄米共轭。

property imag

获得系数的虚部。

返回:

QubitOperator,此量子算符的虚部。

样例:

>>> from mindquantum.core.operators import QubitOperator
>>> f = QubitOperator('X0', 1 + 2j) + QubitOperator('Y0', 'a')
>>> f.imag.compress()
2 [X0]
static loads(strs: str, dtype: type)[源代码]

将JSON(JavaScript对象表示法)加载到QubitOperator中。

参数:
  • strs (str) - 转储的量子比特算符字符串。

  • dtype (type) - (被此类忽略)要创建的 QubitOperator 的类型(即real,complex,real_pr,complex_pr)。

返回:

FermionOperator,从字符串加载的QubitOperator。

样例:

>>> from mindquantum.core.operators import QubitOperator
>>> ops = QubitOperator('X0 Y1', 1.2) + QubitOperator('Z0 X1', {'a': 2.1})
>>> obj = QubitOperator.loads(ops.dumps())
>>> obj == ops
True
matrix(n_qubits: int = None)[源代码]

将此量子比特算符转换为csr_matrix。

参数:
  • n_qubits (int) - 结果矩阵的量子比特数目。如果是None,则该值将是最大局域量子比特数。默认值:None。

property real

获得系数的实部。

返回:

QubitOperator,这个量子比特算符的实部。

样例:

>>> from mindquantum.core.operators import QubitOperator
>>> f = QubitOperator('X0', 1 + 2j) + QubitOperator('Y0', 'a')
>>> f.real.compress()
1 [X0] +
a [Y0]
split()[源代码]

将算符的系数跟算符本身分开。

返回:

List[List[ParameterResolver, QubitOperator]],分裂后的结果。

样例:

>>> from mindquantum.core.operators import QubitOperator
>>> a = QubitOperator('X0', 'a') + QubitOperator('Z1', 1.2)
>>> list(a.split())
[[{'a': 1}, const: 0, 1 [X0] ], [{}, const: 1.2, 1 [Z1] ]]
to_openfermion()[源代码]

将量子比特算符转换为openfermion格式。

class mindquantum.core.operators.TimeEvolution(ops: QubitOperator, time=None)[源代码]

可以生成对应线路的时间演化算子。

时间演化算子将执行以下演化:

\[\left|\varphi(t)\right> = e^{-iHt}\left|\varphi(0)\right>\]

说明

哈密顿量应该是参数化或非参数化 QubitOperator。 如果 QubitOperator 有多项,则将使用一阶Trotter分解。

参数:
  • ops (QubitOperator) - 量子算子哈密顿量,可以参数化,也可以非参数化。

  • time (Union[numbers.Number, dict, ParameterResolver]) - 演化时间,可以是数字或参数解析器。如果是None,时间将设置为1。默认值:None。

样例:

>>> from mindquantum.core.operators import TimeEvolution, QubitOperator
>>> q1 = QubitOperator('Z0 Y1', 'a')
>>> q2 = QubitOperator('X0 Z1', 'b')
>>> ops1 = q1 + q2
>>> ops2 = q2 + q1
>>> TimeEvolution(ops1).circuit
q0: ─────────────●───────────────●───────H────────●───────────────●────H──
                 │               │                │               │
q1: ──RX(π/2)────X────RZ(2*a)────X────RX(7π/2)────X────RZ(2*b)────X───────
>>> TimeEvolution(ops2).circuit
q0: ──H────●───────────────●───────H───────●───────────────●──────────────
           │               │               │               │
q1: ───────X────RZ(2*b)────X────RX(π/2)────X────RZ(2*a)────X────RX(7π/2)──
property circuit

返回时间演化算符的一阶Trotter分解线路。

mindquantum.core.operators.commutator(left_operator, right_operator)[源代码]

计算两个算子的对易。

参数:
  • left_operator (Union[FermionOperator, QubitOperator, QubitExcitationOperator]) - 第一个算子,类型是 FermionOperator 或者 QubitOperator

  • right_operator (Union[FermionOperator, QubitOperator, QubitExcitationOperator]) - 第二个算子,类型是 FermionOperator 或者 QubitOperator

异常:
  • TypeError - left_operatorright_operator 不是相同的类型。

样例:

>>> from mindquantum.core.operators import QubitOperator, FermionOperator, commutator
>>> qub_op1 = QubitOperator("X1 Y2")
>>> qub_op2 = QubitOperator("X1 Z2")
>>> commutator(qub_op1, qub_op1)
0
>>> commutator(qub_op1, qub_op2)
(2j) [X2]
mindquantum.core.operators.count_qubits(operator)[源代码]

计算未使用的量子比特被删除之前的量子比特数目。

说明

在某些情况下,我们需要删除未使用的索引。

参数:
  • operator (Union[FermionOperator, QubitOperator, QubitExcitationOperator]) - operator 算子类型为FermionOperator、QubitOperator或QubitExcitationOperator。

返回:

int,运算符作用的最小量子比特数。

异常:
  • TypeError - 类型无效的运算符。

样例:

>>> from mindquantum.core.operators import QubitOperator,FermionOperator, count_qubits
>>> qubit_op = QubitOperator("X1 Y2")
>>> count_qubits(qubit_op)
3
>>> fer_op = FermionOperator("1^")
>>> count_qubits(fer_op)
2
mindquantum.core.operators.down_index(index)[源代码]

索引顺序,默认情况下,我们将无自旋轨道设置为偶数-奇数-偶数-奇数(0,1,2,3,…)。自旋向下的轨道(β轨道)索引是奇数。

参数:
  • index (int) - 空间轨道索引。

返回:

int,关联的自旋向下的轨道索引序号。

样例:

>>> from mindquantum.core.operators import down_index
>>> down_index(1)
3
mindquantum.core.operators.hermitian_conjugated(operator)[源代码]

返回FermionOperator或QubitOperator的厄米共轭。

参数:
  • operator (Union[FermionOperator, QubitOperator, QubitExcitationOperator]) - 输入的算子。

返回:

operator(Union[FermionOperator, QubitOperator, QubitExcitationOperator]), 输入算子的厄米共轭。

样例:

>>> from mindquantum.core.operators import QubitOperator, hermitian_conjugated
>>> q = QubitOperator('X0', {'a' : 2j})
>>> hermitian_conjugated(q)
(-2j)*a [X0]
mindquantum.core.operators.normal_ordered(fermion_operator)[源代码]

计算并返回FermionOperator的规范顺序。 根据惯例,规范顺序意味着项从最高模式索引(左侧)到最低(右侧)排序。 此外,创建运算符首先出现,然后跟随湮灭运算符。 例如 ‘3 4^’ \(\rightarrow\) ‘- 4^ 3’ 。

参数:
  • fermion_operator (FermionOperator) - 此参数只能为费米子类型运算符。

返回:

FermionOperator, 规范有序的FermionOperator。

样例:

>>> from mindquantum.core.operators import FermionOperator, normal_ordered
>>> op = FermionOperator("3 4^", 'a')
>>> normal_ordered(op)
-a [4^ 3]
mindquantum.core.operators.number_operator(n_modes=None, mode=None, coefficient=1.0)[源代码]

返回 reverse_jordan_wigner 变换的费米数运算符。

参数:
  • n_modes (int) - 系统中模式的数量。默认值:None。

  • mode (int, optional) - 返回数运算符的模式。如果是None,则返回所有点上的总数运算符。默认值:None。

  • coefficient (float) - 项的系数。默认值:1.0。

返回:

FermionOperator,reverse_jordan_wigner变换的费米数运算符。

样例:

>>> from mindquantum.core.operators import FermionOperator, number_operator
>>> n_mode = 3
>>> number_operator(n_mode)
1 [0^ 0] +
1 [1^ 1] +
1 [2^ 2]
>>> mode = 3
>>> number_operator(None, mode)
1 [3^ 3]
mindquantum.core.operators.sz_operator(n_spatial_orbitals)[源代码]

返回sz运算符。

说明

默认索引顺序自旋向上(α)对应于偶数索引,而自旋向下(β)对应于奇数索引。

参数:
  • n_spatial_orbitals (int) - 空间轨道数( n_qubits // 2 )。

返回:

FermionOperator ,对应于 n_spatial_orbitals 轨道上的sz运算符。

样例:

>>> from mindquantum.core.operators import sz_operator
>>> sz_operator(3)
1/2 [0^ 0] +
-1/2 [1^ 1] +
1/2 [2^ 2] +
-1/2 [3^ 3] +
1/2 [4^ 4] +
-1/2 [5^ 5]
mindquantum.core.operators.up_index(index)[源代码]

索引顺序,默认情况下,我们将无自旋轨道设置为偶数-奇数-偶数-奇数(0,1,2,3,…)。 自旋向上的自旋轨道(α轨道)索引为偶数。

参数:
  • index (int) - 空间轨道索引。

返回:

int,关联的自旋向上的轨道的索引序号。

样例:

>>> from mindquantum.core.operators import up_index
>>> up_index(1)
2