code: def __init__(
      self,
      *,
      num_jobs: int = 1,
      use_cuda: bool = True,
      available_cuda_list: Optional[List[int]] = None,
      resource_config: Optional[Dict[str, Any]] = None,
  ):
      use_cuda = use_cuda and torch.cuda.is_available()
      if available_cuda_list is None and not use_cuda:
          available_cuda_list = []
      self.num_jobs = num_jobs
      self.use_cuda = use_cuda
      self.cuda_list = available_cuda_list
      self.resource_config = resource_config or {}
      self.tasks: Dict[Tuple[str, str], Task] = {}
      self.key_indices: Dict[Tuple[str, str], int] = {}
      self.executes: Dict[Tuple[str, str], str] = {}
      self.workspaces: Dict[Tuple[str, str], str] = {}
      self.results: Optional[ExperimentResults] = None
  
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 1 to create a new Experiment object from inherited base classes: PureFromInfoMixin, ISerializable with example: obj = Experiment()