code: def _estimate_log_gaussian_prob(
      X, means, precisions_chol, covariance_type
  ):
      n_samples, n_features = X.shape
      n_components, _ = means.shape
      log_det = _compute_log_det_cholesky(
          precisions_chol, covariance_type, n_features
      )
      if covariance_type == "full":
          log_prob = torch.empty((n_samples, n_components))
          for k, (mu, prec_chol) in enumerate(
              zip(means, precisions_chol)
          ):
              y = torch.mm(X, prec_chol) - torch.matmul(mu, prec_chol)
              log_prob[:, k] = torch.sum(torch.square(y), axis=1)
          log_gaussian_prob = (
              -0.5
              * (
                  n_features
                  * torch.log(torch.FloatTensor([2 * torch.pi]))
                  + log_prob
              )
          ) + log_det
          return log_gaussian_prob
      else:
          raise NotImplementedError(
              "Hummingbird does not currently support {} covariance type for BayesianGaussianMixture. The supported covariance type is full.".format(
                  covariance_type
              )
          )
  
file_path: hummingbird/hummingbird/ml/operator_converters/_mixture_implementations.py
imports: import torch
  import torch.nn
  from ._physical_operator import PhysicalOperator
label_desc: Use image node_id 2 for calling a global function with example usage: _estimate_log_gaussian_prob(X, means, precisions_chol, covariance_type) and returns: log_gaussian_prob