code: def predict_proba(self, X):
      n_classes = (c_int * 1)()
      thundersvm.get_n_classes(c_void_p(self.model), n_classes)
      self.n_classes = n_classes[0]
      if self.probability == 0:
          print("Should fit with probability = 1")
          return
      else:
          size = X.shape[0] * self.n_classes
          samples = X.shape[0]
          self.predict_pro_ptr = (c_float * size)()
          X = self._validate_for_predict(X)
          if self._sparse:
              self._sparse_predict(X)
          else:
              self._dense_predict(X)
          # size = X.shape[0] * self.n_classes
          # self.predict_pro_ptr = (c_float * size)()
          # X = np.asarray(X, dtype=np.float64, order='C')
          #
          # self.predict_label_ptr = (c_float * X.shape[0])()
          # samples = X.shape[0]
          # features = X.shape[1]
          # X_1d = X.ravel()
          #
          # data = (c_float * X_1d.size)()
          # data[:] = X_1d
          # thundersvm.dense_predict(
          #     samples, features, data,
          #     c_void_p(self.model),
          #     self.predict_label_ptr)
          thundersvm.get_pro(c_void_p(self.model), self.predict_pro_ptr)
          self.predict_prob = np.frombuffer(
              self.predict_pro_ptr, dtype=np.float32
          ).reshape((samples, self.n_classes))
          return self.predict_prob
  
imports: from sklearn.base import BaseEstimator
  from sklearn.base import RegressorMixin, ClassifierMixin
  import numpy
  import scipy.sparse
  from sklearn.utils import check_X_y, column_or_1d, check_array
  from sklearn.utils.validation import _num_samples
  from ctypes import *
  from os import path, curdir
  from sys import platform
label_desc: Use image node_id 8 for calling the SvmModel obj's underlying member method code with example usage: obj.predict_proba(X) and returns: self