PauliList
class qiskit.quantum_info.PauliList(data)
Bases: BasePauli, LinearMixin, GroupMixin
Lista de operadores Pauli de N-qubit.
Essa classe é uma representação eficiente de uma lista de operadores Pauli operadores. Ele suporta 1D indexação de matriz numpy retornando um Pauli para índices inteiros ou um PauliList para índices de fatia ou lista.
Inicialização
Um objeto PauliList pode ser inicializado de várias maneiras.
PauliList(list[str])em que as cadeias de caracteres são a mesma representação com
Pauli.
PauliList(Pauli) and PauliList(list[Pauli])onde Pauli está
Pauli.
PauliList.from_symplectic(z, x, phase)em que
zexsão booleanos bidimensionaisnumpy.ndarraysephaseé um número inteiro em[0, 1, 2, 3].
Por exemplo,
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']Acesso a dados
As Paulis individuais podem ser acessadas e atualizadas usando o operador [] que aceita inteiros, listas ou fatias para selecionar subconjuntos de PauliList. Se for fornecido um número inteiro, ele retornará Pauli e não 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'])Iteração
As linhas da tabela Pauli podem ser iteradas como uma lista. A iteração também pode ser feita usando o rótulo ou a representação matricial de cada linha usando os botões label_iter() e matrix_iter() métodos.
Inicialize o site PauliList.
Parâmetros
data (Pauli orlist) – dados de entrada para a Paulis. Se a entrada for uma lista, cada item da lista deverá ser um objeto Pauli ou um str Pauli.
Aumentos
QiskitError - se a matriz de entrada tiver formato inválido.
Informações adicionais:
A matriz de entrada não é copiada, portanto, várias tabelas Pauli podem compartilhar a mesma matriz subjacente.
Atributos
dim
Retorna uma tupla (input_shape, output_shape).
num_qubits
Retorna o número de qubits se for um operador N-qubit ou None caso contrário.
phase
Retorna o expoente de fase do site PauliList.
qargs
Retorna os qargs do operador.
settings
Configurações de retorno.
shape
A forma completa do array()
size
O número de linhas de Pauli na tabela.
x
A matriz x para a representação simétrica.
z
A matriz z para a representação simpática.
Métodos
adjoint
anticommutes
anticommutes(other, qargs=None)
Retorne True se o outro operador de Pauli anticomuta com este.
Parâmetros
- other (PauliList) – outro operador PauliList.
- qargs (list) – qubits aos quais aplicar o produto de pontos (padrão:
None).
Retorna
True se a Paulis não se desloca para o trabalho, False se eles se deslocam para o trabalho.
Tipo de retorno
anticommutes_with_all
anticommutes_with_all(other)
Retorne os índices das linhas que anticomutam com a outra lista de Pauli.
Se other for uma lista de Pauli com várias linhas, o vetor retornado indexa as linhas da lista PauliList atual que são anticomutativas com todos os Paulis da outra lista. Se nenhuma linha satisfizer a condição, a matriz retornada estará vazia.
Parâmetros
other (PauliList) – um único Pauli ou várias linhas PauliList.
Retorna
matriz de índice das linhas de antitransporte.
Tipo de retorno
argsort
argsort(weight=False, phase=False)
Retorna índices para classificar as linhas da tabela.
O método de classificação padrão é a classificação lexicográfica por número de qubit. Ao usar o kwarg de peso, o resultado também pode ser classificado pelo número de termos não idênticos no Pauli, em que o conjunto de todos os Paulis de um determinado peso ainda é ordenado lexicograficamente.
Parâmetros
- weight (bool) – Opcionalmente, classifique por peso se for
True(Padrão:False). - phase (bool) – Opcionalmente, classifique por fase antes do peso ou por ordem (Padrão:
False).
Retorna
os índices para classificar a tabela.
Tipo de retorno
commutes
commutes(other, qargs=None)
Retorna True para cada Pauli que comuta com outro.
Parâmetros
- other (PauliList) – outro operador PauliList.
- qargs (list) – qubits aos quais aplicar o produto de pontos (padrão:
None).
Retorna
True se a Paulis se desloca para o trabalho, False se eles são contra o trabalho.
Tipo de retorno
commutes_with_all
commutes_with_all(other)
Retorna os índices das linhas que comutam other.
Se other for uma lista de Pauli com várias linhas, o vetor retornado indexa as linhas do PauliList atual que comutam com todos os Paulis em outro. Se nenhuma linha satisfizer a condição, a matriz retornada estará vazia.
Parâmetros
other (PauliList) – um único Pauli ou várias linhas PauliList.
Retorna
matriz de índice das linhas de comutação.
Tipo de retorno
compose
compose(other, qargs=None, front=False, inplace=False)
Retorna a composição self∘other para cada Pauli na lista.
Parâmetros
- other (PauliList) – outro PauliList.
- qargs (None or list) – qubits aos quais aplicar o produto de pontos (Padrão:
None). - front (bool) – Se verdadeiro, use o método de composição de pontos [. Padrão:
False]. - inplace (bool) – Se
Trueatualizar no local (padrão:False).
Retorna
a lista de Paulis compostos.
Tipo de retorno
Aumentos
QiskitError - se outro não puder ser convertido em um PauliList, não tiver 1 ou o mesmo número de Paulis que a lista atual, ou tiver o número errado de qubits para o qargs especificado.
conjugate
copy
delete
delete(ind, qubit=False)
Retorna uma cópia com as linhas Pauli excluídas da tabela.
Ao excluir qubits, o índice do qubit é o mesmo que o índice da coluna das matrizes X e Z subjacentes.
Parâmetros
- ind (int orlist) – índice(s) a ser(em) excluído(s).
- qubit (bool) – se
Trueexcluir colunas de qubit, caso contrário, excluirá linhas de Pauli (Padrão:False).
Retorna
a tabela resultante com as entradas removidas.
Tipo de retorno
Aumentos
QiskitError - se ind estiver fora dos limites do tamanho da matriz ou do número de qubits.
dot
dot(other, qargs=None, inplace=False)
Retorna a composição other∘self para cada Pauli na lista.
Parâmetros
- other (PauliList) – outro PauliList.
- qargs (None or list) – qubits aos quais aplicar o produto de pontos (Padrão:
None). - inplace (bool) – Se for True, atualize no local (padrão:
False).
Retorna
a lista de Paulis compostos.
Tipo de retorno
Aumentos
QiskitError - se outro não puder ser convertido em um PauliList, não tiver 1 ou o mesmo número de Paulis que a lista atual, ou tiver o número errado de qubits para o qargs especificado.
equiv
equiv(other)
Comparação de entrada da equivalência de Pauli até a fase global.
Parâmetros
other (PauliList orPauli) – um objeto de comparação.
Retorna
Uma matriz de True ou False para equivalência de entrada
da tabela atual.
Tipo de retorno
np.ndarray
evolve
evolve(other, qargs=None, frame='h')
Executa a evolução da imagem de Heisenberg (padrão) ou de Schrödinger do Pauli por um Clifford e retorna o Pauli evoluído.
A evolução da imagem de Schrödinger pode ser escolhida passando o parâmetro frame='s'. Essa opção produz um cálculo mais rápido.
A imagem de Heisenberg evolui o Pauli como .
A imagem de Schrödinger evolui o Pauli como .
Parâmetros
- other (Pauli orClifford orQuantumCircuit) – O operador de Clifford para evoluir.
- qargs (list) – uma lista de qubits aos quais aplicar o Clifford.
- frame (string) –
'h'para Heisenberg (padrão) ou's'para a estrutura de Schrödinger.
Retorna
o Pauli (imagem de Heisenberg) ou o Pauli (imagem de Schrödinger).
Tipo de retorno
Aumentos
QiskitError - se o número Clifford de qubits e qargs não corresponder.
expand
expand(other)
Retorna o produto de expansão de cada Pauli na lista.
Parâmetros
other (PauliList) – outro PauliList.
Retorna
a lista de produtos tensoriais de Paulis.
Tipo de retorno
Aumentos
QiskitError - se outro não puder ser convertido em um PauliList, não tiver 1 ou o mesmo número de Paulis que a lista atual.
from_symplectic
classmethod from_symplectic(z, x, phase=0)
Construa um PauliList a partir de um dado simétrico.
Parâmetros
- z (np.ndarray) – 2D boolean Matriz Numpy.
- x (np.ndarray) – 2D boolean Matriz Numpy.
- phase (np.ndarray or None) – 1D matriz de inteiros retirada de Z_4.
Retorna
o site construído PauliList.
Tipo de retorno
group_commuting
group_commuting(qubit_wise=False)
Particionar um PauliList em conjuntos de cadeias de Pauli comutáveis.
Parâmetros
qubit_wise (bool) –
se a regra de comutação é aplicada a todo o operador ou em uma base por qubit. Por exemplo:
>>> 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'])]Retorna
Lista de PauliLists onde cada PauliList contém operadores Pauli comutantes.
Tipo de retorno
group_qubit_wise_commuting
group_qubit_wise_commuting()
Particionar um PauliList em conjuntos de cadeias de Pauli mutuamente comutáveis em termos de qubit.
Retorna
Lista de PauliLists onde cada PauliList contém operadores Pauli comutáveis.
Tipo de retorno
input_dims
input_dims(qargs=None)
Retorna uma tupla de dimensão de entrada para os subsistemas especificados.
insert
insert(ind, value, qubit=False)
Insira Paulis na tabela.
Ao inserir qubits, o índice do qubit é o mesmo que o índice da coluna das matrizes X e Z subjacentes.
Parâmetros
- ind (int) – índice a ser inserido.
- value (PauliList) – valores a serem inseridos.
- qubit (bool) – se
Trueinserir colunas de qubit, caso contrário, inserir linhas de Pauli (Padrão:False).
Retorna
a tabela resultante com as entradas inseridas.
Tipo de retorno
Aumentos
QiskitError - se o índice de inserção for inválido.
inverse
label_iter
label_iter()
Retorna um iterador de representação de rótulos.
Esse é um iterador preguiçoso que converte cada linha em um rótulo de cadeia de caracteres somente à medida que é usado. Para converter a tabela inteira em rótulos, use o método to_labels() método.
Retorna
objeto iterador de rótulos para o site PauliList.
Tipo de retorno
LabelIterator
matrix_iter
matrix_iter(sparse=False)
Retorna um iterador de representação de matriz.
Esse é um iterador preguiçoso que converte cada linha na representação da matriz de Pauli somente à medida que ela é usada. Para converter a tabela inteira em matrizes, use o método to_matrix() método.
Parâmetros
sparse (bool) – opcionalmente, retorna matrizes CSR esparsas se True, caso contrário, retorna matrizes em forma de matriz Numpy (Padrão: False)
Retorna
objeto iterador de matriz para PauliList.
Tipo de retorno
MatrixIterator
noncommutation_graph
noncommutation_graph(qubit_wise)
Crie o gráfico de não comutação deste PauliList.
Isso transforma o problema de agrupamento do operador de medição em um problema de coloração de gráfico. O gráfico construído contém um nó para cada Pauli. Os nós estarão conectados para quaisquer dois termos de Pauli que não _not_ comutam.
Parâmetros
qubit_wise (bool) – se a regra de comutação é aplicada a todo o operador ou em uma base por qubit.
Retorna
o gráfico de não comutação com nós para cada Pauli e bordas
indicando uma relação de não comutação. Cada nó conterá o índice do termo de Pauli ao qual corresponde em seus dados. As bordas do gráfico não contêm dados.
Tipo de retorno
output_dims
output_dims(qargs=None)
Retorna uma tupla de dimensão de saída para os subsistemas especificados.
power
power(n)
Retorna a composição de um operador consigo mesmo n vezes.
Parâmetros
n (int) – o número de vezes para compor com o self ( n>0 ).
Retorna
o operador composto n vezes.
Tipo de retorno
Aumentos
QiskitError - se as dimensões de entrada e saída do operador não forem iguais ou se a potência não for um número inteiro positivo.
reshape
reshape(input_dims=None, output_dims=None, num_qubits=None)
Retorna uma cópia superficial com dimensões reformuladas do subsistema de entrada e saída.
Parâmetros
- input_dims (None or tuple) – novas dimensões de entrada do subsistema. Se for None (Nenhum), as dimensões de entrada originais serão preservadas [Padrão: Nenhum].
- output_dims (None or tuple) – novas dimensões de saída do subsistema. Se for None (Nenhum), os dims de saída originais serão preservados [Padrão: Nenhum].
- num_qubits (None or int) – remodelar para um operador N-qubit [Padrão: Nenhum].
Retorna
retorna self com dimensões de entrada e saída remodeladas.
Tipo de retorno
BaseOperator
Aumentos
QiskitError - se o tamanho combinado de todas as dimensões de entrada do subsistema ou de saída do subsistema não for constante.
sort
sort(weight=False, phase=False)
Classifique as linhas da tabela.
O método de classificação padrão é a classificação lexicográfica por número de qubit. Ao usar o kwarg de peso, o resultado também pode ser classificado pelo número de termos não idênticos no Pauli, em que o conjunto de todos os Paulis de um determinado peso ainda é ordenado lexicograficamente.
Exemplo
Considere a ordenação aleatória de todos os 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) – opcionalmente, classificar por peso se for
True(Padrão:False). - phase (bool) – Opcionalmente, classifique por fase antes do peso ou por ordem (Padrão:
False).
Retorna
uma cópia ordenada da tabela original.
Tipo de retorno
tensor
tensor(other)
Retorna o produto tensorial com cada Pauli na lista.
Parâmetros
other (PauliList) – outro PauliList.
Retorna
a lista de produtos tensoriais de Paulis.
Tipo de retorno
Aumentos
QiskitError - se outro não puder ser convertido em um PauliList, não tiver 1 ou o mesmo número de Paulis que a lista atual.
to_labels
to_labels(array=False)
Converta um PauliList em uma lista de rótulos de cadeia de Pauli.
Para PauliLists grandes, a conversão usando o array=True kwarg será mais eficiente, pois aloca antecipadamente a memória para a matriz completa de rótulos do Numpy.
Rótulo | Simpático | Matriz |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Parâmetros
array (bool) – retorna uma matriz Numpy se True, caso contrário, retorna uma lista (Padrão: False).
Retorna
As linhas do site PauliList em forma de rótulo.
Tipo de retorno
to_matrix
to_matrix(sparse=False, array=False)
Converta em uma lista ou matriz de matrizes Pauli.
Para PauliLists grandes, a conversão usando o kwarg array=True será mais eficiente, pois aloca antecipadamente na memória uma matriz rank-3 Numpy completa de matrizes.
Rótulo | Simpático | Matriz |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Parâmetros
- sparse (bool) – se
Trueretornar matrizes CSR esparsas, caso contrário, retornar matrizes Numpy densas (Padrão:False). - array (bool) – retornar como rank-3 matriz numpy se
True, caso contrário, retornar uma lista de matrizes Numpy (Padrão:False).
Retorna
Uma lista de matrizes de Pauli densas se array=False e sparse=False. lista: Uma lista de matrizes de Pauli esparsas se array=False e sparse=True. matriz: Uma matriz densa de matrizes de Pauli de dimensão rank-3, se array=True.
Tipo de retorno
transpose
unique
unique(return_index=False, return_counts=False)
Devolver a Paulis exclusiva da mesa.
Exemplo
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) – Se for o caso
True, retorne também os índices que resultam na matriz única. (Padrão:False) - return_counts (bool) – Se
True, retorne também o número de vezes que cada item exclusivo aparece na tabela.
Retorna
exclusivo
a tabela das linhas exclusivas.
unique_indices: np.ndarray, opcional
Os índices das primeiras ocorrências dos valores exclusivos na matriz original. Fornecido somente se return_index for True.
unique_counts: np.array, opcional
O número de vezes que cada um dos valores exclusivos aparece na matriz original. Fornecido somente se return_counts for True.
Tipo de retorno