class_docstr: Creates an unbatching observer.
  
  Creates an observer that takes batched trajectories, unbatches them, and
  delegates them to multiple observers.
  
  The unbatched trajectories are delegated to observers that don't support
  batch dimensions (e.g. ReverbAddEpisodeObserver).
  
  Note that the batch size is assumed to be fixed and it is not validated.
code: def __call__(self, batched_trajectory: trajectory_lib.Trajectory):
      unbatched_trajectories = nest_utils.unstack_nested_arrays(
          batched_trajectory
      )
      for obs, traj in zip(
          self._delegated_observers, unbatched_trajectories
      ):
          # The for loop can be optimized by parallelizing running delegated
          # observers in the future.
          obs(traj)
  
file_path: agents/tf_agents/utils/batched_observer_unbatching.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from typing import Callable
  from tf_agents.trajectories import trajectory
  from tf_agents.utils import nest_utils
label_desc: Use image node_id 2 for calling the BatchedObserverUnbatching obj's underlying member method code with example usage: obj.__call__(batched_trajectory) without return types