code: def _get_remove_chunk_keys(
      self, chunk_keys: List[str], counts: List[int] = None
  ):
      to_remove_chunk_keys = []
      counts = counts if counts is not None else itertools.repeat(1)
      for chunk_key, count in zip(chunk_keys, counts):
          ref_count = self._chunk_ref_counts[chunk_key]
          ref_count -= count
          assert (
              ref_count >= 0
          ), f"chunk key {chunk_key} will have negative ref count"
          self._chunk_ref_counts[chunk_key] = ref_count
          if ref_count == 0:
              # remove
              to_remove_chunk_keys.append(chunk_key)
      return to_remove_chunk_keys
  
imports: import asyncio
  import itertools
  import logging
  from collections import defaultdict
  from typing import Dict, List, Optional
  from ....None import oscar
  from ....lib.aio import alru_cache
  from ...meta.api import MetaAPI
  from ...storage.api import StorageAPI
  from ..errors import TileableNotTracked
label_desc: Use image node_id 6 for calling the LifecycleTrackerActor obj's underlying member method code with example usage: obj._get_remove_chunk_keys(chunk_keys, counts) and returns: to_remove_chunk_keys