Skip to main content
IBM Quantum Platform

Pauli

class qiskit.quantum_info.Pauli(data=None)

GitHub

Bases: BasePauli

Operador de Pauli de N-qubit.

Esta clase representa un operador PP del grupo completo nn -qubit Pauli

P=(i)qPn1...P0P = (-i)^{q} P_{n-1} \otimes ... \otimes P_{0}

donde qZ4q\in \mathbb{Z}_4 y Pi{I,X,Y,Z}P_i \in \{I, X, Y, Z\} son matrices de Pauli de un solo qubit:

I=(1001),X=(0110),Y=(0ii0),Z=(1001).I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}.

Inicialización

Un objeto Pauli puede inicializarse de varias maneras:

Pauli(obj)

donde obj es una cadena de Pauli, Pauli o ScalarOp o una puerta Pauli o QuantumCircuit que contiene sólo puertas Pauli.

Pauli((z, x, phase))

donde z y x son booleanos numpy.ndarrays y phase es un número entero en [0, 1, 2, 3].

Pauli((z, x))

equivalente a Pauli((z, x, 0)) con fase trivial.

Representación de cadenas

Un nn -qubit Pauli puede representarse mediante una cadena formada por nn caracteres de ['I', 'X', 'Y', 'Z'], y opcionalmente coeficiente de fase en ['', '-i', '-', 'i']. Por ejemplo: 'XYZ' o '-iZIZ'.

En la representación de cadena qubit-0 corresponde al carácter Pauli situado más a la derecha, y qubit- (n1)(n-1) al carácter Pauli situado más a la izquierda. Por ejemplo 'XYZ' representa XYZX\otimes Y \otimes Z con 'Z' en qubit-0, 'Y' en qubit-1, y 'X' en qubit-2.

La representación de cadena puede convertirse a Pauli mediante la inicialización de la clase (Pauli('-iXYZ')). Un objeto Pauli puede convertirse de nuevo a la representación de cadena utilizando el método to_label() o str(pauli).

Nota

El uso de str para convertir un Pauli en una cadena truncará la cadena devuelta para grandes números de qubits mientras que to_label() devolverá la cadena completa sin truncar. La longitud de truncamiento por defecto es de 50 caracteres. El valor por defecto puede cambiarse estableciendo el atributo de clase __truncate__ en un valor entero. Si se establece en 0 no se realizará ningún truncamiento.

Representación de matrices

La estructura de datos interna de un nn -qubit Pauli son dos vectores booleanos de longitud- nn zZ2Nz \in \mathbb{Z}_2^N, xZ2Nx \in \mathbb{Z}_2^N, y un entero qZ4q \in \mathbb{Z}_4 que define el operador Pauli

P=(i)q+zxZzXx.P = (-i)^{q + z\cdot x} Z^z \cdot X^x.

El qubit kk -ésimo corresponde a la entrada kk -ésima de las matrices zz y xx

P=Pn1...P0Pk=(i)z[k]x[k]Zz[k]Xx[k]\begin{aligned} P &= P_{n-1} \otimes ... \otimes P_{0} \\ P_k &= (-i)^{z[k] * x[k]} Z^{z[k]}\cdot X^{x[k]} \end{aligned}

donde z[k] = P.z[k], x[k] = P.x[k] respectivamente.

Se puede acceder a las matrices zz y xx y actualizarlas utilizando las etiquetas z y x respectivamente. Se puede acceder y actualizar el entero de fase qq utilizando la propiedad phase propiedad.

Representación de operadores matriciales

Las matrices de Pauli pueden convertirse a (2n,2n)(2^n, 2^n) Operator utilizando el método to_operator() , o a una matriz compleja densa o dispersa utilizando el método to_matrix() método.

Acceso a los datos

Se puede acceder a los qubit Paulis individuales y actualizarlos mediante el operador [] , que acepta enteros, listas o rebanadas para seleccionar subconjuntos de Paulis. Tenga en cuenta que la selección de subconjuntos de Pauli descartará la fase del Pauli actual.

Por ejemplo

from qiskit.quantum_info import Pauli

P = Pauli('-iXYZ')

print('P[0] =', repr(P[0]))
print('P[1] =', repr(P[1]))
print('P[2] =', repr(P[2]))
print('P[:] =', repr(P[:]))
print('P[::-1] =', repr(P[::-1]))

Inicializar el Pauli.

Cuando se utilizan los datos de entrada de la matriz simpléctica, deben proporcionarse los argumentos z y x; sin embargo, el primer argumento (z) puede utilizarse solo para la etiqueta de cadena, el operador de Pauli o los datos de entrada de la matriz simpléctica ScalarOp datos de entrada.

Parámetros

data (str ortuple orPauli orScalarOp) – datos de entrada para Pauli. Si la entrada es una tupla, debe ser de la forma (z, x) o (z, x, phase) donde z y x son matrices booleanas Numpy, y fase es un entero de Z4\mathbb{Z}_4. Si la entrada es una cadena, debe ser una concatenación de una fase y una cadena Pauli (por ejemplo 'XYZ', '-iZIZ') donde una cadena de fase es una combinación de un máximo de tres caracteres de ['+', '-', ''], ['1', ''], y ['i', 'j', ''] en este orden, por ejemplo '', '-1j' mientras que una cadena Pauli es 1 o más caracteres de 'I', 'X', 'Y', o 'Z', por ejemplo 'Z', 'XIYY'.

Eleva

QiskitError - si la matriz de entrada tiene una forma no válida.


Atributos

dim

Devuelve una tupla (forma_entrada, forma_salida).

name

Identificador único de cadena para el tipo de operación.

num_clbits

Número de bits clásicos.

num_qubits

Devuelve el número de qubits si es un operador N-qubit o Ninguno en caso contrario.

phase

Devuelve el exponente de fase de grupo para el Pauli.

qargs

Devuelve los qargs para el operador.

settings

Devuelve los ajustes.

x

El vector x para el Pauli.

z

El vector z para el Pauli.


Métodos

adjoint

adjoint()

GitHub

Devuelve el adjunto del Operador.

anticommutes

anticommutes(other, qargs=None)

GitHub

Devuelve True si otro Pauli anticonmuta con uno mismo.

Parámetros

  • other (Pauli) – otro operador de Pauli.
  • qargs (list) – qubits a los que aplicar el producto punto (por defecto: Ninguno).

Devuelve

Verdadero si los de Pauli no conmutan, Falso si conmutan.

Tipo de retorno

bool

apply_layout

apply_layout(layout, num_qubits=None)

GitHub

Aplicar un diseño de transpilador a este Pauli

Parámetros

  • layout (TranspileLayout |list[int] | None) – Puede ser TranspileLayoutuna lista de enteros o Ninguno. Si tanto layout como num_qubits son none, se devuelve una copia del operador.
  • num_qubits (int | None) – El número de qubits a los que expandir el operador. Si no se proporciona, entonces si layout es un TranspileLayout se utilizará por defecto el número de qubits del circuito de salida del transpilador. Si layout es una lista de enteros, la permutación especificada se aplicará sin ninguna expansión. Si layout es None, el operador se expandirá al número de qubits dado.

Devuelve

Un nuevo Pauli con el diseño proporcionado aplicado

Tipo de retorno

Pauli

commutes

commutes(other, qargs=None)

GitHub

Devuelve True si el Pauli conmuta con otro.

Parámetros

  • other (Pauli orPauliList) – otro operador de Pauli.
  • qargs (list) – qubits a los que aplicar el producto punto (por defecto: Ninguno).

Devuelve

Verdadero si los Pauli conmutan, Falso si anticonmutan.

Tipo de retorno

bool

compose

compose(other, qargs=None, front=False, inplace=False)

GitHub

Devuelve la composición del operador con otro Pauli.

Parámetros

  • other (Pauli) – un objeto Pauli.
  • qargs (list or None) – qubits sobre los que aplicar el producto escalar (por defecto: None).
  • front (bool) – Si es True compone usando el operador derecho de multiplicación, en lugar del izquierdo [por defecto: Falso].
  • inplace (bool) – Si es True, actualiza en el lugar (por defecto: False).

Devuelve

El Pauli compuesto.

Tipo de retorno

Pauli

Eleva

QiskitError - si otro no puede convertirse en operador o tiene dimensiones incompatibles para los subsistemas especificados.

Nota

La composición (&) se define por defecto como multiplicación matricial izquierda para los operadores matriciales, mientras que dot() se define como multiplicación matricial derecha. Es decir, que A & B == A.compose(B) es equivalente a B.dot(A) cuando A y B son del mismo tipo.

Si se configura el parámetro front=True kwarg, la multiplicación de matrices a la derecha es equivalente al método dot() método A.dot(B) == A.compose(B, front=True).

conjugate

conjugate()

GitHub

Devuelve el complejo conjugado del Pauli con respecto a la base Z.

copy

copy()

GitHub

Realiza una copia en profundidad del operador actual.

delete

delete(qubits)

GitHub

Devuelve un Pauli con qubits eliminados.

Parámetros

qubits (int orlist) – qubits para borrar de Pauli.

Devuelve

el Pauli resultante con los qubits especificados eliminados.

Tipo de retorno

Pauli

Eleva

QiskitError - si ind está fuera de los límites del tamaño del array o del número de qubits.

dot

dot(other, qargs=None, inplace=False)

GitHub

Devuelve el operador multiplicado por la derecha self * other.

Parámetros

  • other (Pauli) – un objeto operador.
  • qargs (list or None) – qubits sobre los que aplicar el producto escalar (por defecto: None).
  • inplace (bool) – Si es True, actualiza en el lugar (por defecto: False).

Devuelve

El operador yo*otro.

Tipo de retorno

Pauli

equiv

equiv(other)

GitHub

Devuelve True si las Pauli son equivalentes hasta la fase de grupo.

Parámetros

other (Pauli) – un objeto operador.

Devuelve

Cierto si los Pauli son equivalentes hasta la fase de grupo.

Tipo de retorno

bool

evolve

evolve(other, qargs=None, frame='h')

GitHub

Realiza la evolución de la imagen de Heisenberg (por defecto) o de Schrödinger del Pauli por un Clifford y devuelve el Pauli evolucionado.

La evolución de la imagen de Schrödinger puede elegirse pasando el parámetro frame='s'. Esta opción permite un cálculo más rápido.

La imagen de Heisenberg evoluciona el Pauli como P=C.P.CP^\prime = C^\dagger.P.C.

La imagen de Schrödinger evoluciona el Pauli como P=C.P.CP^\prime = C.P.C^\dagger.

Parámetros

  • other (Pauli orClifford orQuantumCircuit) – El operador Clifford para evolucionar.
  • qargs (list) – una lista de qubits a los que aplicar el Clifford.
  • frame (string) – 'h' para Heisenberg (por defecto) o 's' para el marco de Schrödinger.

Devuelve

el Pauli C.P.CC^\dagger.P.C (imagen de Heisenberg) o el Pauli C.P.CC.P.C^\dagger (imagen de Schrödinger).

Tipo de retorno

Pauli

Eleva

QiskitError - si el número Clifford de qubits y qargs no coinciden.

expand

expand(other)

GitHub

Devuelve el producto tensorial de orden inverso con otro Pauli.

Parámetros

other (Pauli) – un objeto Pauli.

Devuelve

el producto tensorial bab \otimes a, donde aa

es el Pauli actual, y bb es el otro Pauli.

Tipo de retorno

Pauli

input_dims

input_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de entrada para subsistemas especificados.

insert

insert(qubits, value)

GitHub

Insertar un Pauli en un valor de qubit específico.

Parámetros

  • qubits (int orlist) – índice de qubits en el que insertar.
  • value (Pauli) – valor a insertar.

Devuelve

el Pauli resultante con las entradas insertadas.

Tipo de retorno

Pauli

Eleva

QiskitError - si los qubits de inserción no son válidos.

inverse

inverse()

GitHub

Devuelve la inversa del Pauli.

output_dims

output_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de salida para subsistemas especificados.

power

power(n)

GitHub

Devuelve la composición de un operador consigo mismo n veces.

Parámetros

n (int) – el número de veces que se compone con uno mismo ( n>0 ).

Devuelve

el operador compuesto n veces.

Tipo de retorno

Clifford

Eleva

QiskitError - si las dimensiones de entrada y salida del operador no son iguales, o la potencia no es un entero positivo.

reshape

reshape(input_dims=None, output_dims=None, num_qubits=None)

GitHub

Devuelve una copia superficial con las dimensiones de los subsistemas de entrada y salida remodeladas.

Parámetros

  • input_dims (None or tuple) – nuevas dimensiones de entrada del subsistema. Si es Ninguno, se conservarán las atenuaciones de entrada originales [Por defecto: Ninguno].
  • output_dims (None or tuple) – nuevas dimensiones de salida del subsistema. Si es Ninguno, se conservarán las atenuaciones de salida originales. [Predeterminado: Ninguno].
  • num_qubits (None or int) – remodelar a un operador N-qubit [Por defecto: Ninguno].

Devuelve

devuelve self con las dimensiones de entrada y salida reformadas.

Tipo de retorno

BaseOperator

Eleva

QiskitError - si el tamaño combinado de todas las dimensiones de entrada del subsistema o las dimensiones de salida del subsistema no es constante.

set_truncation

classmethod set_truncation(val)

GitHub

Establece el número máximo de caracteres Pauli que se mostrarán antes de que se produzca el truncamiento.

Parámetros

val (int) – el número de caracteres.

Nota

El truncamiento se desactivará si el valor de truncamiento es 0.

tensor

tensor(other)

GitHub

Devuelve el producto tensorial con otro Pauli.

Parámetros

other (Pauli) – un objeto Pauli.

Devuelve

**el producto tensorial aba \otimes b, donde aa **

es el Pauli actual, y bb es el otro Pauli.

Tipo de retorno

Pauli

Nota

El producto tensorial puede obtenerse utilizando el operador binario ^ . Por tanto, a.tensor(b) es equivalente a a ^ b.

to_instruction

to_instruction()

GitHub

Convertir a instrucción de circuito Pauli.

to_label

to_label()

GitHub

Convierte un Pauli en una etiqueta de cadena.

Nota

La diferencia entre to_label y to_label __str__() es que este último trunca el resultado cuando el número de qubits es elevado.

Devuelve

la etiqueta de la cadena de Pauli.

Tipo de retorno

str

to_matrix

to_matrix(sparse=False)

GitHub

Convertir a matriz Numpy o matriz CSR dispersa.

Parámetros

sparse (bool) – si es True devuelve matrices CSR dispersas, en caso contrario devuelve matrices Numpy densas (por defecto: False).

Devuelve

La matriz de Pauli.

Tipo de retorno

matriz

transpose

transpose()

GitHub

Devuelve la transposición de cada Pauli de la lista.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.