code: def test_log_probability(X, means, covs):
      m, c = [1.7], [[1.3]]
      x = [[1.0], [2.0], [4.0], [3.0], [2.0]]
      y = [-1.238582, -1.084736, -3.084736, -1.700121, -1.084736]
  
      x_torch = torch.tensor(numpy.array(x))
      m_torch = torch.tensor(numpy.array(m))
      c_torch = torch.tensor(numpy.array(c))
  
      d1 = Normal(m, c, covariance_type="full")
      d2 = Normal(
          numpy.array(m, dtype=numpy.float64),
          numpy.array(c, dtype=numpy.float64),
          covariance_type="full",
      )
      d3 = torch.distributions.MultivariateNormal(m_torch, c_torch)
  
      _test_predictions(x, y, d1.log_probability(x), torch.float32)
      _test_predictions(x, y, d2.log_probability(x), torch.float64)
      _test_predictions(
          x, d3.log_prob(x_torch), d2.log_probability(x), torch.float64
      )
  
      p = [1.7, 2.3, 1.0, 1.7, 4.1]
      x = [[1.0, 2.0, 4.0, 3.0, 2.0]]
      y = [-12.434692]
  
      c = numpy.eye(5).astype(numpy.float32)
      p_torch = torch.tensor(numpy.array(p))
      x_torch = torch.tensor(numpy.array(x))
  
      d1 = Normal(p, c, covariance_type="full")
      d2 = Normal(
          numpy.array(p, dtype=numpy.float64),
          numpy.array(c, dtype=numpy.float64),
          covariance_type="full",
      )
      d3 = torch.distributions.MultivariateNormal(p_torch, torch.eye(5))
  
      _test_predictions(x, y, d1.log_probability(x), torch.float32)
      _test_predictions(x, y, d2.log_probability(x), torch.float64)
      _test_predictions(
          x, d3.log_prob(x_torch), d2.log_probability(x), torch.float64
      )
  
      y = [
          -3.977393,
          -3.878336,
          -2.790128,
          -8.592959,
          -12.060726,
          -34.867487,
          -5.871732,
      ]
  
      m_torch = torch.tensor(numpy.array(means))
      c_torch = torch.tensor(numpy.array(covs))
      x_torch = torch.tensor(numpy.array(X))
  
      d2 = Normal(
          numpy.array(means, dtype=numpy.float64),
          numpy.array(covs, dtype=numpy.float64),
          covariance_type="full",
      )
      d3 = torch.distributions.MultivariateNormal(m_torch, c_torch)
  
      _test_predictions(X, y, d2.log_probability(X), torch.float64)
      _test_predictions(
          X, d3.log_prob(x_torch), d2.log_probability(X), torch.float64
      )
  
imports: import os
  import numpy
  import torch
  import pytest
  from pomegranate.distributions import Normal
  from ._utils import _test_initialization_raises_two_parameters
  from ._utils import _test_initialization
  from ._utils import _test_predictions
  from ._utils import _test_efd_from_summaries
  from ._utils import _test_raises
  from nose.tools import assert_raises
  from numpy.testing import assert_array_almost_equal
label_desc: Use image node_id 14 for calling a global function with example usage: test_log_probability(X, means, covs) without return types