code: def predict_log_proba(self, X):
          
          jll = self._joint_log_likelihood(X)
          # normalize by P(x) = P(f_1, ..., f_n)
          log_prob_x = logsumexp(jll, axis=1)
          return jll - log_prob_x.reshape(-1, 1)
docs: Return log-probability estimates for the test vector X.
          Parameters
          ----------
          X : array-like, shape = [n_samples, n_features]
          Returns
          -------
          C : array-like, shape = [n_samples, n_classes]
              Returns the log-probability of the samples for each class in
              the model. The columns correspond to the classes in sorted
              order, as they appear in the attribute `classes_`.