Skip to main content
IBM Quantum Platform

Pauli

class qiskit.quantum_info.Pauli(data=None)

GitHub

Bases: BasePauli

Operador Pauli de N-qubit.

Essa classe representa um operador PP do grupo Pauli completo de nn -qubit

P=(i)qPn1...P0P = (-i)^{q} P_{n-1} \otimes ... \otimes P_{0}

em que qZ4q\in \mathbb{Z}_4 e Pi{I,X,Y,Z}P_i \in \{I, X, Y, Z\} são matrizes de Pauli de um único qubit:

I=(1001),X=(0110),Y=(0ii0),Z=(1001).I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}.

Inicialização

Um objeto Pauli pode ser inicializado de várias maneiras:

Pauli(obj)

em que obj é uma cadeia de Pauli, Pauli ou ScalarOp ou um operador Pauli ou QuantumCircuit contendo apenas Pauli gates.

Pauli((z, x, phase))

em que z e x são booleanos numpy.ndarrays e phase é um número inteiro em [0, 1, 2, 3].

Pauli((z, x))

equivalente a Pauli((z, x, 0)) com fase trivial.

Representação de strings

Um nn -qubit Pauli pode ser representado por uma string que consiste em nn caracteres de ['I', 'X', 'Y', 'Z'] e, opcionalmente, um coeficiente de fase em ['', '-i', '-', 'i']. Por exemplo: 'XYZ' ou '-iZIZ'.

Na representação em cadeia, qubit-0 corresponde ao caractere Pauli mais à direita e qubit- (n1)(n-1) ao caractere Pauli mais à esquerda. Por exemplo, 'XYZ' representa XYZX\otimes Y \otimes Z com 'Z' em qubit-0, 'Y' em qubit-1 e 'X' em qubit-2.

A representação da cadeia de caracteres pode ser convertida em um Pauli usando a inicialização da classe (Pauli('-iXYZ')). Um objeto Pauli pode ser convertido de volta para a representação de string usando o método to_label() ou str(pauli).

Nota

Usar str para converter um Pauli em uma string truncará a string retornada para um grande número de qubits, enquanto to_label() retornará a string completa sem truncamento. O comprimento de truncamento padrão é de 50 caracteres. O valor padrão pode ser alterado com a definição do atributo class __truncate__ como um valor inteiro. Se definido como 0 , não será realizado nenhum truncamento.

Representação de matrizes

A estrutura de dados interna de um nn -qubit Pauli é composta por dois vetores booleanos de comprimento nn zZ2Nz \in \mathbb{Z}_2^N, xZ2Nx \in \mathbb{Z}_2^N e um inteiro qZ4q \in \mathbb{Z}_4 que define o operador Pauli

P=(i)q+zxZzXx.P = (-i)^{q + z\cdot x} Z^z \cdot X^x.

O kk -ésimo qubit corresponde à kk -ésima entrada nas matrizes zz e xx

P=Pn1...P0Pk=(i)z[k]x[k]Zz[k]Xx[k]\begin{aligned} P &= P_{n-1} \otimes ... \otimes P_{0} \\ P_k &= (-i)^{z[k] * x[k]} Z^{z[k]}\cdot X^{x[k]} \end{aligned}

onde z[k] = P.z[k], x[k] = P.x[k] respectivamente.

Os arrays zz e xx podem ser acessados e atualizados usando os comandos z e x respectivamente. O número inteiro da fase qq pode ser acessado e atualizado usando a propriedade phase propriedade.

Representação do operador de matriz

Os Pauli's podem ser convertidos para (2n,2n)(2^n, 2^n) Operator usando o método to_operator() , ou para uma matriz complexa densa ou esparsa usando o método to_matrix() método.

Acesso a dados

O qubit individual Paulis pode ser acessado e atualizado usando o operador [] , que aceita inteiros, listas ou fatias para selecionar subconjuntos de Paulis. Observe que a seleção de subconjuntos de Pauli descartará a fase do Pauli atual.

Por exemplo:

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]))

Inicialize a Pauli.

Ao usar os dados de entrada da matriz simpática, os argumentos z e x devem ser fornecidos; no entanto, o primeiro argumento (z) pode ser usado sozinho para o rótulo da cadeia de caracteres, operador Pauli ou ScalarOp dados de entrada.

Parâmetros

data (str ortuple orPauli orScalarOp) – dados de entrada para Pauli. Se a entrada for uma tupla, deverá ter o formato (z, x) ou (z, x, phase) , em que z e x são matrizes Numpy booleanas e phase é um número inteiro de Z4\mathbb{Z}_4. Se a entrada for uma string, deverá ser uma concatenação de uma phase e uma string Pauli (por exemplo, 'XYZ', '-iZIZ') onde uma string de fase é uma combinação de no máximo três caracteres de ['+', '-', ''], ['1', ''] e ['i', 'j', ''] nessa ordem, por exemplo, '', '-1j' enquanto uma string Pauli é 1 ou mais caracteres de 'I', 'X', 'Y', ou 'Z', por exemplo, 'Z', 'XIYY'.

Aumentos

QiskitError - se a matriz de entrada tiver formato inválido.


Atributos

dim

Retorna uma tupla (input_shape, output_shape).

name

Identificador de cadeia de caracteres exclusivo para o tipo de operação.

num_clbits

Número de bits clássicos.

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 grupo para o Pauli.

qargs

Retorna os qargs do operador.

settings

Configurações de retorno.

x

O vetor x para o Pauli.

z

O vetor z para o Pauli.


Métodos

adjoint

adjoint()

GitHub

Retorna o adjunto do Operador.

anticommutes

anticommutes(other, qargs=None)

GitHub

Retorna True se o outro Pauli for incompatível com o próprio.

Parâmetros

  • other (Pauli) – outro operador de Pauli.
  • qargs (list) – qubits aos quais aplicar o produto de pontos (padrão: Nenhum).

Retorna

Verdadeiro se os Pauli's forem anticomutantes, Falso se forem comutantes.

Tipo de retorno

bool

apply_layout

apply_layout(layout, num_qubits=None)

GitHub

Aplique um layout de transpilador a isso Pauli

Parâmetros

  • layout (TranspileLayout |list[int] | None) – Ou um TranspileLayoutuma lista de números inteiros ou None. Se o layout e o num_qubits não forem nenhum, uma cópia do operador será retornada.
  • num_qubits (int | None) – O número de qubits para os quais o operador deve ser expandido. Se não for fornecido, se layout for um TranspileLayout o número de qubits do circuito de saída do transpilador será usado por padrão. Se layout for uma lista de números inteiros, a permutação especificada será aplicada sem nenhuma expansão. Se o layout for None (Nenhum), o operador será expandido para o número de qubits fornecido.

Retorna

Um novo Pauli com o layout fornecido aplicado

Tipo de retorno

Pauli

commutes

commutes(other, qargs=None)

GitHub

Retorna True se o Pauli comuta com outro.

Parâmetros

  • other (Pauli orPauliList) – outro operador de Pauli.
  • qargs (list) – qubits aos quais aplicar o produto de pontos (padrão: Nenhum).

Retorna

Verdadeiro se os Pauli's se deslocam, Falso se eles se opõem ao deslocamento.

Tipo de retorno

bool

compose

compose(other, qargs=None, front=False, inplace=False)

GitHub

Retorna a composição do operador com outro Pauli.

Parâmetros

  • other (Pauli) – um objeto Pauli.
  • qargs (list or None) – qubits nos quais aplicar o produto escalar (padrão: None).
  • front (bool) – Se True, compor usando o operador multiplicação à direita, em vez de multiplicação à esquerda [, padrão: False].
  • inplace (bool) – Se for True, atualize no local (padrão: False).

Retorna

A Pauli composta.

Tipo de retorno

Pauli

Aumentos

QiskitError - se outro não puder ser convertido em um operador ou tiver dimensões incompatíveis para os subsistemas especificados.

Nota

Por padrão, a composição (&) é definida como multiplicação de matriz à esquerda para operadores de matriz, enquanto dot() é definido como multiplicação de matriz à direita. Ou seja, A & B == A.compose(B) é equivalente a B.dot(A) quando A e B são do mesmo tipo.

A configuração do kwarg front=True muda isso para multiplicação de matriz à direita e é equivalente ao método dot() método A.dot(B) == A.compose(B, front=True).

conjugate

conjugate()

GitHub

Retorna o conjugado complexo do Pauli com relação à base Z.

copy

copy()

GitHub

Faça uma cópia profunda do operador atual.

delete

delete(qubits)

GitHub

Retorna um Pauli com qubits excluídos.

Parâmetros

qubits (int orlist) – qubits para excluir de Pauli.

Retorna

o Pauli resultante com os qubits especificados removidos.

Tipo de retorno

Pauli

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)

GitHub

Retorna o operador multiplicado à direita self * other.

Parâmetros

  • other (Pauli) – um objeto operador.
  • qargs (list or None) – qubits nos quais aplicar o produto escalar (padrão: None).
  • inplace (bool) – Se for True, atualize no local (padrão: False).

Retorna

O operador self * other.

Tipo de retorno

Pauli

equiv

equiv(other)

GitHub

Retorna True se os Pauli's forem equivalentes até a fase de grupo.

Parâmetros

other (Pauli) – um objeto operador.

Retorna

É verdade se os Pauli's forem equivalentes até a fase de grupo.

Tipo de retorno

bool

evolve

evolve(other, qargs=None, frame='h')

GitHub

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 P=C.P.CP^\prime = C^\dagger.P.C.

A imagem de Schrödinger evolui o Pauli como P=C.P.CP^\prime = C.P.C^\dagger.

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 C.P.CC^\dagger.P.C (imagem de Heisenberg) ou o Pauli C.P.CC.P.C^\dagger (imagem de Schrödinger).

Tipo de retorno

Pauli

Aumentos

QiskitError - se o número Clifford de qubits e qargs não corresponder.

expand

expand(other)

GitHub

Retorna o produto tensorial de ordem inversa com outro Pauli.

Parâmetros

other (Pauli) – um objeto Pauli.

Retorna

o produto tensorial bab \otimes a, onde aa

é o Pauli atual, e bb é o outro Pauli.

Tipo de retorno

Pauli

input_dims

input_dims(qargs=None)

GitHub

Retorna uma tupla de dimensão de entrada para os subsistemas especificados.

insert

insert(qubits, value)

GitHub

Insira um Pauli em um valor de qubit específico.

Parâmetros

  • qubits (int orlist) – índice de qubits a ser inserido.
  • value (Pauli) – valor a ser inserido.

Retorna

o Pauli resultante com as entradas inseridas.

Tipo de retorno

Pauli

Aumentos

QiskitError - se os qubits de inserção forem inválidos.

inverse

inverse()

GitHub

Retorna o inverso do Pauli.

output_dims

output_dims(qargs=None)

GitHub

Retorna uma tupla de dimensão de saída para os subsistemas especificados.

power

power(n)

GitHub

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

Clifford

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)

GitHub

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), os dims de entrada originais serão preservados [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.

set_truncation

classmethod set_truncation(val)

GitHub

Defina o número máximo de caracteres Pauli a serem exibidos antes do truncamento.

Parâmetros

val (int) – o número de caracteres.

Nota

O truncamento será desativado se o valor de truncamento for definido como 0.

tensor

tensor(other)

GitHub

Retorna o produto tensorial com outro Pauli.

Parâmetros

other (Pauli) – um objeto Pauli.

Retorna

**O produto tensorial aba \otimes b, onde aa **

é o Pauli atual, e bb é o outro Pauli.

Tipo de retorno

Pauli

Nota

O produto tensor pode ser obtido usando o operador binário ^ . Portanto, a.tensor(b) é equivalente a a ^ b.

to_instruction

to_instruction()

GitHub

Converter para instrução de circuito Pauli.

to_label

to_label()

GitHub

Converte um Pauli em um rótulo de cadeia de caracteres.

Nota

A diferença entre to_label e __str__() é que este último trunca a saída quando há um grande número de qubits.

Retorna

o rótulo da cadeia de Pauli.

Tipo de retorno

str

to_matrix

to_matrix(sparse=False)

GitHub

Converta em uma matriz Numpy ou em uma matriz CSR esparsa.

Parâmetros

sparse (bool) – se True retornar matrizes CSR esparsas; caso contrário, retornar matrizes Numpy densas (padrão: False).

Retorna

A matriz de Pauli.

Tipo de retorno

Matriz

transpose

transpose()

GitHub

Retorna a transposição de cada Pauli na lista.

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