code: def __init__(self, bands: List):
      from .spill import FIFOStrategy
  
      # mapping key is (session_id, data_key)
      # mapping value is list of InternalDataInfo
      self._bands = bands
      self._data_key_to_infos = defaultdict(list)
      self._data_info_list = dict()
      self._spill_strategy = dict()
      # data key may be a tuple in shuffle cases,
      # we record the mapping from main key to sub keys,
      # it's used when decref mapper data using main key
      self._main_key_to_sub_keys = defaultdict(set)
      # we may store multiple small data into one file,
      # it records offset and size.
      self._sub_key_to_sub_info = dict()
      self._store_key_to_sub_infos = dict()
      for level in StorageLevel.__members__.values():
          for band_name in bands:
              self._data_info_list[level, band_name] = dict()
              self._spill_strategy[level, band_name] = FIFOStrategy(
                  level
              )
  
imports: import asyncio
  import logging
  from collections import defaultdict
  from dataclasses import dataclass
  from typing import Any, Dict, List, Optional, Union, Tuple
  from ...None import oscar
  from ...lib.aio import AioFileObject
  from ...oscar.backends.allocate_strategy import IdleLabel, NoIdleSlot
  from ...resource import cuda_card_stats
  from ...storage import StorageLevel, get_storage_backend
  from ...storage.base import ObjectInfo, StorageBackend
  from ...storage.core import StorageFileObject
  from ...utils import dataslots
  from .errors import DataNotExist, StorageFull
label_desc: Use image node_id 1 to create a new DataManagerActor object from inherited base classes: mo with example: obj = DataManagerActor(bands)