Pauli
class qiskit.quantum_info.Pauli(data=None)
Bases: BasePauli
Operador de Pauli de N-qubit.
Esta clase representa un operador del grupo completo -qubit Pauli
donde y son matrices de Pauli de un solo qubit:
Inicialización
Un objeto Pauli puede inicializarse de varias maneras:
Pauli(obj)donde
objes una cadena de Pauli,PaulioScalarOpo una puerta Pauli oQuantumCircuitque contiene sólo puertas Pauli.
Pauli((z, x, phase))donde
zyxson booleanosnumpy.ndarraysyphasees 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 -qubit Pauli puede representarse mediante una cadena formada por 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- al carácter Pauli situado más a la izquierda. Por ejemplo 'XYZ' representa 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).
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 -qubit Pauli son dos vectores booleanos de longitud- , , y un entero que define el operador Pauli
El qubit -ésimo corresponde a la entrada -ésima de las matrices y
donde z[k] = P.z[k], x[k] = P.x[k] respectivamente.
Se puede acceder a las matrices y y actualizarlas utilizando las etiquetas z y x respectivamente. Se puede acceder y actualizar el entero de fase utilizando la propiedad phase propiedad.
Representación de operadores matriciales
Las matrices de Pauli pueden convertirse a 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 . 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
anticommutes
anticommutes(other, qargs=None)
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
apply_layout
apply_layout(layout, num_qubits=None)
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
layoutes unTranspileLayoutse utilizará por defecto el número de qubits del circuito de salida del transpilador. Silayoutes 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
commutes
commutes(other, qargs=None)
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
compose
compose(other, qargs=None, front=False, inplace=False)
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
Eleva
QiskitError - si otro no puede convertirse en operador o tiene dimensiones incompatibles para los subsistemas especificados.
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
copy
delete
delete(qubits)
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
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)
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
equiv
equiv(other)
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
evolve
evolve(other, qargs=None, frame='h')
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 .
La imagen de Schrödinger evoluciona el Pauli como .
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 (imagen de Heisenberg) o el Pauli (imagen de Schrödinger).
Tipo de retorno
Eleva
QiskitError - si el número Clifford de qubits y qargs no coinciden.
expand
expand(other)
Devuelve el producto tensorial de orden inverso con otro Pauli.
Parámetros
other (Pauli) – un objeto Pauli.
Devuelve
el producto tensorial , donde
es el Pauli actual, y es el otro Pauli.
Tipo de retorno
input_dims
insert
insert(qubits, value)
Insertar un Pauli en un valor de qubit específico.
Parámetros
Devuelve
el Pauli resultante con las entradas insertadas.
Tipo de retorno
Eleva
QiskitError - si los qubits de inserción no son válidos.
inverse
output_dims
power
power(n)
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
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)
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)
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.
El truncamiento se desactivará si el valor de truncamiento es 0.
tensor
tensor(other)
Devuelve el producto tensorial con otro Pauli.
Parámetros
other (Pauli) – un objeto Pauli.
Devuelve
**el producto tensorial , donde **
es el Pauli actual, y es el otro Pauli.
Tipo de retorno
El producto tensorial puede obtenerse utilizando el operador binario ^ . Por tanto, a.tensor(b) es equivalente a a ^ b.
to_instruction
to_label
to_label()
Convierte un Pauli en una etiqueta de cadena.
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
to_matrix
to_matrix(sparse=False)
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