mindquantum.core.operators.FermionOperator

查看源文件
class mindquantum.core.operators.FermionOperator(terms: Union[str, 'FermionOperator'] = None, coefficient: PRConvertible = 1.0, internal: bool = False)[源代码]

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

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

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

  • internal (bool) - 第一个参数是否为费米子对象的内部c++类。默认值: False

样例:

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

将FermionOperator转化为不同的数据类型。

说明

将一个复数类型的FermionOperator转化为实数类型将会忽略系数的虚数部分。

参数:
  • dtype (mindquantum.dtype) - 费米子算符的新类型。

返回:

FermionOperator,给定类型的费米子算符。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> import mindquantum as mq
>>> f = FermionOperator('0^', 2 + 3j)
>>> f.dtype
mindquantum.complex128
>>> f.astype(mq.float64)
2 [0^]
cast_complex()[源代码]

将一个费米子算符转化为等价的复数形式。

compress(abs_tol=EQ_TOLERANCE)[源代码]

将系数很小的费米子串项移除。

参数:
  • abs_tol (float) - 绝对值阈值,必须大于0.0。默认值: EQ_TOLERANCE

返回:

FermionOperator,经过压缩后的费米子算符。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> ham_compress = FermionOperator('0^ 1', 0.5) + FermionOperator('2^ 3', 1e-7)
>>> ham_compress
1/2 [0^ 1] +
1/10000000 [2^ 3]
>>> ham_compress.compress(1e-6)
1/2 [0^ 1]
>>> ham_para_compress =  FermionOperator('0^ 1', 0.5) + FermionOperator('2^ 3', 'X')
>>> ham_para_compress
1/2 [0^ 1] +
X [2^ 3]
>>> ham_para_compress.compress(1e-7)
1/2 [0^ 1] +
X [2^ 3]
property constant

返回单位费米子串的系数。

返回:

ParameterResolver,单位费米子串的系数。

count_qubits()[源代码]

统计移除没用比特前所占用的比特数。

返回:

int,移除没用比特前所占用的比特数。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> a = FermionOperator("0^ 3")
>>> a.count_qubits()
4
property dtype

费米子算符系数的数据类型。

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())
581
static from_openfermion(of_ops)[源代码]

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

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

返回:

FermionOperator,mindquantum中的费米子算符。

get_coeff(term)[源代码]

获取给定项的系数。

参数:
  • term (List[Tuple[int, Union[int, str]]]) - 想要获取系数的项。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> f = FermionOperator('0^ 1', 1.2)
>>> f.get_coeff([(1, ''), (0, '^')])
ParameterResolver(dtype: float64, const: -1.200000)
>>> f.get_coeff([(1, 0), (0, 1)])
ParameterResolver(dtype: float64, const: -1.200000)
hermitian()[源代码]

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

返回:

FermionOperator,原费米子的厄米共轭。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> a = FermionOperator("0^ 1", {"a": 1 + 2j})
>>> a.hermitian()
(1 - 2j)*a [1^ 0]
property imag

获得系数的虚部。

返回:

FermionOperator,这个FermionOperator的虚部。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> f = FermionOperator('0', 1 + 2j) + FermionOperator('0^', 'a')
>>> f.imag
2 [0]
property is_complex

返回当前费米子是否使用复数类型的系数。

property is_singlet

检查当前费米子是否只有一项。

返回:

bool,当前费米子是否只有一项。

static loads(strs: str)[源代码]

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

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

返回:

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, pr=None)[源代码]

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

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

  • pr (ParameterResolver, dict, numpy.ndarray, list, numbers.Number) - 含参费米子算符的参数。默认值: 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 parameterized

检查当前费米子是否是参数化的。

property params_name

获取费米子算符的所有参数。

property real

获得系数的实部。

返回:

FermionOperator,这个FermionOperator的实部。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> f = FermionOperator('0', 1 + 2j) + FermionOperator('0^', 'a')
>>> f.real
1 [0] +
a [0^]
relabel(logic_qubits: List[int])[源代码]

根据逻辑比特顺序重新编码量子比特。

参数:
  • logic_qubits (List[int]) - 逻辑比特编号。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> o = FermionOperator('3^ 2 1 0')
>>> o
1 [3^ 2 1 0]
>>> o.relabel([1, 3, 0, 2])
-1 [3 2^ 1 0]
singlet()[源代码]

将只有一个费米子串的费米子算符分裂成只有一个费米子的费米子算符。

返回:

List[FermionOperator],只有一个费米子的费米子算符。

异常:
  • RuntimeError - 如果该费米子算符拥有不止一个费米子串。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> ops = FermionOperator("1^ 2", 1)
>>> print(ops.singlet())
[1 [2], 1 [1^]]
singlet_coeff()[源代码]

当费米子算符只有一个费米子串时,返回该费米子串的系数。

返回:

ParameterResolver,唯一费米子串的系数。

异常:
  • RuntimeError - 如果该费米子算符拥有不止一个费米子串。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> ops = FermionOperator("1^ 2", "a")
>>> print(ops)
-a [2 1^]
>>> print(ops.singlet_coeff())
-a
property size

返回费米子算符中费米子串的数量。

split()[源代码]

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

返回:

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

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> a = FermionOperator('0', 'a') + FermionOperator('1^', 1.2)
>>> for i, j in a.split():
...     print(i, j)
a, 1 [0]
1.2, 1 [1^]
subs(params_value: PRConvertible)[源代码]

将费米子中的变量换成具体的参数值。

参数:
  • params_value (Union[Dict[str, numbers.Number], ParameterResolver]) - 系数变量的参数。

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> from mindquantum.core.parameterresolver import ParameterResolver
>>> f = FermionOperator('0^', ParameterResolver({'a': 2.0}, 3.0))
>>> f
2*a + 3 [0^]
>>> f.subs({'a': 1.5})
6 [0^]
property terms

返回费米子算符中的费米子串。

to_openfermion()[源代码]

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