code: def save_model(self, model_path):
      if self.model is None:
          print("Please train the model first or load model from file!")
          raise ValueError
      if self.group_label is not None:
          group_label = (c_float * len(self.group_label))()
          group_label[:] = self.group_label
      thundergbm.save(
          model_path.encode("utf-8"),
          self.objective.encode("utf-8"),
          c_float(self.learning_rate),
          self.num_class,
          self.n_trees,
          self.tree_per_iter,
          byref(self.model),
          group_label,
      )
  
imports: from sklearn.base import BaseEstimator
  from sklearn.base import RegressorMixin, ClassifierMixin
  from sklearn.metrics import mean_squared_error, accuracy_score
  import numpy
  import scipy.sparse
  import statistics
  from sklearn.utils import check_X_y
  from ctypes import *
  from os import path
  from sys import platform
label_desc: Use image node_id 7 for calling the TGBMModel obj's underlying member method code with example usage: obj.save_model(model_path) without return types