code: def _bound_state_log_lik(
      X, initial_bound, precs, means, covariance_type
  ):
      """Update the bound with likelihood terms, for standard covariance types"""
      n_components, n_features = means.shape
      n_samples = X.shape[0]
      bound = np.empty((n_samples, n_components))
      bound[:] = initial_bound
      if covariance_type in ["diag", "spherical"]:
          for k in range(n_components):
              d = X - means[k]
              bound[:, k] -= 0.5 * np.sum(d * d * precs[k], axis=1)
      elif covariance_type == "tied":
          for k in range(n_components):
              bound[:, k] -= 0.5 * _sym_quad_form(X, means[k], precs)
      elif covariance_type == "full":
          for k in range(n_components):
              bound[:, k] -= 0.5 * _sym_quad_form(X, means[k], precs[k])
      return bound
  
imports: from __future__ import print_function
  import numpy
  from scipy.special import digamma, gammaln
  from scipy import linalg
  from scipy.spatial.distance import cdist
  from ..externals.six.moves import xrange
  from ..utils import check_random_state, check_array, deprecated
  from ..utils.extmath import logsumexp, pinvh, squared_norm
  from ..utils.validation import check_is_fitted
  from ..None import cluster
  from .gmm import _GMMBase
label_desc: Use image node_id 8 for calling a global function with example usage: _bound_state_log_lik(X, initial_bound, precs, means, covariance_type) and returns: bound