Mitigates expectation_value() and quasi_probabilities(). The mitigation_matrix should be calibrated using qiskit experiments. This mitigation method should be used in case the readout errors of the qubits are assumed to be correlated. The mitigation_matrix of N qubits is of size $$2^N x 2^N$$ so the mitigation complexity is $$O(4^N)$$.

Parameters:
• assignment_matrix (ndarray) β readout error assignment matrix.

• qubits (Iterable[int] | None) β Optional, the measured physical qubits for mitigation.

Raises:

QiskitError β matrix size does not agree with number of qubits

Attributes

qubits#

The device qubits for this mitigator

settings#

Return settings.

Methods

assignment_matrix(qubits=None)[source]#

Return the readout assignment matrix for specified qubits.

The assignment matrix is the stochastic matrix $$A$$ which assigns a noisy readout probability distribution to an ideal input readout distribution: $$P(i|j) = \langle i | A | j \rangle$$.

Parameters:

qubits (List[int] | None) β Optional, qubits being measured.

Returns:

the assignment matrix A.

Return type:

np.ndarray

expectation_value(data, diagonal=None, qubits=None, clbits=None, shots=None)[source]#

Compute the mitigated expectation value of a diagonal observable.

This computes the mitigated estimator of $$\langle O \rangle = \mbox{Tr}[\rho. O]$$ of a diagonal observable $$O = \sum_{x\in\{0, 1\}^n} O(x)|x\rangle\!\langle x|$$.

Parameters:
• data (Counts) β Counts object

• diagonal (Callable | dict | str | ndarray | None) β Optional, the vector of diagonal values for summing the expectation value. If None the default value is $$[1, -1]^\otimes n$$.

• qubits (Iterable[int] | None) β Optional, the measured physical qubits the count bitstrings correspond to. If None qubits are assumed to be $$[0, ..., n-1]$$.

• clbits (List[int] | None) β Optional, if not None marginalize counts to the specified bits.

• shots (int | None) β the number of shots.

Returns:

the expectation value and an upper bound of the standard deviation.

Return type:

(float, float)

The diagonal observable $$O$$ is input using the diagonal kwarg as a list or Numpy array $$[O(0), ..., O(2^n -1)]$$. If no diagonal is specified the diagonal of the Pauli operator :mathO = mbox{diag}(Z^{otimes n}) = [1, -1]^{otimes n} is used. The clbits kwarg is used to marginalize the input counts dictionary over the specified bit-values, and the qubits kwarg is used to specify which physical qubits these bit-values correspond to as circuit.measure(qubits, clbits).

mitigation_matrix(qubits=None)[source]#

Return the readout mitigation matrix for the specified qubits.

The mitigation matrix $$A^{-1}$$ is defined as the inverse of the assignment_matrix() $$A$$.

Parameters:

qubits (List[int] | None) β Optional, qubits being measured.

Returns:

the measurement error mitigation matrix $$A^{-1}$$.

Return type:

np.ndarray

quasi_probabilities(data, qubits=None, clbits=None, shots=None)[source]#

Compute mitigated quasi probabilities value.

Parameters:
• data (Counts) β counts object

• qubits (List[int] | None) β qubits the count bitstrings correspond to.

• clbits (List[int] | None) β Optional, marginalize counts to just these bits.

• shots (int | None) β Optional, the total number of shots, if None shots will be calculated as the sum of all counts.

Returns:

A dictionary containing pairs of [output, mean] where βoutputβ

is the key in the dictionaries, which is the length-N bitstring of a measured standard basis state, and βmeanβ is the mean of non-zero quasi-probability estimates.

Return type:

QuasiDistribution

stddev_upper_bound(shots)[source]#

Return an upper bound on standard deviation of expval estimator.

Parameters:

shots (int) β Number of shots used for expectation value measurement.

Returns:

the standard deviation upper bound.

Return type:

float