StatevectorEstimator
class qiskit.primitives.StatevectorEstimator(*, default_precision=0.0, seed=None)
Bases: BaseEstimatorV2
Implementação simples de BaseEstimatorV2 com simulação completa do vetor de estado.
Essa classe é implementada por meio de Statevector que transforma os circuitos fornecidos em vetores de estado puro. Esses estados são posteriormente influenciados por SparsePauliOpo que implica que, no momento, essa implementação só é compatível com observáveis baseados em Pauli.
Cada tupla de (circuit, observables, <optional> parameter values, <optional> precision), chamada de bloco unificado primitivo estimador ( PUB ), produz seu próprio resultado baseado em matriz. O run() método pode receber uma sequência de pubs para serem executados em uma única chamada.
O resultado desta classe é exato se o circuito contiver apenas operações unitárias. Por outro lado, o resultado pode ser estocástico se o circuito contiver uma operação não unitária, como uma reinicialização para alguns subsistemas. O resultado estocástico pode ser reproduzido definindo seed, por exemplo, StatevectorEstimator(seed=123).
from qiskit.circuit import Parameter, QuantumCircuit
from qiskit.primitives import StatevectorEstimator
from qiskit.quantum_info import Pauli, SparsePauliOp
import matplotlib.pyplot as plt
import numpy as np
# Define a circuit with two parameters.
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.ry(Parameter("a"), 0)
circuit.rz(Parameter("b"), 0)
circuit.cx(0, 1)
circuit.h(0)
# Define a sweep over parameter values, where the second axis is over
# the two parameters in the circuit.
params = np.vstack([
np.linspace(-np.pi, np.pi, 100),
np.linspace(-4 * np.pi, 4 * np.pi, 100)
]).T
# Define three observables. Many formats are supported here including
# classes such as qiskit.quantum_info.SparsePauliOp. The inner length-1
# lists cause this array of observables to have shape (3, 1), rather
# than shape (3,) if they were omitted.
observables = [
[SparsePauliOp(["XX", "IY"], [0.5, 0.5])],
[Pauli("XX")],
[Pauli("IY")]
]
# Instantiate a new statevector simulation based estimator object.
estimator = StatevectorEstimator()
# Estimate the expectation value for all 300 combinations of
# observables and parameter values, where the pub result will have
# shape (3, 100). This shape is due to our array of parameter
# bindings having shape (100,), combined with our array of observables
# having shape (3, 1)
pub = (circuit, observables, params)
job = estimator.run([pub])
# Extract the result for the 0th pub (this example only has one pub).
result = job.result()[0]
# Error-bar information is also available, but the error is 0
# for this StatevectorEstimator.
result.data.stds
# Pull out the array-based expectation value estimate data from the
# result and plot a trace for each observable.
for idx, pauli in enumerate(observables):
plt.plot(result.data.evs[idx], label=pauli)
plt.legend()
Parâmetros
- default_precision (float) – A precisão padrão do estimador, se não for especificada durante a execução.
- seed (np.random.Generator | int | None) – A semente ou o objeto Generator para a geração de números aleatórios. Se for None (Nenhum), será usado um RNG padrão com sementes aleatórias.
Atributos
default_precision
Retorna a precisão padrão
seed
Retorna a semente ou o objeto Generator para a geração de números aleatórios.
Métodos
run
run(pubs, *, precision=None)
Estimar valores de expectativa para cada pub fornecido (Primitive Unified Bloc).
Parâmetros
- pubs (Iterable[TypeAliasForwardRef('EstimatorPubLike')]) – Uma coleção de objetos do tipo pub, como tuplas
(circuit, observables)ou(circuit, observables, parameter_values). - precision (float | None) – A precisão de destino para estimativas de valor de expectativa de cada execução do Estimator Pub que não especifica sua própria precisão. Se for None, será usado o valor de precisão padrão do estimador.
Retorna
Um objeto de trabalho que contém resultados.
Tipo de retorno
TrabalhoPrimitivo [ ResultadoPrimitivo [ ResultadoPúblico ]]