def Normal(cls,
            mean: 'TensorFluent', variance: 'TensorFluent',
            batch_size: Optional[int] = None) -> Tuple[Distribution, 'TensorFluent']:
        '''Returns a TensorFluent for the Normal sampling op with given mean and variance.

        Args:
            mean: The mean parameter of the Normal distribution.
            variance: The variance parameter of the Normal distribution.
            batch_size: The size of the batch (optional).

        Returns:
            The Normal distribution and a TensorFluent sample drawn from the distribution.

        Raises:
            ValueError: If parameters do not have the same scope.
        '''
        if mean.scope != variance.scope:
            raise ValueError('Normal distribution: parameters must have same scope!')
        loc = mean.tensor
        scale = tf.sqrt(variance.tensor)
        dist = tf.distributions.Normal(loc, scale)
        batch = mean.batch or variance.batch
        if not batch and batch_size is not None:
            t = dist.sample(batch_size)
            batch = True
        else:
            t = dist.sample()
        scope = mean.scope.as_list()
        return (dist, TensorFluent(t, scope, batch=batch))
Returns a TensorFluent for the Normal sampling op with given mean and variance.

        Args:
            mean: The mean parameter of the Normal distribution.
            variance: The variance parameter of the Normal distribution.
            batch_size: The size of the batch (optional).

        Returns:
            The Normal distribution and a TensorFluent sample drawn from the distribution.

        Raises:
            ValueError: If parameters do not have the same scope.