Operador
class qiskit.quantum_info.Operator(data, input_dims=None, output_dims=None)
Bases: LinearOp
Classe de operador de matriz
Isso representa um operador de matriz que irá evolve() a Statevector por multiplicação matriz-vetor
e vontade evolve() a DensityMatrix por multiplicação à esquerda e à direita
Por exemplo, o seguinte operador aplicado ao estado zero o altera para o estado um :
>>> import numpy as np
>>> from qiskit.quantum_info import Operator
>>> op = Operator(np.array([[0.0, 1.0], [1.0, 0.0]])) # Represents Pauli X operator>>> from qiskit.quantum_info import Statevector
>>> sv = Statevector(np.array([1.0, 0.0]))
>>> sv.evolve(op)
Statevector([0.+0.j, 1.+0.j],
dims=(2,))>>> from qiskit.quantum_info import DensityMatrix
>>> dm = DensityMatrix(np.array([[1.0, 0.0], [0.0, 0.0]]))
>>> dm.evolve(op)
DensityMatrix([[0.+0.j, 0.+0.j],
[0.+0.j, 1.+0.j]],
dims=(2,))Inicializa um objeto operador.
Parâmetros
- data (QuantumCircuit |Operation | BaseOperator | np.ndarray) – dados para inicializar o operador.
- input_dims (tuple | None) – as dimensões do subsistema de entrada.
- output_dims (tuple | None) – as dimensões do subsistema de saída.
Aumentos
QiskitError - se os dados de entrada não puderem ser inicializados como um operador.
Informações adicionais:
Se as dimensões de entrada ou saída forem Nenhuma, elas serão determinadas automaticamente a partir dos dados de entrada. Se os dados de entrada forem uma matriz Numpy de formato ( 2**N, 2**N ), serão usados sistemas de qubit. Se o operador de entrada não for um operador N-qubit, ele atribuirá um único subsistema com dimensão especificada pela forma da entrada. Observe que dois operadores inicializados por esse método só são considerados equivalentes se corresponderem à ordem canônica do qubit (ou permutação). Veja Operator.from_circuit() para especificar uma permutação de qubit diferente.
Atributos
atol
Valor Padrão: 1e-08
data
A matriz Numpy subjacente.
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.
qargs
Retorna os qargs do operador.
rtol
Valor Padrão: 1e-05
settings
Retornar as configurações do operador.
Métodos
adjoint
apply_permutation
apply_permutation(perm, front=False)
Modifica os dados do operador, compondo-os com uma permutação.
Parâmetros
- perm (list) – padrão de permutação, descrevendo quais qubits ocupam as posições 0, 1, 2, etc. após a aplicação da permutação.
- front (bool) – Quando definido como
True, a permutação é aplicada antes do operador; quando definido comoFalse, a permutação é aplicada após o operador.
Retorna
O operador modificado.
Tipo de retorno
Aumentos
QiskitError - se o tamanho do padrão de permutação não corresponder às dimensões do operador.
compose
compose(other, qargs=None, front=False)
Retorna a composição do operador com outro operador.
Parâmetros
- other (Operator) – um objeto Operator.
- qargs (list or None) – uma lista de posições do subsistema às quais aplicar outras. Se None for aplicado a todos os subsistemas (padrão: None).
- front (bool) – Se True, compor usando o operador multiplicação à direita, em vez de multiplicação à esquerda [, padrão: False].
Retorna
O operador composto.
Tipo de retorno
Aumentos
QiskitError - se outro não puder ser convertido em um operador ou tiver dimensões incompatíveis para os subsistemas especificados.
Por padrão, a composição (&) é definida como multiplicação de matriz à esquerda para operadores de matriz, enquanto @ (equivalente a dot()) é definida como multiplicação de matriz à direita. Ou seja, A & B == A.compose(B) é equivalente a B @ 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
copy
dot
dot(other, qargs=None)
Retorna o operador multiplicado à direita self * other.
Parâmetros
- other (Operator) – um objeto operador.
- qargs (list or None) – uma lista de posições do subsistema às quais aplicar outras. Se None for aplicado a todos os subsistemas (padrão: None).
Retorna
A matriz correta multiplicou o Operator.
Tipo de retorno
O produto escalar pode ser obtido usando o operador binário @ . Portanto, a.dot(b) é equivalente a a @ b.
draw
draw(output=None, **drawer_args)
Retorna uma visualização do Operador.
repr : String of the state's __repr__.
text : ASCII TextMatrix que pode ser impresso no console.
latex : Um objeto IPython Latex para exibição em Jupyter Notebooks.
latex_source : Fonte ASCII bruta e não compilada para gerar uma matriz usando LaTeX.
Parâmetros
- output (str) – Selecione o método de saída a ser usado para desenhar o estado. As opções válidas são repr, text, latex, latex_source, o padrão é repr.
- drawer_args - Argumentos a serem passados diretamente para a função de desenho ou construtor relevante ( TextMatrix( ), array_to_latex()). Consulte a função relevante em qiskit.visualization para obter a documentação da função.
Retorna
Desenho do Operador.
Tipo de retorno
str ou TextMatrix ou IPython.display.Latex
Aumentos
- ValueError - quando um método de saída inválido é selecionado.
- MissingOptionalLibrary - Se o site SymPy não estiver instalado e
'latex'ou'latex_source'for selecionado paraoutput.
equiv
equiv(other, rtol=None, atol=None)
Retorna True se os operadores forem equivalentes até a fase global.
Parâmetros
- other (Operator) – um objeto operador.
- rtol (float) – valor de tolerância relativa para comparação.
- atol (float) – valor de tolerância absoluta para comparação.
Retorna
Verdadeiro se os operadores forem equivalentes até a fase global.
Tipo de retorno
expand
expand(other)
Retorna o produto tensorial de ordem inversa com outro Operator.
Parâmetros
other (Operator) – um objeto Operator.
Retorna
o produto tensorial , onde
é o Operador atual, e é o outro Operador.
Tipo de retorno
from_circuit
classmethod from_circuit(circuit, ignore_set_layout=False, layout=None, final_layout=None)
Crie um novo objeto Operator a partir de um objeto QuantumCircuit
Embora um objeto QuantumCircuit possa ser passado diretamente como data para o construtor da classe, isso não oferece opções sobre como o circuito é usado para criar um objeto Operator. Esse método construtor permite que você controle como o Operator é criado para que possa ser ajustado para um caso de uso específico.
Por padrão, esse método construtor permutará os qubits com base em um layout inicial configurado (ou seja, depois de ter sido transpilado). Ele também oferece uma opção para fornecer manualmente um objeto Layout diretamente.
Parâmetros
- circuit (QuantumCircuit) – O
QuantumCircuitpara criar um objeto Operator. - ignore_set_layout (bool) – Quando definido como
True, se a entradacircuittiver um layout definido, ele será ignorado - layout (Layout) – Se especificado, esse kwarg pode ser usado para especificar um layout específico a ser usado para permutar os qubits no
Operator. Se isso for especificado, será usado em vez de um layout contido na entradacircuit. Se especificado, os bits virtuais noLayoutdevem estar presentes na entradacircuit. - final_layout (Layout) – Se especificado, esse kwarg pode ser usado para representar a permutação de saída causada por inserções de swap durante o estágio de roteamento do transpilador.
Retorna
Um operador que representa o circuito de entrada
Tipo de retorno
from_label
classmethod from_label(label)
Retorna um produto tensorial de operadores de um único qubit.
Parâmetros
label (string) – cadeia de operadores de um único qubit.
Retorna
O operador N-qubit.
Tipo de retorno
Aumentos
QiskitError - se o rótulo contiver caracteres inválidos ou se o comprimento do rótulo for maior do que um número_qubits explicitamente especificado.
Informações adicionais:
Os rótulos correspondem às matrizes de qubit único: 'I': [ [1, 0], [0, 1] ] 'X': [ [0, 1], [1, 0] ] 'Y': [ [0, -1j], [1j, 0] ] 'Z': [ [1, 0], [0, -1] ] 'H': [ [1, 1], [1, -1] ] / sqrt(2) 'S': [ [1, 0], [0, 1j] ] 'T': [ [1, 0], [0, ( 1+1j ) / sqrt(2)] ] '0': [ [1, 0], [0, 0] ] '1': [ [0, 0], [0, 1] ] '+': [ [0.5, 0.5], [0.5, 0.5] ] '-': [ [0.5, -0.5], [-0.5, 0.5] ] 'r': [ [0.5, -0.5j], [0.5j, 0.5] ] 'l': [ [0.5, 0.5j], [-0.5j, 0.5] ]
input_dims
input_dims(qargs=None)
Retorna uma tupla de dimensão de entrada para os subsistemas especificados.
is_unitary
output_dims
output_dims(qargs=None)
Retorna uma tupla de dimensão de saída para os subsistemas especificados.
power
power(n, branch_cut_rotation=3.141592653589793e-12, assume_unitary=False)
Retorna a potência da matriz do operador.
Potências não inteiras de operadores com um valor próprio cuja fase complexa é têm um corte de ramo no plano complexo, o que torna o cálculo da raiz principal em torno desse corte sujeito a precisão/diferenças na implementação do BLAS. Por exemplo, a raiz quadrada de Pauli Y pode retornar a rotação ou Y, dependendo do fato de o valor próprio -1 ser encontrado como complex(-1, tiny) ou complex(-1, -tiny). Esses valores próprios são realmente comuns em informações quânticas, portanto, essa função primeiro gira a matriz de entrada para deslocar o corte de ramo para um ponto muito menos comum. Os problemas subjacentes de precisão numérica em torno do ponto de corte de ramificação permanecem, se um operador tiver um valor próprio próximo a essa fase. A magnitude dessa rotação pode ser controlada com o parâmetro branch_cut_rotation .
A escolha do site branch_cut_rotation afeta a raiz principal que é encontrada. Por exemplo, a raiz quadrada de ZGate será calculada como SGate ou SdgGate dependendo do sentido em que a rotação for feita:
from qiskit.circuit import library
from qiskit.quantum_info import Operator
z_op = Operator(library.ZGate())
assert z_op.power(0.5, branch_cut_rotation=1e-3) == Operator(library.SGate())
assert z_op.power(0.5, branch_cut_rotation=-1e-3) == Operator(library.SdgGate())Parâmetros
- n (float) – o poder de elevar a matriz para.
- branch_cut_rotation (float) – O ângulo de rotação a ser aplicado ao corte do ramo no plano complexo. Isso afasta o corte do ramo do ponto comum de , mas pode fazer com que uma raiz diferente seja selecionada como a raiz principal. A rotação é no sentido anti-horário, seguindo a convenção padrão para a fase complexa.
- assume_unitary (bool) – se
True, presume-se que o operador seja unitário. Nesse caso, para potências fracionárias, empregamos uma implementação mais rápida com base na decomposição de Schur.
Retorna
o operador resultante O ** n.
Tipo de retorno
Aumentos
QiskitError - se as dimensões de entrada e saída do operador não forem iguais.
Só é seguro definir o argumento assume_unitary como True quando o operador for unitário (ou, de forma mais geral, normal). Caso contrário, a função retornará um resultado incorreto.
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.
reverse_qargs
reverse_qargs()
Retorna um Operator com ordenação de subsistema invertida.
Para um operador de produto tensorial, isso é equivalente a inverter a ordem dos subsistemas de produto tensorial. Para um operador , o operador retornado será .
Retorna
o operador com a ordem do subsistema invertida.
Tipo de retorno
tensor
tensor(other)
Retorna o produto tensorial com outro Operator.
Parâmetros
other (Operator) – um objeto Operator.
Retorna
o produto tensorial , onde
é o Operador atual, e é o outro Operador.
Tipo de retorno
O produto tensor pode ser obtido usando o operador binário ^ . Portanto, a.tensor(b) é equivalente a a ^ b.