:py:mod:`rand.random_povm` ========================== .. py:module:: rand.random_povm .. autoapi-nested-parse:: Generate random POVM. Module Contents --------------- Functions ~~~~~~~~~ .. autoapisummary:: rand.random_povm.random_povm .. py:function:: random_povm(dim, num_inputs, num_outputs) Generate random positive operator valued measurements (POVMs) :cite:`WikiPOVM`. .. rubric:: Examples We can generate a set of `dim`-by-`dim` POVMs consisting of a specific dimension along with a given number of measurement inputs and measurement outputs. As an example, we can construct a random set of :math:`2`-by-:math:`2` POVMs of dimension with :math:`2` inputs and :math:`2` outputs. >>> from toqito.rand import random_povm >>> import numpy as np >>> >>> dim, num_inputs, num_outputs = 2, 2, 2 >>> povms = random_povm(dim, num_inputs, num_outputs) >>> povms # doctest: +SKIP array([[[[ 0.20649603+0.j, 0.79350397+0.j], [ 0.77451456+0.j, 0.22548544+0.j]], [[-0.25971638+0.j, 0.25971638+0.j], [-0.28048509+0.j, 0.28048509+0.j]]], [[[-0.25971638+0.j, 0.25971638+0.j], [-0.28048509+0.j, 0.28048509+0.j]], [[ 0.40448792+0.j, 0.59551208+0.j], [ 0.10740892+0.j, 0.89259108+0.j]]]]) We can verify that this constitutes a valid set of POVM elements as checking that these operators all sum to the identity operator. >>> np.round(povms[:, :, 0, 0] + povms[:, :, 0, 1]) # doctest: +SKIP [[1.+0.j, 0.+0.j], [0.+0.j, 1.+0.j]] .. rubric:: References .. bibliography:: :filter: docname in docnames :param dim: The dimensions of the measurements. :param num_inputs: The number of inputs for the measurement. :param num_outputs: The number of outputs for the measurement. :return: A set of `dim`-by-`dim` POVMs of shape `(dim, dim, num_inputs, num_outputs)`.