def _parallel_predict_log_proba(estimators, estimators_features, X, n_classes):
 n_samples = X.shape[0]
 log_proba = np.empty((n_samples, n_classes))
 log_proba.fill((- np.inf))
 all_classes = np.arange(n_classes, dtype=np.int)
 for (estimator, features) in zip(estimators, estimators_features):
  log_proba_estimator = estimator.predict_log_proba(X[:, features])
  if (n_classes == len(estimator.classes_)):
   log_proba = np.logaddexp(log_proba, log_proba_estimator)
  else:
   log_proba[:, estimator.classes_] = np.logaddexp(log_proba[:, estimator.classes_], log_proba_estimator[:, range(len(estimator.classes_))])
   missing = np.setdiff1d(all_classes, estimator.classes_)
   log_proba[:, missing] = np.logaddexp(log_proba[:, missing], (- np.inf))
 return log_proba

def _parallel_predict_log_proba ( estimators , estimators_features , X , n_classes ) : n_samples = X . shape [ 0 ] log_proba = np . empty ( ( n_samples , n_classes ) ) log_proba . fill ( ( - np . inf ) ) all_classes = np . arange ( n_classes , dtype = np . int ) for ( estimator , features ) in zip ( estimators , estimators_features ) : log_proba_estimator = estimator . predict_log_proba ( X [ : , features ] ) if ( n_classes == len ( estimator . classes_ ) ) : log_proba = np . logaddexp ( log_proba , log_proba_estimator ) else : log_proba [ : , estimator . classes_ ] = np . logaddexp ( log_proba [ : , estimator . classes_ ] , log_proba_estimator [ : , range ( len ( estimator . classes_ ) ) ] ) missing = np . setdiff1d ( all_classes , estimator . classes_ ) log_proba [ : , missing ] = np . logaddexp ( log_proba [ : , missing ] , ( - np . inf ) ) return log_proba
private function used to compute log probabilities within a job .