code: def to_info(self) -> Dict[str, Any]:
      tasks = {k: v.to_pack().asdict() for k, v in self.tasks.items()}
      return dict(
          num_jobs=self.num_jobs,
          use_cuda=self.use_cuda,
          cuda_list=self.cuda_list,
          resource_config=self.resource_config,
          tasks=tuple_key_to_str_key(tasks),
          key_indices=tuple_key_to_str_key(self.key_indices),
          executes=tuple_key_to_str_key(self.executes),
          workspaces=tuple_key_to_str_key(self.workspaces),
          results=None
          if self.results is None
          else self.results.asdict(),
      )
  
imports: import os
  import torch
  from typing import Any
  from typing import Dict
  from typing import List
  from typing import Type
  from typing import Tuple
  from typing import Union
  from typing import Callable
  from typing import Optional
  from dataclasses import dataclass
  from cftool.dist import Parallel
  from cftool.misc import shallow_copy_dict
  from cftool.misc import Serializer
  from cftool.misc import ISerializable
  from cftool.misc import DataClassBase
  from cftool.misc import PureFromInfoMixin
  from .task import Task
  from ...data import MLData
  from ...schema import DLConfig
  from ...pipeline import DLEvaluationPipeline
label_desc: Use image node_id 9 for calling the Experiment obj's underlying member method code with example usage: obj.to_info() and returns: dict