docstr: Returns the best model name
docstr_tok: ["Returns","the","best","model","name"]
code: def get_best_model_name(self) -> str:
      """
      Returns the best model name
      """
      f1_stats = {}
      for key, _ in self.ml_dict.items():
          cv_scores = self.ml_dict[key][self.score_type]
          # Standardize to a list
          if self.ml_dict[key][self.score_type] == np.inf:
              f1_stats[key] = np.inf
          else:
              if len(self.ml_dict[key][self.score_type]) == 0:
                  f1_stats[key] = np.inf
              else:
                  if isinstance(cv_scores, np.ndarray):
                      cv_scores = cv_scores.tolist()
                  elif not isinstance(cv_scores, list):
                      cv_scores = [cv_scores]
                  if len(cv_scores) == 0:
                      f1_stats[key] = np.inf
                  else:
                      f1_stats[key] = sum(cv_scores) / len(cv_scores)
  
      best_model_name = min(
          f1_stats.items(), key=operator.itemgetter(1)
      )[0]
      return best_model_name
  
imports: import warnings
  from typing import List, Dict, Optional, Tuple, Union
  from datetime import datetime
  import copy
  from collections import defaultdict
  import operator
  from time import time
  import pdb
  import pandas
  import numpy
  import dask
  import dask.dataframe
  from sklearn.exceptions import DataConversionWarning
  import seaborn
  import seaborn
  import matplotlib.pyplot
  from .models import BuildBase, BuildArima, BuildAutoSarimax, BuildVAR, BuildML
  from .models.build_prophet import BuildProphet
  from .utils import colorful, load_ts_data, convert_timeseries_dataframe_to_supervised, time_series_plot, print_static_rmse, print_dynamic_rmse, quick_ts_plot, test_stationarity, print_ts_model_stats
  from .__version__ import __version__
label_desc: Use image node_id 3 for calling the auto_timeseries obj's underlying member method code with example usage: obj.get_best_model_name() and returns: best_model_name