class_docstr: QMC sampling from a multivariate Normal :math:`N(\mu, \Sigma)`.
  
  Parameters
  ----------
  mean : array_like (d,)
      The mean vector. Where ``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.
  seed : {None, int, `numpy.random.Generator`}, optional
      If `seed` is None the `numpy.random.Generator` singleton is used.
      If `seed` is an int, a new ``Generator`` instance is used,
      seeded with `seed`.
      If `seed` is already a ``Generator`` instance then that instance is
      used.
  
  Examples
  --------
  >>> import matplotlib.pyplot as plt
  >>> from scipy.stats import qmc
  >>> engine = qmc.MultivariateNormalQMC(mean=[0, 5], cov=[[1, 0], [0, 1]])
  >>> sample = engine.random(512)
  >>> _ = plt.scatter(sample[:, 0], sample[:, 1])
  >>> plt.show()
class_docstr_tok: ["QMC","sampling","from","a","multivariate","Normal",":","math",":","`","N","(","\\mu",",","\\Sigma",")","`",".","Parameters","--","--","--","--","--","mean",":","array_like","(","d",",",")","The","mean","vector",".","Where","``","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",".","seed",":","{","None",",","int",",","`","numpy.random.Generator","`","}",",","optional","If","`","seed","`","is","None","the","`","numpy.random.Generator","`","singleton","is","used",".","If","`","seed","`","is","an","int",",","a","new","``","Generator","``","instance","is","used",",","seeded","with","`","seed","`",".","If","`","seed","`","is","already","a","``","Generator","``","instance","then","that","instance","is","used",".","Examples","--","--","--","--",">",">",">","import","matplotlib.pyplot","as","plt",">",">",">","from","scipy.stats","import","qmc",">",">",">","engine","=","qmc.MultivariateNormalQMC","(","mean=","[","0",",","5","]",",","cov=","[","[","1",",","0","]",",","[","0",",","1","]","]",")",">",">",">","sample","=","engine.random","(","512",")",">",">",">","_","=","plt.scatter","(","sample","[",":",",","0","]",",","sample","[",":",",","1","]",")",">",">",">","plt.show","(",")"]
docstr: Draw `n` QMC samples from the standard Normal :math:`N(0, I_d)`.
  
  Parameters
  ----------
  n : int, optional
      Number of samples to generate in the parameter space. Default is 1.
  
  Returns
  -------
  sample : array_like (n, d)
      Sample.
code: def _standard_normal_samples(self, n: IntNumber = 1) -> np.ndarray:
      """Draw `n` QMC samples from the standard Normal :math:`N(0, I_d)`.
  
      Parameters
      ----------
      n : int, optional
          Number of samples to generate in the parameter space. Default is 1.
  
      Returns
      -------
      sample : array_like (n, d)
          Sample.
  
      """
      # get base samples
      samples = self.engine.random(n)
      if self._inv_transform:
          # apply inverse transform
          # (values to close to 0/1 result in inf values)
          return stats.norm.ppf(0.5 + (1 - 1e-10) * (samples - 0.5))  # type: ignore[attr-defined]
      else:
          # apply Box-Muller transform (note: indexes starting from 1)
          even = np.arange(0, samples.shape[-1], 2)
          Rs = np.sqrt(-2 * np.log(samples[:, even]))
          thetas = 2 * math.pi * samples[:, 1 + even]
          cos = np.cos(thetas)
          sin = np.sin(thetas)
          transf_samples = np.stack([Rs * cos, Rs * sin], -1).reshape(
              n, -1
          )
          # make sure we only return the number of dimension requested
          return transf_samples[:, : self.d]
  
imports: from __future__ import annotations
  import os
  import copy
  import numbers
  from abc import ABC, abstractmethod
  import math
  from typing import ClassVar, List, Optional, overload, TYPE_CHECKING
  import warnings
  import numpy
  import scipy.stats
  from scipy._lib._util import rng_integers
  from scipy.stats._sobol import initialize_v, _cscramble, _fill_p_cumulative, _draw, _fast_forward, _categorize, initialize_direction_numbers, _MAXDIM, _MAXBIT
  from scipy.stats._qmc_cy import _cy_wrapper_centered_discrepancy, _cy_wrapper_wrap_around_discrepancy, _cy_wrapper_mixture_discrepancy, _cy_wrapper_l2_star_discrepancy, _cy_wrapper_update_discrepancy
label_desc: Use image node_id 5 for calling the MultivariateNormalQMC obj's underlying member method code with example usage: obj._standard_normal_samples(n) and returns: stats, transf_samples