measurements.pretty_good_measurement

Compute the set of pretty good measurements from an ensemble.

Functions

pretty_good_measurement(states[, probs])

Return the set of pretty good measurements from a set of vectors and corresponding probabilities.

Module Contents

measurements.pretty_good_measurement.pretty_good_measurement(states, probs=None)

Return the set of pretty good measurements from a set of vectors and corresponding probabilities.

This computes the “pretty good measurement” as initially defined in [1].

The pretty good measurement (PGM) (also known as the “square root measurement”) is the set of POVMs \((G_1, \ldots, G_n)\) such that

\[G_i = P^{-1/2} \left(p_i \rho_i\right) P^{-1/2} \quad \text{where} \quad P = \sum_{i=1}^n p_i \rho_i.\]

See also

pretty_bad_measurement

Examples

Consider the collection of trine states.

\[u_0 = |0\rangle, \quad u_1 = -\frac{1}{2}\left(|0\rangle + \sqrt{3}|1\rangle\right), \quad \text{and} \quad u_2 = -\frac{1}{2}\left(|0\rangle - \sqrt{3}|1\rangle\right).\]
>>> from toqito.states import trine
>>> from toqito.measurements import pretty_good_measurement
>>>
>>> states = trine()
>>> probs = [1 / 3, 1 / 3, 1 / 3]
>>> pgm = pretty_good_measurement(states, probs)
>>> pgm
[array([[0.66666667, 0.        ],
       [0.        , 0.        ]]), array([[0.16666667, 0.28867513],
       [0.28867513, 0.5       ]]), array([[ 0.16666667, -0.28867513],
       [-0.28867513,  0.5       ]])]

References

[1]

Lane P Hughston, Richard Jozsa, and William K Wootters. A complete classification of quantum ensembles having a given density matrix. Physics Letters A, 183(1):14–18, 1993.

Raises:
  • ValueError – If number of vectors does not match number of probabilities.

  • ValueError – If probabilities do not sum to 1.

Parameters:
  • states (list[numpy.ndarray]) – A collection of either states provided as either vectors or density matrices.

  • probs (list[float] | None) – A set of fixed probabilities for a given ensemble of quantum states. The function assumes a uniform probability distribution if the fixed probabilities for the input ensemble are not provided.

Return type:

list[numpy.ndarray]