code: def _untraced_update(
      self,
      batch: NestedDict,
      # TODO: Figure out, why _ray_trace_ctx=None helps to prevent a crash in
      #  eager_tracing=True mode.
      #  It seems there may be a clash between the traced-by-tf function and the
      #  traced-by-ray functions (for making the TfLearner class a ray actor).
      _ray_trace_ctx=None,
  ):
      def helper(_batch):
          # TODO (Kourosh, Sven): We need to go back to NestedDict because that's the
          #  constraint on forward_train and compute_loss APIs. This seems to be
          #  in-efficient. However, for tf>=2.12, it works also w/o this conversion
          #  so remove this after we upgrade officially to tf==2.12.
          _batch = NestedDict(_batch.copy())
          with tf.GradientTape(persistent=True) as tape:
              fwd_out = self._module.forward_train(_batch)
              loss_per_module = self.compute_loss(
                  fwd_out=fwd_out, batch=_batch
              )
          gradients = self.compute_gradients(
              loss_per_module, gradient_tape=tape
          )
          del tape
          postprocessed_gradients = self.postprocess_gradients(
              gradients
          )
          self.apply_gradients(postprocessed_gradients)
  
          return fwd_out, loss_per_module, dict(self._metrics)
  
      return self._strategy.run(helper, args=(batch,))
  
imports: import json
  import logging
  import pathlib
  from typing import Any, Callable, Dict, Hashable, Sequence, Tuple, TYPE_CHECKING, Union
  from ray.rllib.core.learner.learner import Learner
  from ray.rllib.core.rl_module.rl_module import RLModule, SingleAgentRLModuleSpec
  from ray.rllib.core.rl_module.tf.tf_rl_module import TfRLModule
  from ray.rllib.policy.eager_tf_policy import _convert_to_tf
  from ray.rllib.policy.sample_batch import MultiAgentBatch
  from ray.rllib.utils.annotations import override, OverrideToImplementCustomLogic
  from ray.rllib.utils.deprecation import deprecation_warning
  from ray.rllib.utils.framework import try_import_tf
  from ray.rllib.utils.metrics import ALL_MODULES
  from ray.rllib.utils.nested_dict import NestedDict
  from ray.rllib.utils.serialization import convert_numpy_to_python_primitives
  from ray.rllib.utils.typing import ModuleID, Optimizer, Param, ParamDict, TensorType
label_desc: Use image node_id 25 for calling the TfLearner obj's underlying member method code with example usage: obj._untraced_update(batch, _ray_trace_ctx) and returns: self, fwd_out,  loss_per_module,  dict