code: def get(self, name):
          
          if name in self._storage:
              return self._storage[name]
          elif name in self._providers:
              value = self._storage[name] = self._providers[name](self)
              return value
          elif name.startswith('rollout:'):
              rollout_name = name[8:]
              value = self._storage[name] = self.rollout.batch_tensor(rollout_name)
              return value
          else:
              raise RuntimeError(f"Key {name} is not provided by this evaluator")
docs: Return a value from this evaluator.
  
          Because tensor calculated is cached, it may lead to suble bugs if the same value is used multiple times
          with and without no_grad() context.
  
          It is advised in such cases to not use no_grad and stick to .detach()