Utilitários do operador
qiskit_addon_obp.utils.operations
Funções de utilidade para retropropagação de operadores.
apply_op_to
apply_op_to(op1, op1_qargs, op2, op2_qargs, *, apply_as_transform=False)
Aplique o operador op2 ao operador op1.
Esses operadores não precisam necessariamente atuar no mesmo número de qubits, pois se supõe que atuem em um sistema maior. A posição no sistema de cada operador é definida pelo site correspondente qargs. O operador de saída será definido em union(op1_qargs, op2_qargs).
Por padrão, essa função aplica op1 a op2 da seguinte forma:
op2 @ op1
Ao definir apply_as_transform=True, essa função aplicará op1 a op2 da seguinte forma:
op2.adjoint() @ op1 @ op2
Parâmetros
- op1 (SparsePauliOp) – O operador no qual o
op2será aplicado. - op1_qargs (list[int]) – Os índices de qubit para
op1. - op2 (SparsePauliOp) – O operador deve se inscrever em
op1. - op2_qargs (list[int]) – Os índices de qubit para
op2. - apply_as_transform (bool) – Se deve aplicar
op2aop1como uma transformação.
Retorna
A tupla (op, qargs) onde op é a entrada op1 com op2 aplicado à esquerda e qargs é uma lista de índices de qubit para o novo operador op. Os IDs de qubit na saída op correspondem ao ID de qubit global no mesmo índice em qargs.
Por exemplo, se a saída op for um SparsePauliOp("YX") e qargs for [3, 4], o termo X no qubit 0 do operador corresponde ao ID global do qubit 3.
Aumentos
ValueError - O número de qargs de operador exclusivos deve corresponder ao número de qubits no operador correspondente.
Tipo de retorno
tupla [*SparsePauliOp*, lista[ int ]]
apply_reset_to
apply_reset_to(op, qubit_id, inplace=False)
Aplique uma operação de redefinição a um operador Pauli.
Essa função aplica uma operação de reinicialização ao site op da seguinte forma:
<0|op|0>
Os termos que contêm termos Pauli X ou Y no qubit-qubit_id terão seu peso reduzido para 0.0. Os termos que contêm Pauli Z em qubit_id terão esse Pauli Z substituído por uma identidade.
Parâmetros
- op (SparsePauliOp) – O operador ao qual a redefinição será aplicada.
- qubit_id (int) – O índice do qubit no qual aplicar a redefinição.
- inplace (bool) – Se o operador deve ser modificado no local.
Retorna
O operador transformado
Tipo de retorno
to_global_op
to_global_op(op, qargs, n_qubits)
Converta um operador local em um operador global inserindo identidades em qubits que não são usados.
Parâmetros
- op (SparsePauliOp) – Operadora local em expansão.
- qargs (list[int]) – Índices Qubit para o operador local.
- n_qubits (int) – Número de qubits no sistema global.
Retorna
Um operador em n_qubits qubits
Aumentos
ValueError - Qubit ID fora da faixa
Tipo de retorno
reduce_op
reduce_op(global_op)
Crie uma representação enxuta de um operador Pauli global.
Essa função retorna uma representação enxuta do operador de entrada, de modo que todos os qubits associados somente aos termos Pauli-I tenham sido removidos. Uma lista de índices também é retornada, indicando em quais qubits o operador lean atua.
Por exemplo:
>>> global_op = SparsePauliOp(["IXI", "IIZ"])
>>> reduced_op, qargs = reduce_op(global_op)
>>> reduced_op
SparsePauliOp(['XI', 'IZ'],
coeffs=[1.+0.j, 1.+0.j])
>>> qargs
[0, 1]Parâmetros
global_op (SparsePauliOp) – O operador global para o qual será gerada uma representação enxuta
Retorna
- Uma representação enxuta do operador de entrada com qubits associados somente aos termos de identidade removidos.
- Uma lista de índices que especifica os qubits nos quais o operador lean atua.
Aumentos
ValueError - O operador de entrada pode não ser o operador de identidade.
Tipo de retorno
tupla [*SparsePauliOp*, lista[ int ]]