class_docstr: Common superclass for the structured vectorised env implementations in Maze.
  
  :param n_envs: The number of vectorised environments.
  :param action_spaces_dict: Action spaces dict (not vectorized, as it is the same for all environments)
  :param observation_spaces_dict: Observation spaces dict (not vectorized, as it is the same for all environments)
  :param logging_prefix: If set, will report epoch statistics under this logging prefix.
docstr: Current actor ID (should be the same for all envs, as only synchronous envs are supported).
docstr_tok: ["Current","actor","ID","(","should","be","the","same","for","all","envs",",","as","only","synchronous","envs","are","supported",")","."]
code: def actor_id(self) -> ActorID:
      """Current actor ID (should be the same for all envs, as only synchronous envs are supported)."""
      assert (
          len(set(self._actor_ids)) == 1
      ), "only synchronous environments are supported."
      return self._actor_ids[0]
  
imports: from abc import ABC, abstractmethod
  from typing import Dict, Union, Optional, Callable
  import gym
  import numpy
  from maze.core.annotations import override
  from maze.core.env.structured_env import StructuredEnv, ActorID, StepKeyType
  from maze.core.env.structured_env_spaces_mixin import StructuredEnvSpacesMixin
  from maze.core.env.time_env_mixin import TimeEnvMixin
  from maze.core.log_stats.log_stats import LogStatsAggregator, LogStatsLevel, get_stats_logger, LogStatsValue
  from maze.core.log_stats.log_stats_env import LogStatsEnv
  from maze.train.parallelization.vector_env.vector_env import VectorEnv
label_desc: Use image node_id 2 for calling the StructuredVectorEnv obj's underlying member method code with example usage: obj.actor_id() and returns: self