code: def _covar_mstep_full(gmm, X, responsibilities, weighted_X_sum, norm,
                        min_covar):
      
      # Eq. 12 from K. Murphy, "Fitting a Conditional Linear Gaussian
      # Distribution"
      n_features = X.shape[1]
      cv = np.empty((gmm.n_components, n_features, n_features))
      for c in range(gmm.n_components):
          post = responsibilities[:, c]
          mu = gmm.means_[c]
          diff = X - mu
          with np.errstate(under='ignore'):
              # Underflow Errors in doing post * X.T are  not important
              avg_cv = np.dot(post * diff.T, diff) / (post.sum() + 10 * EPS)
          cv[c] = avg_cv + min_covar * np.eye(n_features)
      return cv
docs: Performing the covariance M step for full cases