code: def from_json(self, json_desc):
      self.library_version = json_desc.get(
          "library_version", self.library_version
      )
      self.algorithm_name = json_desc.get(
          "algorithm_name", self.algorithm_name
      )
      self.algorithm_short_name = json_desc.get(
          "algorithm_short_name", self.algorithm_short_name
      )
      self.uid = json_desc.get("uid", self.uid)
      self.selected_models = []
      models_json = json_desc.get("models")
      for selected in models_json:
          model = selected["model"]
          repeat = selected["repeat"]
  
          il = ModelFramework(model.get("params"))
          il.from_json(model)
          self.selected_models += [
              # {"model": LearnerFactory.load(model), "repeat": repeat}
              {"model": il, "repeat": repeat}
          ]
  
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 24 for calling the Ensemble obj's underlying member method code with example usage: obj.from_json(json_desc) without return types