PauliList
class qiskit.quantum_info.PauliList(data)
Bases: BasePauli, LinearMixin, GroupMixin
Lista de operadores de Pauli de N-qubit.
Esta clase es una representación eficiente de una lista de Pauli operadores. Soporta 1D numpy array indexing devolviendo un Pauli para índices enteros o un PauliList para índices slice o list.
Inicialización
Un objeto PauliList puede inicializarse de varias maneras.
PauliList(list[str])donde las cadenas tienen la misma representación con
Pauli.
PauliList(Pauli) and PauliList(list[Pauli])donde Pauli es
Pauli.
PauliList.from_symplectic(z, x, phase)donde
zyxson booleanos bidimensionalesnumpy.ndarraysyphasees un número entero en[0, 1, 2, 3].
Por ejemplo:
import numpy as np
from qiskit.quantum_info import Pauli, PauliList
# 1. init from list[str]
pauli_list = PauliList(["II", "+ZI", "-iYY"])
print("1. ", pauli_list)
pauli1 = Pauli("iXI")
pauli2 = Pauli("iZZ")
# 2. init from Pauli
print("2. ", PauliList(pauli1))
# 3. init from list[Pauli]
print("3. ", PauliList([pauli1, pauli2]))
# 4. init from np.ndarray
z = np.array([[True, True], [False, False]])
x = np.array([[False, True], [True, False]])
phase = np.array([0, 1])
pauli_list = PauliList.from_symplectic(z, x, phase)
print("4. ", pauli_list)1. ['II', 'ZI', '-iYY']
2. ['iXI']
3. ['iXI', 'iZZ']
4. ['YZ', '-iIX']Acceso a los datos
Se puede acceder a los Paulis individuales y actualizarlos mediante el operador [] , que acepta enteros, listas o rebanadas para seleccionar subconjuntos de PauliList. Si se da un número entero, devuelve Pauli no PauliList.
pauli_list = PauliList(["XX", "ZZ", "IZ"])
print("Integer: ", repr(pauli_list[1]))
print("List: ", repr(pauli_list[[0, 2]]))
print("Slice: ", repr(pauli_list[0:2]))Integer: Pauli('ZZ')
List: PauliList(['XX', 'IZ'])
Slice: PauliList(['XX', 'ZZ'])Iteración
Las filas de la tabla Pauli pueden iterarse como una lista. La iteración también se puede realizar utilizando la etiqueta o la representación matricial de cada fila mediante los botones label_iter() y matrix_iter() .
Inicialice la página PauliList.
Parámetros
data (Pauli orlist) – datos de entrada para Paulis. Si la entrada es una lista, cada elemento de la lista debe ser un objeto Pauli o una cadena Pauli.
Eleva
QiskitError - si la matriz de entrada tiene una forma no válida.
Información adicional:
La matriz de entrada no se copia, por lo que varias tablas Pauli pueden compartir la misma matriz subyacente.
Atributos
dim
Devuelve una tupla (forma_entrada, forma_salida).
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 PauliList.
qargs
Devuelve los qargs para el operador.
settings
Devuelve los ajustes.
shape
La forma completa del array()
size
El número de filas Pauli en la tabla.
x
La matriz x para la representación simpléctica.
z
La matriz z para la representación simpléctica.
Métodos
adjoint
anticommutes
anticommutes(other, qargs=None)
Devuelve un valor True si el otro operador de Pauli se anticomuta con este.
Parámetros
- other (PauliList) – otro operador de PauliList.
- qargs (list) – qubits a los que aplicar el producto punto (por defecto:
None).
Devuelve
True si los Paulis no viajan, False si viajan.
Tipo de retorno
anticommutes_with_all
anticommutes_with_all(other)
Devuelve los índices de las filas que anticomutan con la otra lista de Pauli.
Si other es una lista Pauli de varias filas, el vector devuelto indexa las filas de la actual PauliList que anticonmutan con todas las Paulis de la otra. Si ninguna fila cumple la condición, la matriz devuelta estará vacía.
Parámetros
other (PauliList) – una sola fila Pauli o varias PauliList.
Devuelve
matriz de índices de las filas anticonmutación.
Tipo de retorno
argsort
argsort(weight=False, phase=False)
Devuelve índices para ordenar las filas de la tabla.
El método de ordenación por defecto es la ordenación lexicográfica por número de qubit. Utilizando el peso kwarg, la salida puede ordenarse adicionalmente por el número de términos no idénticos en el Pauli, donde el conjunto de todos los Paulis de un peso dado siguen ordenados lexicográficamente.
Parámetros
- weight (bool) – Opcionalmente ordenar por peso si
True(Por defecto:False). - phase (bool) – Opcionalmente, ordenar por fase antes que por peso o por orden (Predeterminado:
False).
Devuelve
los índices para ordenar la tabla.
Tipo de retorno
commutes
commutes(other, qargs=None)
Devuelve True para cada Pauli que conmuta con otro.
Parámetros
- other (PauliList) – otro operador de PauliList.
- qargs (list) – qubits a los que aplicar el producto punto (por defecto:
None).
Devuelve
True si Paulis conmute, False si anti-commute.
Tipo de retorno
commutes_with_all
commutes_with_all(other)
Devuelve índices de filas que conmutan other.
Si other es una lista Pauli de varias filas, el vector devuelto indexa las filas de la PauliList actual que conmutan con todas las Paulis de la otra. Si ninguna fila cumple la condición, la matriz devuelta estará vacía.
Parámetros
other (PauliList) – una sola fila Pauli o varias PauliList.
Devuelve
matriz de índices de las filas conmutadas.
Tipo de retorno
compose
compose(other, qargs=None, front=False, inplace=False)
Devuelve la composición self∘other para cada Pauli de la lista.
Parámetros
- other (PauliList) – otro PauliList.
- qargs (None or list) – qubits a los que aplicar el producto punto (por defecto:
None). - front (bool) – Si es True utiliza el método de composición por puntos [por defecto:
False]. - inplace (bool) – Si
Truese actualiza in situ (por defecto:False).
Devuelve
la lista de Paulis compuestos.
Tipo de retorno
Eleva
QiskitError - si otro no se puede convertir a un PauliList, no tiene ni 1 ni el mismo número de Paulis que la lista actual, o tiene el número incorrecto de qubits para el qargs especificado.
conjugate
copy
delete
delete(ind, qubit=False)
Devuelve una copia con las filas Pauli eliminadas de la tabla.
Al borrar qubits, el índice del qubit es el mismo que el índice de la columna de las matrices subyacentes X y Z .
Parámetros
- ind (int orlist) – índice(s) a eliminar.
- qubit (bool) – si
Trueborrar columnas qubit, en caso contrario borrar filas Pauli (Por defecto:False).
Devuelve
la tabla resultante con las entradas eliminadas.
Tipo de retorno
Eleva
QiskitError - si ind está fuera de los límites del tamaño de la matriz o del número de qubits.
dot
dot(other, qargs=None, inplace=False)
Devuelve la composición other∘self para cada Pauli de la lista.
Parámetros
- other (PauliList) – otro PauliList.
- qargs (None or list) – qubits a los que aplicar el producto punto (por defecto:
None). - inplace (bool) – Si es True se actualiza in situ (por defecto:
False).
Devuelve
la lista de Paulis compuestos.
Tipo de retorno
Eleva
QiskitError - si otro no se puede convertir a un PauliList, no tiene ni 1 ni el mismo número de Paulis que la lista actual, o tiene el número incorrecto de qubits para el qargs especificado.
equiv
equiv(other)
Comparación por entradas de la equivalencia de Pauli hasta la fase global.
Parámetros
other (PauliList orPauli) – un objeto de comparación.
Devuelve
Una matriz de True o False para la equivalencia de entrada
de la tabla actual.
Tipo de retorno
np.ndarray
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 a la de 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 expandido de cada Pauli de la lista.
Parámetros
other (PauliList) – otro PauliList.
Devuelve
la lista del producto tensorial Paulis.
Tipo de retorno
Eleva
QiskitError - si otro no se puede convertir en un PauliList, no tiene ni 1 ni el mismo número de Paulis que la lista actual.
from_symplectic
classmethod from_symplectic(z, x, phase=0)
Construir un PauliList a partir de un dato simpléctico.
Parámetros
- z (np.ndarray) – 2D boolean Numpy array.
- x (np.ndarray) – 2D boolean Numpy array.
- phase (np.ndarray or None) – 1D matriz de números enteros de Z_4.
Devuelve
el construido PauliList.
Tipo de retorno
group_commuting
group_commuting(qubit_wise=False)
Particionar un PauliList en conjuntos de cadenas Pauli conmutativas.
Parámetros
qubit_wise (bool) –
si la regla de conmutación se aplica a todo el operador o a cada qubit. Por ejemplo:
>>> from qiskit.quantum_info import PauliList
>>> op = PauliList(["XX", "YY", "IZ", "ZZ"])
>>> op.group_commuting()
[PauliList(['XX', 'YY']), PauliList(['IZ', 'ZZ'])]
>>> op.group_commuting(qubit_wise=True)
[PauliList(['XX']), PauliList(['YY']), PauliList(['IZ', 'ZZ'])]Devuelve
Lista de PauliLists donde cada PauliList contiene operadores Pauli conmutantes.
Tipo de retorno
group_qubit_wise_commuting
group_qubit_wise_commuting()
Particionar un PauliList en conjuntos de cuerdas Pauli mutuamente conmutables en qubit.
Devuelve
Lista de PauliLists donde cada PauliList contiene operadores de Pauli conmutables.
Tipo de retorno
input_dims
insert
insert(ind, value, qubit=False)
Inserta Paulis en la tabla.
Al insertar qubits, el índice del qubit es el mismo que el índice de la columna de las matrices subyacentes X y Z .
Parámetros
- ind (int) – índice en el que insertar.
- value (PauliList) – valores a insertar.
- qubit (bool) – si
Trueinsertar columnas qubit, en caso contrario insertar filas Pauli (Por defecto:False).
Devuelve
la tabla resultante con las entradas insertadas.
Tipo de retorno
Eleva
QiskitError - si el índice de inserción no es válido.
inverse
label_iter
label_iter()
Devuelve un iterador de representación de etiquetas.
Se trata de un iterador perezoso que convierte cada fila en la etiqueta de cadena sólo a medida que se utiliza. Para convertir toda la tabla en etiquetas utilice el método to_labels() método.
Devuelve
objeto iterador de etiquetas para el PauliList.
Tipo de retorno
LabelIterator
matrix_iter
matrix_iter(sparse=False)
Devuelve un iterador de representación matricial.
Se trata de un iterador perezoso que convierte cada fila en la representación de la matriz de Pauli sólo a medida que se utiliza. Para convertir toda la tabla en matrices utilice el método to_matrix() método.
Parámetros
sparse (bool) – Devuelve matrices CSR dispersas si se especifica; Truede lo contrario, devuelve matrices de tipo Numpy (por defecto: False)
Devuelve
objeto iterador de matriz para el PauliList.
Tipo de retorno
MatrixIterator
noncommutation_graph
noncommutation_graph(qubit_wise)
Crea el gráfico de no conmutación de este PauliList.
Esto transforma el problema de agrupación de operadores de medición en un problema de coloreado de grafos. El grafo construido contiene un nodo por cada Pauli. Los nodos se conectarán para dos términos de Pauli cualesquiera que no conmuten.
Parámetros
qubit_wise (bool) – si la regla de conmutación se aplica a todo el operador o a cada qubit.
Devuelve
el grafo de no conmutación con nodos para cada Pauli y aristas
que indica una relación de no conmutación. Cada nodo contendrá el índice del término de Pauli al que corresponde en sus datos. Las aristas del gráfico no contienen datos.
Tipo de retorno
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.
sort
sort(weight=False, phase=False)
Ordena las filas de la tabla.
El método de ordenación por defecto es la ordenación lexicográfica por número de qubit. Utilizando el peso kwarg, la salida puede ordenarse adicionalmente por el número de términos no idénticos en el Pauli, donde el conjunto de todos los Paulis de un peso dado siguen ordenados lexicográficamente.
Ejemplo
Considere la posibilidad de ordenar todos un orden aleatorio de todos los 2-qubit Paulis
from numpy.random import shuffle
from qiskit.quantum_info.operators import PauliList
# 2-qubit labels
labels = ['II', 'IX', 'IY', 'IZ', 'XI', 'XX', 'XY', 'XZ',
'YI', 'YX', 'YY', 'YZ', 'ZI', 'ZX', 'ZY', 'ZZ']
# Shuffle Labels
shuffle(labels)
pt = PauliList(labels)
print('Initial Ordering')
print(pt)
# Lexicographic Ordering
srt = pt.sort()
print('Lexicographically sorted')
print(srt)
# Weight Ordering
srt = pt.sort(weight=True)
print('Weight sorted')
print(srt)Initial Ordering
['YX', 'ZZ', 'XZ', 'YI', 'YZ', 'II', 'XX', 'XI', 'XY', 'YY', 'IX', 'IZ',
'ZY', 'ZI', 'ZX', 'IY']
Lexicographically sorted
['II', 'IX', 'IY', 'IZ', 'XI', 'XX', 'XY', 'XZ', 'YI', 'YX', 'YY', 'YZ',
'ZI', 'ZX', 'ZY', 'ZZ']
Weight sorted
['II', 'IX', 'IY', 'IZ', 'XI', 'YI', 'ZI', 'XX', 'XY', 'XZ', 'YX', 'YY',
'YZ', 'ZX', 'ZY', 'ZZ']Parámetros
- weight (bool) – ordenar opcionalmente por peso si
True(Por defecto:False). - phase (bool) – Opcionalmente, ordenar por fase antes que por peso o por orden (Predeterminado:
False).
Devuelve
una copia ordenada de la tabla original.
Tipo de retorno
tensor
tensor(other)
Devuelve el producto tensorial con cada Pauli de la lista.
Parámetros
other (PauliList) – otro PauliList.
Devuelve
la lista del producto tensorial Paulis.
Tipo de retorno
Eleva
QiskitError - si otro no se puede convertir en un PauliList, no tiene ni 1 ni el mismo número de Paulis que la lista actual.
to_labels
to_labels(array=False)
Convierte un PauliList en una lista de etiquetas de cadena Pauli.
Para grandes PauliLists la conversión usando el kwarg array=True será más eficiente ya que asigna memoria para el array Numpy completo de etiquetas por adelantado.
Etiqueta | Symplectic | Matriz |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Parámetros
array (bool) – devuelve una matriz Numpy si True, de lo contrario devuelve una lista (Por defecto: False).
Devuelve
Las filas de PauliList en forma de etiqueta.
Tipo de retorno
to_matrix
to_matrix(sparse=False, array=False)
Convertir en una lista o matriz de matrices de Pauli.
Para grandes PauliLists convertir utilizando el array=True kwarg será más eficiente, ya que asigna la memoria una rank-3 Numpy matriz completa de matrices de antemano.
Etiqueta | Symplectic | Matriz |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Parámetros
- sparse (bool) – si
Truedevuelve matrices CSR dispersas, en caso contrario devuelve matrices Numpy densas (Por defecto:False). - array (bool) – devolver como rank-3 matriz numpy si
True, de lo contrario devolver una lista de matrices Numpy (Por defecto:False).
Devuelve
Una lista de matrices de Pauli densas si array=False y sparse=False. lista: Una lista de matrices de Pauli dispersas si array=False y sparse=True. matriz: Una matriz densa de matrices de Pauli de tipo « rank-3 » si array=True.
Tipo de retorno
transpose
unique
unique(return_index=False, return_counts=False)
Devuelve el Paulis único de la mesa.
Ejemplo
from qiskit.quantum_info.operators import PauliList
pt = PauliList(['X', 'Y', '-X', 'I', 'I', 'Z', 'X', 'iZ'])
unique = pt.unique()
print(unique)['X', 'Y', '-X', 'I', 'Z', 'iZ']Parámetros
- return_index (bool) – Si es así
True, devuelve también los índices que dan lugar a la matriz única. (Por defecto:False) - return_counts (bool) – Si
True, devuelva también el número de veces que aparece cada elemento único en la tabla.
Devuelve
exclusivo
la tabla de las filas únicas.
índices_únicos: np.ndarray, opcional
Los índices de las primeras apariciones de los valores únicos en la matriz original. Sólo se proporciona si return_index es True.
unique_counts: np.array, opcional
El número de veces que cada uno de los valores únicos aparece en la matriz original. Sólo se proporciona si return_counts es True.
Tipo de retorno