code: def preds_conf_cred(self, knns_not_in_class):
      
      nb_data = knns_not_in_class.shape[0]
      preds_knn = np.zeros(nb_data, dtype=np.int32)
      confs = np.zeros((nb_data, self.nb_classes), dtype=np.float32)
      creds = np.zeros((nb_data, self.nb_classes), dtype=np.float32)
  
      for i in range(nb_data):
        # p-value of test input for each class
        p_value = np.zeros(self.nb_classes, dtype=np.float32)
  
        for class_id in range(self.nb_classes):
          # p-value of (test point, candidate label)
          p_value[class_id] = (float(self.nb_cali) - bisect_left(
              self.cali_nonconformity, knns_not_in_class[i, class_id])) / float(self.nb_cali)
  
        preds_knn[i] = np.argmax(p_value)
        confs[i, preds_knn[i]] = 1. - p_value[np.argsort(p_value)[-2]]
        creds[i, preds_knn[i]] = p_value[preds_knn[i]]
      return preds_knn, confs, creds
docs: Given an array of nb_data x nb_classes dimensions, use conformal prediction to compute
      the DkNN's prediction, confidence and credibility.