Other averaging protocols

Here, we detail additional shot-based protocols available in InQuanto.

ProjectiveMeasurements

A state \(|\Psi\rangle\) prepared on a digital quantum computer may be written as a linear combination of computational basis states:

(60)\[|\Psi\rangle = \sum_i c_i |i\rangle\]

where \(i\) is a bit string. For example, a 2-qubit state is given by:

(61)\[|\Psi\rangle = c_{00}|00\rangle + c_{10}|10\rangle + c_{01}|01\rangle + c_{11}|11\rangle.\]

The ProjectiveMeasurements protocol measures the magnitude squared of the expansion coefficients, \(|c_i|^2\), by preparing the state and measuring the register in the Z basis. The probability of measuring the bitstring \(i\) is precisely \(|c_i|^2\). See below for a simple example:

from pytket.extensions.qiskit import AerBackend
from inquanto.express import get_system
from inquanto.ansatzes import FermionSpaceAnsatzUCCSD
from inquanto.protocols import ProjectiveMeasurements

_, space, state = get_system("h2_sto3g.h5")

ansatz = FermionSpaceAnsatzUCCSD(space, state)
params = ansatz.state_symbols.construct_random()

protocol = ProjectiveMeasurements(
    backend=AerBackend(),
    shots_per_circuit=1000,
)
protocol.build(params, ansatz).run(seed=0)

print(protocol.get_dataframe_basis_states(4))
  Basis State  Probability  Uncertainty  Count
0        0110        0.600     0.015492    600
1        0011        0.224     0.013184    224
2        1100        0.164     0.011709    164
3        1001        0.012     0.003443     12