code: def to_json(self):
      models_json = []
      for selected in self.selected_models:
          model = selected["model"]
          repeat = selected["repeat"]
          models_json += [{"model": model.to_json(), "repeat": repeat}]
  
      json_desc = {
          "library_version": self.library_version,
          "algorithm_name": self.algorithm_name,
          "algorithm_short_name": self.algorithm_short_name,
          "uid": self.uid,
          "models": models_json,
      }
      return json_desc
  
imports: import copy
  import json
  import logging
  import operator
  import os
  import time
  import uuid
  import numpy
  import pandas
  from supervised.algorithms.algorithm import BaseAlgorithm
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION
  from supervised.exceptions import NotTrainedException
  from supervised.model_framework import ModelFramework
  from supervised.utils.additional_metrics import AdditionalMetrics
  from supervised.utils.config import LOG_LEVEL
  from supervised.utils.metric import Metric
  from supervised.utils.jsonencoder import MLJSONEncoder
  import matplotlib.pyplot
  from tabulate import tabulate
  from supervised.utils.learning_curves import LearningCurves
label_desc: Use image node_id 23 for calling the Ensemble obj's underlying member method code with example usage: obj.to_json() and returns: json_desc