code: def test_two_player(self):
      env = converted_env.ConvertedEnvironment(
          converter_factories=[_converter_factory, _converter_factory],
          env=mock_sc2_env.SC2TestEnv(
              players=[
                  sc2_env.Agent(race=sc2_env.Race.protoss),
                  sc2_env.Agent(race=sc2_env.Race.zerg),
              ],
              agent_interface_format=[
                  _agent_interface_format() for _ in range(2)
              ],
              game_steps_per_episode=30,
          ),
      )
  
      s0, s1 = converted_env.make_streams(env)
      with s0, s1:
          fs = []
          with concurrent.futures.ThreadPoolExecutor() as executor:
              fs.append(executor.submit(self._check_episode, s0))
              fs.append(executor.submit(self._check_episode, s1))
  
              concurrent.futures.wait(fs)
              for f in fs:
                  f.result()
  
imports: import concurrent.futures
  import random
  from absl.testing import absltest
  import dm_env
  from dm_env import test_utils
  import numpy
  from pysc2.env import converted_env
  from pysc2.env import mock_sc2_env
  from pysc2.env import sc2_env
  from pysc2.env.converter import converter
  from pysc2.env.converter.proto import converter_pb2
  from pysc2.lib import features
  from s2clientprotocol import common_pb2
  from s2clientprotocol import sc2api_pb2
label_desc: Use image node_id 3 for calling the StreamedEnvTest obj's underlying member method code with example usage: obj.test_two_player() without return types