qml.operation

该模块包含用于定义PennyLane操作和可观察量的抽象基类。

警告

除非您是PennyLane或插件开发者,否则您可能不需要直接使用这些类。

请查看主要操作页面以获取可用操作和观测量的详细信息。

描述

量子比特操作

Operator 类作为运算符的基类,并被 Observable 类和 Operation 类继承。这些类被子类化以在 PennyLane 中实现量子操作和测量可观测量。

  • 每个 Operator 子类代表物理状态之间一般类型的映射。这些子类的每个实例代表

    • 算子的一个应用或

    • 一种用于测量并返回相应结果的指令。

    操作符使用给定的参数值作用于一系列导线(子系统)。

  • 每个 Operation 子类代表一种量子操作,例如一个单位量子门。这些子类的每个实例代表将给定参数值应用于给定序列的线(子系统)的操作。

  • 每个 Observable 子类代表一种物理可观测量。这些子类的每个实例代表一个测量指令,并返回给定参数值在一系列线(子系统)上的相应结果。

微分

通常,一个 Operation 对于一个参数是可微的(至少使用有限差分法)当且仅当

  • 该参数的域是连续的。

对于一个 Operation 来说,要使用解析微分法对一个参数进行可微分性,必须满足一个额外的约束:

  • 参数域必须是实数。

注意

这些条件是 足够的,以进行解析微分。例如,CV 门还必须定义一个矩阵,表示它们在象限算子上的海森堡线性变换。

CV 操作基础类

由于额外的要求,连续变量(CV)操作必须是CVOperationCVObservable类的子类,而不是OperationObservable

微分

要使用解析方法进行高斯CV操作的梯度计算,此外,您需要提供静态类方法 _heisenberg_rep(),该方法返回给定参数列表的海森堡表示。具体来说:

  • 对于高斯CV操作,该方法应返回操作对给定参数值的象限算子向量\(\mathbf{r}\)所执行的线性变换矩阵。

  • 对于高斯CV可观测量,此方法应返回一个实数向量(第一阶可观测量)或对称矩阵(第二阶可观测量),作为正交算子的系数 \(\x\)\(\p\)

PennyLane 使用约定 \(\mathbf{r} = (\I, \x, \p)\) 来表示单模态操作和可观测量,\(\mathbf{r} = (\I, \x_0, \p_0, \x_1, \p_1, \ldots)\) 来表示多模态操作和可观测量。

注意

非高斯CV操作和可观测量当前仅通过有限差分法的梯度计算支持。

目录

操作符类型

Operator(*params[, wires, id])

表示量子算子的基类。

操作(*params[, wires, id])

表示应用于量子状态的量子门或通道的基类。

Observable(*params[, wires, id])

表示可观测量的基类。

CV()

一个表示连续变量操作的混入基类。

CVObservable(*params[, wires, id])

表示连续变量可观测量的基类。

CVOperation(*params[, wires, id])

表示连续变量量子门的基础类。

Channel(*参数[, 导线, ID])

量子通道的基类。

StatePrepBase(*参数[, 导线, 标识])

一个用于状态准备操作的接口。

Inheritance diagram of Operator, Operation, Observable, Channel, CV, CVObservable, CVOperation, StatePrepBase

错误

Operator方法未定义时,会引发一种错误类型,具体取决于未定义的方法。

OperatorPropertyUndefined

用于未定义操作符属性或方法的通用异常。

AdjointUndefinedError

当一个运算符的伴随版本未定义时引发。

DecompositionUndefinedError

当算子的分解表示未定义时引发。

DiagGatesUndefinedError

当运算符的对角化门未定义时引发。

EigvalsUndefinedError

当算子的特征值未定义时引发。

GeneratorUndefinedError

异常,用于指示运算符没有生成器

MatrixUndefinedError

当运算符的矩阵表示未定义时引发。

ParameterFrequenciesUndefinedError

用于指示某个运算符没有参数频率的异常

PowUndefinedError

当操作符的功率未定义时引发。

SparseMatrixUndefinedError

当操作符的稀疏矩阵表示未定义时引发。

TermsUndefinedError

当运算符作为线性组合的表示未定义时引发。

布尔函数

BooleanFn 是对单个对象的函数,返回 TrueFalseoperation 模块提供以下内容:

defines_diagonalizing_gates

如果一个运算符定义了对角化门,则返回 True

gen_is_multi_term_hamiltonian

如果一个算子定义了生成元,并且它是一个包含多个项的哈密顿量,则返回 True

has_gen

如果一个操作符定义了生成器,则返回 True

has_grad_method

如果一个操作符定义了 grad_method,则返回 True

has_multipar

如果一个运算符根据 num_params 有多个参数,则返回 True

has_nopar

如果根据 num_params,操作符没有参数,则返回 True

has_unitary_gen

如果一个操作符根据 has_unitary_generator 标志具有 unitary_generator,则返回 True

is_measurement

如果一个操作符是一个 MeasurementProcess 实例,则返回 True

is_trainable

如果算子的任何参数是可训练的,根据 qml.math.requires_grad,则返回 True

not_tape

如果对象不是量子纸带,则返回 True

其他

operation_derivative(操作)

计算一个操作的导数。

WiresEnum(值)

整数枚举类,用于表示操作作用于的电线数量

AllWires

表示子系统中所有线路的枚举。

AnyWires

一个表示子系统中任何电线的枚举。

PennyLane 还提供了一个函数,用于检查算子实例的一致性和正确性。

assert_valid(op[, skip_pickle, ...])

Operator进行基本验证检查,以确保其已正确定义。

操作属性

PennyLane包含了一个用于存储具有相似属性和行为的操作列表的机制(例如,那些是自身的逆操作)。下面的属性已经包含,并主要用于编译变换的目的。可以通过实例化新的 Attribute 对象来添加新属性。请注意,这些对象位于 pennylane.ops.qubit.attributes 中,而不是 pennylane.operation

属性

用于表示具有某种属性的一组算子的类。

composable_rotations

进行多次操作组合后,操作结果会在参数的加法(或替代累加)中产生的操作。

diagonal_in_z_basis

在计算基中对角的操作。

has_unitary_generator

由单位算子生成的操作。

self_inverses

自身为逆的运算。

supports_broadcasting

支持参数广播的操作。

symmetric_over_all_wires

如果交换线路的顺序,操作是相同的。

symmetric_over_control_wires

受控操作,如果你交换所有但最后一个(目标)电线的顺序,它们是相同的。