ere ``d`` is the dimension.
cov : array_like (d, d), optional
    The covariance matrix. If omitted, use `cov_root` instead.
    If both `cov` and `cov_root` are omitted, use the identity matrix.
cov_root : array_like (d, d'), optional
    A root decomposition of the covariance matrix, where ``d'`` may be less
    than ``d`` if the covariance is not full rank. If omitted, use `cov`.
inv_transform : bool, optional
    If True, use inverse transform instead of Box-Muller. Default is True.
engine : QMCEngine, optional
    Quasi-Monte Carlo engine sampler. If None, `Sobol` is used.
rng : `numpy.random.Generator`, optional
    Pseudorandom number generator state. When `rng` is None, a new
    `numpy.random.Generator` is created using entropy from the
    operating system. Types other than `numpy.random.Generator` are
    passed to `numpy.random.default_rng` to instantiate a ``Generator``.

    .. versionchanged:: 1.15.0

        As part of the `SPEC-007 <https://scientific-python.org/specs/spec-0007/>`_
        transition from use of `numpy.random.RandomState` to
        `numpy.random.Generator`, this keyword was changed from `seed` to
        `rng`. For an interim period, both keywords will continue to work, although
        only one may be specified at a time. After the interim period, function
        calls using the `seed` keyword will emit warnings. Following a
        deprecation period, the `seed` keyword will be removed.

Examples
--------
>>> import matplotlib.pyplot as plt
>>> from scipy.stats import qmc
>>> dist = qmc.MultivariateNormalQMC(mean=[0, 5], cov=[[1, 0], [0, 1]])
>>> sample = dist.random(512)
>>> _ = plt.scatter(sample[:, 0], sample[:, 1])
>>> plt.show()

r0