code: def predict(self, X, b=0.5, pos_label=1, return_probs=False):
          
  
          if self._check_input(X):
              X = self._preprocess_data(X)
  
          Y_prob = self.marginals(X)
  
          if self.cardinality > 2:
              Y_pred = Y_prob.argmax(axis=1) + 1
              if return_probs:
                  return Y_pred, Y_prob
              else:
                  return Y_pred
  
          if pos_label not in [1, 2]:
              raise ValueError("pos_label must have values in {1,2}.")
          self.logger.info(f"Using positive label class {pos_label} with threshold {b}")
  
          Y_pred = np.array(
              [pos_label if p[pos_label - 1] > b else 3 - pos_label for p in Y_prob]
          )
          if return_probs:
              return Y_pred, Y_prob
          else:
              return Y_pred
docs: Return numpy array of class predictions for X
          based on predicted marginal probabilities.
  
          :param X: Input data.
          :param b: Decision boundary *for binary setting only*.
          :type b: float
          :param pos_label: Positive class index *for binary setting only*. Default: 1
          :type pos_label: int
          :param return_probs: If True, return predict probability. Default: False
          :type return_probs: bool