code: def multivariate_gaussian(x, mu, cov):
      """
      This is designed to replace scipy.stats.multivariate_normal
      which is not available before version 0.14. You may either pass in a
      multivariate set of data:
  
      .. code-block:: Python
  
         multivariate_gaussian (array([1,1]), array([3,4]), eye(2)*1.4)
         multivariate_gaussian (array([1,1,1]), array([3,4,5]), 1.4)
  
      or unidimensional data:
  
      .. code-block:: Python
  
         multivariate_gaussian(1, 3, 1.4)
  
      In the multivariate case if cov is a scalar it is interpreted as eye(n)*cov
  
      The function gaussian() implements the 1D (univariate)case, and is much
      faster than this function.
  
      equivalent calls:
  
      .. code-block:: Python
  
        multivariate_gaussian(1, 2, 3)
        scipy.stats.multivariate_normal(2,3).pdf(1)
  
  
      Parameters
      ----------
  
      x : float, or np.array-like
         Value to compute the probability for. May be a scalar if univariate,
         or any type that can be converted to an np.array (list, tuple, etc).
         np.array is best for speed.
  
      mu :  float, or np.array-like
         mean for the Gaussian . May be a scalar if univariate,  or any type
         that can be converted to an np.array (list, tuple, etc).np.array is
         best for speed.
  
      cov :  float, or np.array-like
         Covariance for the Gaussian . May be a scalar if univariate,  or any
         type that can be converted to an np.array (list, tuple, etc).np.array is
         best for speed.
  
      Returns
      -------
  
      probability : float
          probability for x for the Gaussian (mu,cov)
      """
  
      warnings.warn(
          (
              "This was implemented before SciPy version 0.14, which implemented "
              "scipy.stats.multivariate_normal. This function will be removed in "
              "a future release of FilterPy"
          ),
          DeprecationWarning,
      )
  
      # force all to numpy.array type, and flatten in case they are vectors
      x = np.array(x, copy=False, ndmin=1).flatten()
      mu = np.array(mu, copy=False, ndmin=1).flatten()
  
      nx = len(mu)
      cov = _to_cov(cov, nx)
  
      norm_coeff = (
          nx * math.log(2 * math.pi) + np.linalg.slogdet(cov)[1]
      )
  
      err = x - mu
      if sp.issparse(cov):
          numerator = spln.spsolve(cov, err).T.dot(err)
      else:
          numerator = np.linalg.solve(cov, err).T.dot(err)
  
      return math.exp(-0.5 * (norm_coeff + numerator))
  
imports: from __future__ import absolute_import, division, unicode_literals
  import math
  from math import cos, sin
  import random
  import warnings
  import numpy
  from numpy.linalg import inv
  import scipy.linalg
  import scipy.sparse
  import scipy.sparse.linalg
  from scipy.stats import norm, multivariate_normal
label_desc: Use image node_id 10 for calling a global function with example usage: multivariate_gaussian(x, mu, cov) and returns: math