class_docstr: Simple scheduler which schedules all HPO jobs in sequence without any parallelism.
  The next trial scheduling will be decided based on the available time left within `time_out` setting
  and average time required for a trial to complete multiplied by the fill_factor (0.95) by default to
  accommodate variance in runtimes per HPO run.
  
  Parameters
  ----------
  train_fn : callable
      A task launch function for training.
  resource : dict
      Computation resources. For example, `{'num_cpus':2, 'num_gpus':1}`
  searcher : str
      Searcher (get_config decisions). If str, this is passed to
      searcher_factory along with search_options.
  search_options : dict
      If searcher is str, these arguments are passed to searcher_factory.
  num_trials : int
      Maximum number of jobs run in experiment. One of `num_trials`,
      `time_out` must be given.
  time_out : float
      If given, jobs are started only until this time_out (wall clock time).
      One of `num_trials`, `time_out` must be given.
  reward_attr : str
      Name of reward (i.e., metric to maximize) attribute in data obtained
      from reporter
  time_attr : str
      Name of resource (or time) attribute in data obtained from reporter.
      This attribute is optional for FIFO scheduling, but becomes mandatory
      in multi-fidelity scheduling (e.g., Hyperband).
      Note: The type of resource must be int.
class_docstr_tok: ["Simple","scheduler","which","schedules","all","HPO","jobs","in","sequence","without","any","parallelism",".","The","next","trial","scheduling","will","be","decided","based","on","the","available","time","left","within","`","time_out","`","setting","and","average","time","required","for","a","trial","to","complete","multiplied","by","the","fill_factor","(","0.95",")","by","default","to","accommodate","variance","in","runtimes","per","HPO","run",".","Parameters","--","--","--","--","--","train_fn",":","callable","A","task","launch","function","for","training",".","resource",":","dict","Computation","resources",".","For","example",",","`","{","'num_cpus':2",",","'num_gpus':1","}","`","searcher",":","str","Searcher","(","get_config","decisions",")",".","If","str",",","this","is","passed","to","searcher_factory","along","with","search_options",".","search_options",":","dict","If","searcher","is","str",",","these","arguments","are","passed","to","searcher_factory",".","num_trials",":","int","Maximum","number","of","jobs","run","in","experiment",".","One","of","`","num_trials","`",",","`","time_out","`","must","be","given",".","time_out",":","float","If","given",",","jobs","are","started","only","until","this","time_out","(","wall","clock","time",")",".","One","of","`","num_trials","`",",","`","time_out","`","must","be","given",".","reward_attr",":","str","Name","of","reward","(","i.e.",",","metric","to","maximize",")","attribute","in","data","obtained","from","reporter","time_attr",":","str","Name","of","resource","(","or","time",")","attribute","in","data","obtained","from","reporter",".","This","attribute","is","optional","for","FIFO","scheduling",",","but","becomes","mandatory","in","multi-fidelity","scheduling","(","e.g.",",","Hyperband",")",".","Note",":","The","type","of","resource","must","be","int","."]
docstr: Get Training Curves
docstr_tok: ["Get","Training","Curves"]
code: def get_training_curves(
      self, filename=None, plot=False, use_legend=True
  ):
      """Get Training Curves"""
      if filename is None and not plot:
          logger.warning(
              "Please either provide filename or allow plot in get_training_curves"
          )
      import matplotlib.pyplot as plt
  
      eval_metric = self.__get_training_history_metric(
          "eval_metric", default="validation_performance"
      )
      sign_mult = (
          int(
              self.__get_training_history_metric(
                  "greater_is_better", default=True
              )
          )
          * 2
          - 1
      )
  
      plt.ylabel(eval_metric)
      plt.xlabel(self.time_attr)
      plt.title("Performance vs Training-Time in each HPO Trial")
      for task_id, task_res in self.training_history.items():
          rewards = [x[self._reward_attr] * sign_mult for x in task_res]
          x = [x[self.time_attr] for x in task_res]
          plt.plot(x, rewards, label=f"task {task_id}")
      if use_legend:
          plt.legend(loc="best")
      if filename:
          logger.info(f"Saving Training Curve in {filename}")
          file_dir = os.path.split(os.path.abspath(filename))[0]
          if not os.path.exists(file_dir):
              os.makedirs(file_dir)
          plt.savefig(filename)
      if plot:
          plt.show()
  
imports: import logging
  import os
  import time
  from collections import OrderedDict
  from copy import deepcopy
  from typing import Tuple
  from tqdm.auto import tqdm
  from ..searcher import searcher_factory
  from ..searcher.exceptions import ExhaustedSearchSpaceError
  from ..searcher.local_searcher import LocalSearcher
  from .reporter import FakeReporter
label_desc: Use image node_id 13 for calling the LocalSequentialScheduler obj's underlying member method code with example usage: obj.get_training_curves(filename, plot, use_legend) without return types