class_docstr: The tracker may be used to obtain the performance metrics from a set of
  evaluations.
docstr: Loads the data associated with a set of training jobs run on AWS
  Sagemaker. The tracker is cached such that it does not need to re-
  download data in case no new evaluations are available.
  
  Args:
      name: The name of the experiment.
      force_refresh: Whether to download experiment data even if a tracker is available
          locally. This ensures that new data is fetched.
      kwargs: Additional properties that may be passed to the initializer of the tracker.
  
  Returns:
      The tracker with all the available data.
docstr_tok: ["Loads","the","data","associated","with","a","set","of","training","jobs","run","on","AWS","Sagemaker",".","The","tracker","is","cached","such","that","it","does","not","need","to","re-","download","data","in","case","no","new","evaluations","are","available",".","Args",":","name",":","The","name","of","the","experiment",".","force_refresh",":","Whether","to","download","experiment","data","even","if","a","tracker","is","available","locally",".","This","ensures","that","new","data","is","fetched",".","kwargs",":","Additional","properties","that","may","be","passed","to","the","initializer","of","the","tracker",".","Returns",":","The","tracker","with","all","the","available","data","."]
code: def for_experiment(
      cls, name: str, force_refresh: bool = False, **kwargs: Any
  ) -> ModelTracker:
      """
      Loads the data associated with a set of training jobs run on AWS
      Sagemaker. The tracker is cached such that it does not need to re-
      download data in case no new evaluations are available.
  
      Args:
          name: The name of the experiment.
          force_refresh: Whether to download experiment data even if a tracker is available
              locally. This ensures that new data is fetched.
          kwargs: Additional properties that may be passed to the initializer of the tracker.
  
      Returns:
          The tracker with all the available data.
      """
      # Generate the filename including all kwargs
      kwargs_suffix = "-".join(
          f"{k}_{v}"
          for k, v in sorted(kwargs.items(), key=lambda i: i[0])
      )
      if len(kwargs_suffix) > 0:
          kwargs_suffix = f"+{kwargs_suffix}"
  
      # If available in cache, return
      cache = (
          Path.home()
          / ".cache"
          / "tsbench"
          / f"experiment-{name}{kwargs_suffix}.pickle"
      )
      if cache.exists() and not force_refresh:
          with cache.open("rb") as f:
              return pickle.load(f)
  
      # Initialize connection to AWS
      analysis = aws.Analysis(name)
      assert all(
          job.status == "Completed" for job in analysis
      ), "Not all jobs have completed."
  
      # Initialize tracker
      jobs = load_jobs_from_analysis(analysis)
      tracker = ModelTracker(jobs, **kwargs)
  
      # Cache tracker and return
      cache.parent.mkdir(parents=True, exist_ok=True)
      with cache.open("wb+") as f:
          pickle.dump(tracker, f)
      return tracker
  
imports: from __future__ import annotations
  import pickle
  from pathlib import Path
  from typing import Any, List, Optional
  from tsbench.config import Config, ModelConfig
  from tsbench.constants import DEFAULT_DATA_PATH
  from tsbench.evaluations import aws
  from tsbench.evaluations.metrics import Performance
  from tsbench.forecasts.quantile import QuantileForecasts
  from ._base import Tracker
  from ._evaluations import Evaluations
  from ._info import extract_job_infos, ValidationMetric, ValidationScores
  from .job import Job, load_jobs_from_analysis, load_jobs_from_directory
label_desc: Use image node_id 1 for calling the ModelTracker obj's underlying member method code with example usage: obj.for_experiment(cls, name, force_refresh) and returns: tracker, pickle