code: def mvhermgauss(H: int, D: int) -> Tuple[AnyNDArray, AnyNDArray]:
      """
      Return the evaluation locations 'xn', and weights 'wn' for a multivariate
      Gauss-Hermite quadrature.
  
      The outputs can be used to approximate the following type of integral:
      int exp(-x)*f(x) dx ~ sum_i w[i,:]*f(x[i,:])
  
      :param H: Number of Gauss-Hermite evaluation points.
      :param D: Number of input dimensions. Needs to be known at call-time.
      :return: eval_locations 'x' (H**DxD), weights 'w' (H**D)
      """
      gh_x, gh_w = hermgauss(H)
      x: AnyNDArray = np.array(
          list(itertools.product(*(gh_x,) * D))
      )  # H**DxD
      w = np.prod(
          np.array(list(itertools.product(*(gh_w,) * D))), 1
      )  # H**D
      return x, w
  
file_path: GPflow/gpflow/quadrature/deprecated.py
imports: import itertools
  import warnings
  from functools import wraps
  from typing import Callable, Iterable, List, Optional, Tuple, Union
  import numpy
  import tensorflow
  from check_shapes import check_shapes
  from ..base import AnyNDArray, TensorType
  from ..config import default_float
  from ..utilities import to_default_float
  from .gauss_hermite import NDiagGHQuadrature
label_desc: Use image node_id 2 for calling a global function with example usage: mvhermgauss(H, D) and returns: x,  w