class_docstr: Maps policy IDs to Policy objects.
  
  Thereby, keeps n policies in memory and - when capacity is reached -
  writes the least recently used to disk. This allows adding 100s of
  policies to a Algorithm for league-based setups w/o running out of memory.
code: def __setitem__(self, key: PolicyID, value: Policy):
      # Item already in cache -> Rearrange deque.
      if key in self.cache:
          self._deque.remove(key)
  
      # Item not currently in cache -> store new value and - if at capacity -
      # remove leftmost one.
      else:
          # Cache at capacity -> Drop leftmost item.
          if len(self._deque) == self.capacity:
              self._stash_least_used_policy()
  
      # Promote `key` to "most recently used".
      self._deque.append(key)
  
      # Update our cache.
      self.cache[key] = value
      self._valid_keys.add(key)
  
imports: from collections import deque
  import threading
  from typing import Dict, Set
  import logging
  import ray
  from ray.rllib.policy.policy import Policy
  from ray.rllib.utils.annotations import override
  from ray.rllib.utils.deprecation import deprecation_warning
  from ray.rllib.utils.framework import try_import_tf
  from ray.rllib.utils.threading import with_lock
  from ray.rllib.utils.typing import PolicyID
  from ray.util.annotations import PublicAPI
label_desc: Use image node_id 3 for calling the PolicyMap obj's underlying member method code with example usage: obj.__setitem__(key, value) without return types