code: def _compute_error(comp_cov, covariance_, precision_, score_metric="frobenius"):
      
      if score_metric == "frobenius":
          return np.linalg.norm(np.triu(comp_cov - covariance_, 1), ord="fro")
      elif score_metric == "spectral":
          error = comp_cov - covariance_
          return np.amax(np.linalg.svdvals(np.dot(error.T, error)))
      elif score_metric == "kl":
          return metrics.kl_loss(comp_cov, precision_)
      elif score_metric == "quadratic":
          return metrics.quadratic_loss(comp_cov, precision_)
      elif score_metric == "log_likelihood":
          return -metrics.log_likelihood(comp_cov, precision_)
      else:
          raise NotImplementedError(
              ("Must be frobenius, spectral, kl, " "quadratic, or log_likelihood")
          )
docs: Computes the covariance error vs. comp_cov.
  
      Parameters
      ----------
      comp_cov : array-like, shape = (n_features, n_features)
          The precision to compare with.
          This should normally be the test sample covariance/precision.
  
      scaling : bool
          If True, the squared error norm is divided by n_features.
          If False (default), the squared error norm is not rescaled.
  
      score_metric : str
          The type of norm used to compute the error between the estimated
          self.precision, self.covariance and the reference `comp_cov`.
          Available error types:
  
          - 'frobenius' (default): sqrt(tr(A^t.A))
          - 'spectral': sqrt(max(eigenvalues(A^t.A))
          - 'kl': kl-divergence
          - 'quadratic': quadratic loss
          - 'log_likelihood': negative log likelihood
  
      squared : bool
          Whether to compute the squared error norm or the error norm.
          If True (default), the squared error norm is returned.
          If False, the error norm is returned.