class_docstr: FIGSExt (sum of trees) classifier.
  Fast Interpretable Greedy-Tree Sums (FIGS) is an algorithm for fitting concise rule-based models.
  Specifically, FIGS generalizes CART to simultaneously grow a flexible number of trees in a summation.
  The total number of splits across all the trees can be restricted by a pre-specified threshold, keeping the model interpretable.
  Experiments across a wide array of real-world datasets show that FIGS achieves state-of-the-art prediction performance when restricted to just a few splits (e.g. less than 20).
  https://arxiv.org/abs/2201.11931
code: def predict_proba(self, X):
      if self.prediction_task == "regression":
          return NotImplemented
      elif (
          self.posthoc_ridge and self.weighted_model_
      ):  # note, during fitting don't use the weighted moel
          X_feats = self._extract_tree_predictions(X)
          d = self.weighted_model_.decision_function(
              X_feats
          )  # for 2 classes, this (n_samples,)
          probs = np.exp(d) / (1 + np.exp(d))
          return np.vstack((1 - probs, probs)).transpose()
      else:
          preds = np.zeros(X.shape[0])
          for tree in self.trees_:
              preds += self._predict_tree(tree, X)
          # constrain to range of probabilities
          preds = np.clip(preds, a_min=0.0, a_max=1.0)
          return np.vstack((1 - preds, preds)).transpose()
  
imports: from copy import deepcopy
  import numpy
  from matplotlib import pyplot
  from sklearn import datasets
  from sklearn import tree
  from sklearn.base import BaseEstimator
  from sklearn.linear_model import RidgeCV, RidgeClassifierCV
  from sklearn.model_selection import train_test_split
  from sklearn.tree import plot_tree
  from sklearn.utils import check_X_y
  from imodels.tree.viz_utils import extract_sklearn_tree_from_figs
label_desc: Use image node_id 10 for calling the FIGSExt obj's underlying member method code with example usage: obj.predict_proba(X) and returns: NotImplemented, np, np