PhasedQubitSparsePauliList
class qiskit.quantum_info.PhasedQubitSparsePauliList(data, /, num_qubits=None)
Bases: object
Una lista de operadores de Pauli con fases almacenadas en un formato de qubit disperso.
Representación
Cada operador de Pauli individual de la lista es un producto tensorial de operadores de Pauli de un solo qubit de la forma , para , y un entero llamado exponente de fase. La representación interna de a PhasedQubitSparsePauliList almacena sólo los operadores de Pauli de un solo qubit no idénticos.
Indexación
PhasedQubitSparsePauliList se comporta como una secuencia Python (la forma estándar, no la expandida collections.abc.Sequence). Los elementos de la lista se pueden indexar por enteros, así como iterar a través de ellos. Ya sea mediante indexación o iteración, los elementos de la lista se devuelven como PhasedQubitSparsePauli instancias.
Construcción
PhasedQubitSparsePauliList define varios constructores. El constructor por defecto intentará delegar en uno de los constructores más específicos, basándose en el tipo de la entrada. Siempre puedes utilizar los constructores específicos para tener más control sobre la construcción.
Método | Resumen |
|---|---|
from_label() | Convertir una etiqueta de cadena densa en un elemento único PhasedQubitSparsePauliList. |
from_list() | Construir a partir de una lista de etiquetas de cadenas densas. |
from_sparse_list() | Elementos dados como una lista de tuplas del exponente de fase, etiquetas de cadena dispersa y los qubits a los que se aplican. |
from_pauli() | Convierte un elemento Pauli en un elemento simple PhasedQubitSparsePauliList. |
from_phased_qubit_sparse_paulis() | Construir a partir de una lista de PhasedQubitSparsePaulis. |
__new__
__new__(data, /, num_qubits=None)
El constructor por defecto de PhasedQubitSparsePauliList.
Esto delega en uno de los métodos constructores de conversión explícitos, basándose en el tipo del argumento data . Si se suministra num_qubits y el constructor implicado por el tipo de data no acepta un número, el entero dado debe coincidir con la entrada.
Parámetros
- data - Tipo de datos de la entrada. Puede ser otro
PhasedQubitSparsePauliListen cuyo caso se copia la entrada, o puede ser una lista en un formato válido parafrom_list()ofrom_sparse_list(). - num_qubits (int|None) – Número opcional de qubits para la lista. Para la mayoría de las entradas de datos, esto se puede deducir y no es necesario pasarlo. Sólo es necesario para las listas vacías o el formato sparse-list. Si se da innecesariamente, debe coincidir con los datos introducidos.
Además de los constructores basados en la conversión, el método empty() puede utilizarse para construir una lista vacía de Paulis de qubits dispersos en fase que actúen sobre un número determinado de qubits.
Conversiones
Un archivo existente PhasedQubitSparsePauliList puede convertirse a otros formatos.
Método | Resumen |
|---|---|
to_sparse_list() | Exprese el observable en formato de lista dispersa con elementos (phase, paulis, indices). |
Atributos
num_qubits
Número de qubits sobre los que actúan los operadores de la lista.
Esto no puede deducirse de ninguna otra forma o valor, ya que las identidades no se almacenan explícitamente.
num_terms
El número de elementos de la lista.
Métodos
apply_layout
apply_layout(layout, num_qubits=None)
Aplique un diseño transpilador a esta lista Pauli dispersa de qubits en fase.
Esto permite reasignar los índices de los qubits, por ejemplo, si la lista se define en términos de etiquetas de qubits virtuales.
Parámetros
- layout (TranspileLayout |list[int] | None) – La disposición a aplicar. La mayoría de los usos de esta función deben pasar el
QuantumCircuit.layoutcampo de un circuito transpilado para hardware. Además, puede pasar una lista de nuevos índices de qubits. Si se da explícitamenteNone, no se aplica ninguna reasignación (pero aún se puede utilizarnum_qubitspara expandir los qubits de la lista). - num_qubits (int | None) – El número de qubits a los que expandir los elementos de la lista. Si no se proporciona, la salida será tan ancha como la entrada
TranspileLayouto la misma anchura que la entrada silayoutse proporciona de otra forma.
Devuelve
Un nuevo QubitSparsePauli con el diseño proporcionado aplicado.
clear
clear()
Borra todos los elementos de la lista, haciéndola de nuevo igual a la lista vacía.
Esto no modifica la capacidad de las asignaciones internas, por lo que es posible que las operaciones posteriores de suma o resta derivadas de la composición no requieran una reasignación.
Ejemplos
>>> pauli_list = PhasedQubitSparsePauliList.from_list(["IXXXYY", "ZZYZII"])
>>> pauli_list.clear()
>>> assert pauli_list == PhasedQubitSparsePauliList.empty(pauli_list.num_qubits)copy
copy()
Consigue una copia de esta lista de qubit sparse Pauli.
Ejemplos
>>> phased_qubit_sparse_pauli_list = PhasedQubitSparsePauliList.from_list(["IXZXYYZZ", "ZXIXYYZZ"])
>>> assert phased_qubit_sparse_pauli_list == phased_qubit_sparse_pauli_list.copy()
>>> assert phased_qubit_sparse_pauli_list is not phased_qubit_sparse_pauli_list.copy()empty
static empty(num_qubits)
Obtiene la lista vacía para un número dado de qubits.
La lista vacía no contiene ningún elemento, y es el elemento de identidad para unir dos PhasedQubitSparsePauliList instancias.
Ejemplos
Obtener la lista vacía en 100 qubits:
>>> PhasedQubitSparsePauliList.empty(100)
<PhasedQubitSparsePauliList with 0 elements on 100 qubits: []>from_label
static from_label(label, /)
Construye una lista con un solo término a partir de una etiqueta de cadena densa.
La etiqueta debe ser una secuencia del alfabeto 'IXYZ'. La etiqueta se interpreta de forma análoga a una cadena de bits. En otras palabras, la letra más a la derecha está asociada al qubit 0, y así sucesivamente. Esto es lo mismo que las etiquetas para Pauli y SparsePauliOp.
Parámetros
label (str) – la etiqueta densa.
Ejemplos
>>> PhasedQubitSparsePauliList.from_label("IIIIXZI")
<PhasedQubitSparsePauliList with 1 element on 7 qubits: [X_2 Z_1]>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert PhasedQubitSparsePauliList.from_label(label) == PhasedQubitSparsePauliList.from_pauli(pauli)Una generalización de este método que construye una lista a partir de múltiples etiquetas.
from_list
static from_list(iter, /, *, num_qubits=None)
Construir una lista Pauli de qubits dispersos en fase a partir de una lista de etiquetas densas.
Esto es análogo a SparsePauliOp.from_list(). En este formulario denso, debe suministrar todas las identidades explícitamente en cada etiqueta.
La etiqueta debe ser una secuencia del alfabeto 'IXYZ'. La etiqueta se interpreta de forma análoga a una cadena de bits. En otras palabras, la letra más a la derecha está asociada al qubit 0, y así sucesivamente. Esto es lo mismo que las etiquetas para Pauli y SparsePauliOp.
Parámetros
- iter (list[str]) – Lista de etiquetas de cadenas densas.
- num_qubits (int | None) – No es necesario especificarlo si se está seguro de que
iterno es una secuencia vacía, ya que puede deducirse de las longitudes de las etiquetas. Siiterpuede estar vacío, debe especificar este argumento para desambiguar sobre cuántos qubits actúan los operadores. Si se indica yiterno está vacío, el valor debe coincidir con la longitud de las etiquetas.
Ejemplos
Construir una lista Pauli dispersa de qubits a partir de una lista de etiquetas:
>>> PhasedQubitSparsePauliList.from_list([
... "IIIXX",
... "IIYYI",
... "IXXII",
... "ZZIII",
... ])
<PhasedQubitSparsePauliList with 4 elements on 5 qubits:
[X_1 X_0, Y_2 Y_1, X_3 X_2, Z_4 Z_3]>Utilice num_qubits para desambiguar entradas potencialmente vacías:
>>> PhasedQubitSparsePauliList.from_list([], num_qubits=10)
<PhasedQubitSparsePauliList with 0 elements on 10 qubits: []>Este método es equivalente a las llamadas a from_sparse_list() con el campo explícito qubit-arguments establecido en enteros decrecientes:
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = PhasedQubitSparsePauliList.from_list(labels)
>>> from_sparse_list = PhasedQubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_listConstruye la lista a partir de etiquetas sin identidades explícitas, pero con los qubits a los que se aplica cada término de operador single-qubit enumerados explícitamente.
from_pauli
static from_pauli(pauli, /)
Construir un PhasedQubitSparsePauliList a partir de una única Pauli instancia.
La lista de salida tendrá un único término. Obsérvese que la fase se suprime.
Parámetros
pauli (Pauli) – el único Pauli para convertir.
Ejemplos
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> PhasedQubitSparsePauliList.from_pauli(pauli)
<PhasedQubitSparsePauliList with 1 element on 5 qubits: [Y_3 X_2 Z_1]>
>>> assert PhasedQubitSparsePauliList.from_label(label) == PhasedQubitSparsePauliList.from_pauli(pauli)from_phased_qubit_sparse_paulis
static from_phased_qubit_sparse_paulis(obj, /, num_qubits=None)
Construir un PhasedQubitSparsePauliList a partir de instancias PhasedQubitSparsePauli individuales.
Todos los términos deben tener el mismo número de qubits. Si se proporciona, el argumento num_qubits debe coincidir con los términos.
Parámetros
- obj (Iterable[PhasedQubitSparsePauli]) – Iterable de términos individuales a partir de los cuales construir la lista.
- num_qubits (int | None) – El número de qubits sobre los que deben actuar los elementos de la lista. Normalmente se deduce de la entrada, pero puede indicarse explícitamente para manejar el caso de un iterable vacío.
Devuelve
La lista correspondiente.
from_sparse_list
static from_sparse_list(iter, /, num_qubits)
Construye una lista Pauli dispersa de qubits en fase a partir de una lista de etiquetas y los qubits a los que se aplica cada elemento.
Esto es análogo a SparsePauliOp.from_sparse_list().
Los campos "labels" e "indices" de las tuplas se asocian comprimiéndolos. Por ejemplo, esto significa que una llamada a from_list() puede convertirse a la forma utilizada por este método estableciendo el campo "índices" de cada triple en (num_qubits-1, ..., 1, 0).
Parámetros
- iter (list[tuple[int, str, Sequence[int]]]) – tuplas de exponentes de fase, etiquetas y los qubits a los que se aplica cada término single-qubit.
- num_qubits (int) – el número de qubits sobre los que actúan los operadores de la lista.
Ejemplos
Construye una lista sencilla:
>>> PhasedQubitSparsePauliList.from_sparse_list(
... [(0, "ZX", (1, 4)), (1, "YY", (0, 3))],
... num_qubits=5,
... )
<PhasedQubitSparsePauliList with 2 elements on 5 qubits: [X_4 Z_1, (-i)Y_3 Y_0]>Este método puede replicar el comportamiento de from_list()si el campo qubit-arguments de la tupla se establece en enteros decrecientes:
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = PhasedQubitSparsePauliList.from_list(labels)
>>> from_sparse_list = PhasedQubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_listEl reverso de este método.
to_pauli_list
to_pauli_list()
Devuelve un PauliList que representa la misma lista de Paulis.
to_sparse_list
to_sparse_list()
Expresa la lista en términos de un formato de lista dispersa.
Esto puede verse como una contraoperación de PhasedQubitSparsePauliList.from_sparse_list()sin embargo, no se garantiza que el orden de los términos sea el mismo después de un viaje de ida y vuelta a una lista dispersa.
Ejemplos
>>> phased_qubit_sparse_list = PhasedQubitSparsePauliList.from_list(["IIXIZ", "IIZIX"])
>>> reconstructed = PhasedQubitSparsePauliList.from_sparse_list(phased_qubit_sparse_list.to_sparse_list(), qubit_sparse_list.num_qubits)El constructor que puede interpretar estas listas.