Skip to main content
IBM Quantum Platform

QubitSparsePauliList

class qiskit.quantum_info.QubitSparsePauliList(data, /, num_qubits=None)

GitHub

Bases: object

Uma lista de operadores Pauli sem fase armazenada em um formato qubit-esparso.


Representação

Cada operador Pauli individual na lista é um produto tensorial de operadores Pauli de um único qubit da forma P=nAi(n)P = \bigotimes_n A^{(n)}_i, para Ai(n){I,X,Y,Z}A^{(n)}_i \in \{I, X, Y, Z\}. A representação interna de um QubitSparsePauliList armazena somente os operadores de Pauli de um único qubit sem identidade. Isso torna significativamente mais eficiente a representação de listas de operadores Pauli com pesos baixos em um grande número de qubits. Por exemplo, a lista de operadores :math`n`-qubit [Z(0),Z(n1)][Z^{(0)}, \dots Z^{(n-1)}], em que Z(j)Z^{(j)} representa o operador ZZ no qubit jj e a identidade em todos os outros, pode ser armazenada em QubitSparsePauliList com uma quantidade linear de memória no número de qubits.

Indexando

QubitSparsePauliList comporta-se como uma sequência Python (a forma padrão, não a expandida collections.abc.Sequence). Os elementos da lista podem ser indexados por números inteiros, bem como iterados. Seja por meio de indexação ou iteração, os elementos da lista são retornados como QubitSparsePauli instâncias.


Construção

QubitSparsePauliList define vários construtores. O construtor padrão tentará delegar a um dos construtores mais específicos, com base no tipo de entrada. Você sempre pode usar os construtores específicos para ter mais controle sobre a construção.

Método
Resumo
from_label()Converta um rótulo de string denso em um elemento único QubitSparsePauliList.
from_list()Constrói a partir de uma lista de rótulos de strings densas.
from_sparse_list()Elementos fornecidos como uma lista de tuplas de rótulos de cadeia de caracteres esparsos e os qubits aos quais se aplicam.
from_pauli()Elevar um único Pauli em um elemento único QubitSparsePauliList.
from_qubit_sparse_paulis()Constrói a partir de uma lista de QubitSparsePaulis.

__new__

__new__(data, /, num_qubits=None)

O construtor padrão do QubitSparsePauliList.

Isso delega a um dos métodos de construtor de conversão explícitos, com base no tipo do argumento data . Se num_qubits for fornecido e o construtor implícito pelo tipo de data não aceitar um número, o número inteiro fornecido deverá corresponder à entrada.

Parâmetros

  • data - O tipo de dados da entrada. Pode ser outro QubitSparsePauliListe, nesse caso, a entrada é copiada, ou pode ser uma lista em um formato válido para from_list() ou from_sparse_list().
  • num_qubits (int|None) – Número opcional de qubits para a lista. Para a maioria das entradas de dados, isso pode ser inferido e não precisa ser passado. Isso só é necessário para listas vazias ou para o formato de lista esparsa. Se for fornecido desnecessariamente, deverá corresponder à entrada de dados.

Além dos construtores baseados em conversão, o método empty() pode ser usado para construir uma lista vazia de Paulis esparsos de qubit que atuam em um determinado número de qubits.


Conversões

Um arquivo existente QubitSparsePauliList existente pode ser convertido em outros formatos.

Método
Resumo
to_sparse_list()Expresse o observável em um formato de lista esparsa com elementos (paulis, indices).

Atributos

num_qubits

O número de qubits em que os operadores da lista atuam.

Isso não pode ser inferido de nenhuma outra forma ou valor, pois as identidades não são armazenadas explicitamente.

num_terms

O número de elementos na lista.


Métodos

apply_layout

apply_layout(layout, num_qubits=None)

Aplique um layout de transpilador a essa lista Pauli esparsa de qubits.

Isso permite o remapeamento de índices de qubit, por exemplo, se a lista for definida em termos de rótulos de qubit virtual.

Parâmetros

  • layout (TranspileLayout |list[int] | None) – O layout a ser aplicado. A maioria dos usos dessa função deve passar o campo QuantumCircuit.layout de um circuito que foi transpilado para hardware. Além disso, você pode passar uma lista de novos índices de qubit. Se for fornecido explicitamente como None, nenhum remapeamento será aplicado (mas você ainda poderá usar num_qubits para expandir os qubits na lista).
  • num_qubits (int | None) – O número de qubits para expandir os elementos da lista. Se não for fornecido, a saída terá a mesma largura da entrada fornecida TranspileLayoutou a mesma largura da entrada se o endereço layout for fornecido em outro formato.

Retorna

Um novo QubitSparsePauli com o layout fornecido aplicado.

clear

clear()

Limpa todos os elementos da lista, tornando-a igual à lista vazia novamente.

Isso não altera a capacidade das alocações internas; portanto, operações subsequentes de adição ou subtração resultantes da composição podem não exigir uma realocação.

Exemplos

>>> pauli_list = QubitSparsePauliList.from_list(["IXXXYY", "ZZYZII"])
>>> pauli_list.clear()
>>> assert pauli_list == QubitSparsePauliList.empty(pauli_list.num_qubits)

copy

copy()

Obtenha uma cópia dessa lista Pauli esparsa de qubits.

Exemplos

>>> qubit_sparse_pauli_list = QubitSparsePauliList.from_list(["IXZXYYZZ", "ZXIXYYZZ"])
>>> assert qubit_sparse_pauli_list == qubit_sparse_pauli_list.copy()
>>> assert qubit_sparse_pauli_list is not qubit_sparse_pauli_list.copy()

empty

static empty(num_qubits)

Obtém a lista vazia para um determinado número de qubits.

A lista vazia não contém elementos e é o elemento de identidade para unir duas QubitSparsePauliList instâncias.

Exemplos

Obtenha a lista vazia em 100 qubits:

>>> QubitSparsePauliList.empty(100)
<QubitSparsePauliList with 0 elements on 100 qubits: []>

from_label

static from_label(label, /)

Constrói uma lista com um único termo a partir de um rótulo de cadeia densa.

O rótulo deve ser uma sequência do alfabeto 'IXYZ'. O rótulo é interpretado de forma análoga a uma cadeia de bits. Em outras palavras, a letra mais à direita está associada ao qubit 0, e assim por diante. Isso é o mesmo que os rótulos de Pauli e SparsePauliOp.

Parâmetros

label (str) – o rótulo denso.

Exemplos

>>> QubitSparsePauliList.from_label("IIIIXZI")
<QubitSparsePauliList with 1 element on 7 qubits: [X_2 Z_1]>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)
Veja Também

from_list()

Uma generalização desse método que constrói uma lista a partir de vários rótulos.

from_list

static from_list(iter, /, *, num_qubits=None)

Construa uma lista Pauli esparsa de qubits a partir de uma lista de rótulos densos.

Isso é análogo a SparsePauliOp.from_list(). Nesse formulário denso, você deve fornecer todas as identidades explicitamente em cada rótulo.

O rótulo deve ser uma sequência do alfabeto 'IXYZ'. O rótulo é interpretado de forma análoga a uma cadeia de bits. Em outras palavras, a letra mais à direita está associada ao qubit 0, e assim por diante. Isso é o mesmo que os rótulos de Pauli e SparsePauliOp.

Parâmetros

  • iter (list[str]) – Lista de rótulos de strings densas.
  • num_qubits (int | None) – Não é necessário especificar isso se você tiver certeza de que iter não é uma sequência vazia, pois isso pode ser inferido a partir dos comprimentos dos rótulos. Se iter puder estar vazio, você deverá especificar esse argumento para não ambiguidade em quantos qubits os operadores atuam. Se isso for fornecido e iter não estiver vazio, o valor deverá corresponder aos comprimentos do rótulo.

Exemplos

Construa uma lista Pauli esparsa de qubits a partir de uma lista de rótulos:

>>> QubitSparsePauliList.from_list([
...     "IIIXX",
...     "IIYYI",
...     "IXXII",
...     "ZZIII",
... ])
<QubitSparsePauliList with 4 elements on 5 qubits:
    [X_1 X_0, Y_2 Y_1, X_3 X_2, Z_4 Z_3]>

Use num_qubits para eliminar a ambiguidade de entradas potencialmente vazias:

>>> QubitSparsePauliList.from_list([], num_qubits=10)
<QubitSparsePauliList with 0 elements on 10 qubits: []>

Esse método é equivalente a chamadas para from_sparse_list() com o campo explícito qubit-arguments definido como números inteiros decrescentes:

>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
...     (label, (3, 2, 1, 0))
...     for label in labels
... ])
>>> assert from_list == from_sparse_list
Veja Também

from_sparse_list()

Construa a lista a partir de rótulos sem identidades explícitas, mas com os qubits aos quais cada termo de operador de qubit único se aplica listado explicitamente.

from_pauli

static from_pauli(pauli, /)

Construir um QubitSparsePauliList a partir de uma única Pauli instância.

A lista de saída terá um único termo. Observe que a fase é eliminada.

Parâmetros

pauli (Pauli) – a única Pauli para converter.

Exemplos

>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> QubitSparsePauliList.from_pauli(pauli)
<QubitSparsePauliList with 1 element on 5 qubits: [Y_3 X_2 Z_1]>
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)

from_qubit_sparse_paulis

static from_qubit_sparse_paulis(obj, /, num_qubits=None)

Construir um QubitSparsePauliList a partir de instâncias individuais de QubitSparsePauli instâncias.

Todos os termos devem ter o mesmo número de qubits. Se fornecido, o argumento num_qubits deve corresponder aos termos.

Parâmetros

  • obj (Iterable[QubitSparsePauli]) – Iterável de termos individuais para criar a lista.
  • num_qubits (int | None) – O número de qubits em que os elementos da lista devem atuar. Isso geralmente é inferido a partir da entrada, mas pode ser explicitamente fornecido para lidar com o caso de um iterável vazio.

Retorna

A lista correspondente.

from_sparse_list

static from_sparse_list(iter, /, num_qubits)

Construa uma lista Pauli esparsa de qubits a partir de uma lista de rótulos e dos qubits aos quais cada item se aplica.

Isso é análogo a SparsePauliOp.from_sparse_list().

Os campos "labels" (rótulos) e "indices" (índices) das tuplas são associados por meio de um zíper. Por exemplo, isso significa que uma chamada para from_list() pode ser convertida para a forma usada por esse método, definindo o campo "indices" de cada tripla como (num_qubits-1, ..., 1, 0).

Parâmetros

  • iter (list[tuple[str, Sequence[int]]]) – tuplas de rótulos e os qubits aos quais cada termo de qubit único se aplica.
  • num_qubits (int) – o número de qubits em que os operadores da lista atuam.

Exemplos

Construa uma lista simples:

>>> QubitSparsePauliList.from_sparse_list(
...     [("ZX", (1, 4)), ("YY", (0, 3))],
...     num_qubits=5,
... )
<QubitSparsePauliList with 2 elements on 5 qubits: [X_4 Z_1, Y_3 Y_0]>

Esse método pode replicar o comportamento de from_list()se o campo qubit-arguments da tupla for definido como números inteiros decrescentes:

>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
...     (label, (3, 2, 1, 0))
...     for label in labels
... ])
>>> assert from_list == from_sparse_list
Veja Também

to_sparse_list()

O inverso desse método.

to_dense_array

to_dense_array()

Expresse a lista em um formato de matriz densa.

Cada entrada é um u8 seguindo a representação Pauli enquanto as linhas indexam Paulis distintos e as colunas qubits distintos.

Exemplos

>>> paulis = QubitSparsePauliList.from_sparse_list(
...     [("ZX", (1, 4)), ("YY", (0, 3)), ("XX", (0, 1))],
...     num_qubits=5,
... )
>>> paulis.to_dense_array()

to_pauli_list

to_pauli_list()

Retorna um PauliList representando a mesma lista sem fase de Paulis.

to_sparse_list

to_sparse_list()

Expresse a lista em termos de um formato de lista esparsa.

Isso pode ser visto como uma contraoperação de QubitSparsePauliList.from_sparse_list()no entanto, não é garantido que a ordem dos termos seja a mesma depois de uma viagem de ida e volta para uma lista esparsa.

Exemplos

>>> qubit_sparse_list = QubitSparsePauliList.from_list(["IIXIZ", "IIZIX"])
>>> reconstructed = QubitSparsePauliList.from_sparse_list(qubit_sparse_list.to_sparse_list(), qubit_sparse_list.num_qubits)
Veja Também

from_sparse_list()

O construtor que pode interpretar essas listas.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.