class_docstr: Assigns the `_value()` method to a TFPolicy.
  
  This way, Policy can call `_value()` to get the current VF estimate on a
  single(!) observation (as done in `postprocess_trajectory_fn`).
  Note: When doing this, an actual forward pass is being performed.
  This is different from only calling `model.value_function()`, where
  the result of the most recent forward pass is being used to return an
  already calculated tensor.
code: def extra_action_out_fn(self) -> Dict[str, TensorType]:
      if not self._should_cache_extra_action:
          return self._extra_action_out_impl()
  
      # Note: there are 2 reasons we are caching the extra_action_fetches for
      # TF1 static graph here.
      # 1. for better performance, so we don't query base class and model for
      #    extra fetches every single time.
      # 2. for correctness. TF1 is special because the static graph may contain
      #    two logical graphs. One created by DynamicTFPolicy for action
      #    computation, and one created by MultiGPUTower for GPU training.
      #    Depending on which logical graph ran last time,
      #    self.model.value_function() will point to the output tensor
      #    of the specific logical graph, causing problem if we try to
      #    fetch action (run inference) using the training output tensor.
      #    For that reason, we cache the action output tensor from the
      #    vanilla DynamicTFPolicy once and call it a day.
      if self._cached_extra_action_fetches is not None:
          return self._cached_extra_action_fetches
  
      self._cached_extra_action_fetches = self._extra_action_out_impl()
      return self._cached_extra_action_fetches
  
imports: import logging
  from typing import Dict, List
  import numpy
  from ray.rllib.models.modelv2 import ModelV2
  from ray.rllib.policy.eager_tf_policy import EagerTFPolicy
  from ray.rllib.policy.eager_tf_policy_v2 import EagerTFPolicyV2
  from ray.rllib.policy.policy import Policy, PolicyState
  from ray.rllib.policy.sample_batch import SampleBatch
  from ray.rllib.policy.tf_policy import TFPolicy
  from ray.rllib.utils.annotations import DeveloperAPI, override
  from ray.rllib.utils.framework import get_variable, try_import_tf
  from ray.rllib.utils.schedules import PiecewiseSchedule
  from ray.rllib.utils.tf_utils import make_tf_callable
  from ray.rllib.utils.typing import AlgorithmConfigDict, LocalOptimizer, ModelGradients, TensorType
label_desc: Use image node_id 3 for calling the ValueNetworkMixin obj's underlying member method code with example usage: obj.extra_action_out_fn() and returns: self, self, self