code: def test_add_initial_observation(self):
      # Generate an enviornment.
      env = MultiAgentTestEnv()
      # Generate an empty multi-agent episode. Note. we have to provide the
      # agent ids.
      episode = MultiAgentEpisode(agent_ids=env.get_agent_ids())
  
      # Generate initial observations and infos and add them to the episode.
      obs, infos = env.reset(seed=0)
      episode.add_env_reset(
          observations=obs,
          infos=infos,
      )
  
      # Assert that timestep is at zero.
      self.assertTrue(episode.t == episode.t_started == 0)
      # Assert that the agents with initial observations have their single-agent
      # episodes in place.
      for agent_id in obs:
          self.assertGreater(
              len(episode.agent_episodes[agent_id].observations), 0
          )
          self.assertGreater(
              len(episode.agent_episodes[agent_id].infos), 0
          )
          # Furthermore, esnure that all agents have an entry in the global timestep
          # mapping.
          self.assertEqual(
              len(episode.global_t_to_local_t[agent_id]), 1
          )
          self.assertEqual(episode.global_t_to_local_t[agent_id][0], 0)
  
imports: import gymnasium
  import numpy
  import unittest
  from typing import List, Optional, Tuple
  import ray
  from ray.rllib.env.multi_agent_env import MultiAgentEnv
  from ray.rllib.env.multi_agent_episode import MultiAgentEpisode
  from ray.rllib.utils.typing import MultiAgentDict
label_desc: Use image node_id 4 for calling the TestMultiAgentEpisode obj's underlying member method code with example usage: obj.test_add_initial_observation() without return types