def randn():
        """Returns an expression that generates a sample from the standard
        Gaussian distribution each time it is called.

        .. warning::

            This expression will generate new values each time it is used, so
            you likely do not want to use it to construct dataset views, since
            such views would produce different outputs each time they are used.

            A typical usage for this expression is in conjunction with
            :meth:`fiftyone.core.view.DatasetView.set_field` and
            :meth:`fiftyone.core.view.DatasetView.save` to populate a
            randomized field on a dataset.

        Examples::

            import fiftyone as fo
            import fiftyone.zoo as foz
            from fiftyone import ViewExpression as E

            dataset = foz.load_zoo_dataset("quickstart").clone()

            #
            # Populate a new `randn` field with random numbers
            #

            dataset.add_sample_field("randn", fo.FloatField)
            dataset.set_field("randn", E.randn()).save("randn")

            print(dataset.bounds("randn"))

            #
            # Create a view that contains a different 50%% of the dataset each
            # time it is used
            #

            view = dataset.match(E.randn() < 0)

            print(view.first().id)
            print(view.first().id)  # probably different!

        Returns:
            a :class:`ViewExpression`
        """
        # Box-Muller transform
        # https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform
        alpha = (-2.0 * (ViewExpression.rand().ln())).sqrt()
        beta = (2.0 * np.pi * ViewExpression.rand()).cos()
        return alpha * beta
Returns an expression that generates a sample from the standard
        Gaussian distribution each time it is called.

        .. warning::

            This expression will generate new values each time it is used, so
            you likely do not want to use it to construct dataset views, since
            such views would produce different outputs each time they are used.

            A typical usage for this expression is in conjunction with
            :meth:`fiftyone.core.view.DatasetView.set_field` and
            :meth:`fiftyone.core.view.DatasetView.save` to populate a
            randomized field on a dataset.

        Examples::

            import fiftyone as fo
            import fiftyone.zoo as foz
            from fiftyone import ViewExpression as E

            dataset = foz.load_zoo_dataset("quickstart").clone()

            #
            # Populate a new `randn` field with random numbers
            #

            dataset.add_sample_field("randn", fo.FloatField)
            dataset.set_field("randn", E.randn()).save("randn")

            print(dataset.bounds("randn"))

            #
            # Create a view that contains a different 50%% of the dataset each
            # time it is used
            #

            view = dataset.match(E.randn() < 0)

            print(view.first().id)
            print(view.first().id)  # probably different!

        Returns:
            a :class:`ViewExpression`
        
fiftyone/core/expressions.py