class_docstr: Encapsulates multiple torch state critics for training in structured environments.
  
  :param networks: Mapping of value functions (critic) to encapsulate.
  :param obs_spaces_dict: The observation spaces dict of the environment.
  :param device: Device the policy should be located on (cpu or cuda).
class_docstr_tok: ["Encapsulates","multiple","torch","state","critics","for","training","in","structured","environments",".",":","param","networks",":","Mapping","of","value","functions","(","critic",")","to","encapsulate",".",":","param","obs_spaces_dict",":","The","observation","spaces","dict","of","the","environment",".",":","param","device",":","Device","the","policy","should","be","located","on","(","cpu","or","cuda",")","."]
docstr: implementation of :class:`~maze.core.agent.torch_model.TorchModel`
          
docstr_tok: ["implementation","of",":","class",":","`","~maze.core.agent.torch_model.TorchModel","`"]
code: def eval(self) -> None:
      """implementation of :class:`~maze.core.agent.torch_model.TorchModel`"""
      for critic in self.networks.values():
          critic.eval()
  
imports: from abc import abstractmethod
  from typing import Mapping, Union, List, Dict
  import torch
  from gym import spaces
  from torch import nn
  from maze.core.agent.state_critic import StateCritic
  from maze.core.agent.state_critic_input_output import StateCriticStepOutput, StateCriticOutput, StateCriticInput
  from maze.core.agent.torch_model import TorchModel
  from maze.core.annotations import override
  from maze.core.env.observation_conversion import ObservationType
  from maze.core.env.structured_env import StepKeyType
  from maze.perception.perception_utils import convert_to_torch, flatten_spaces, stack_and_flatten_spaces
label_desc: Use image node_id 5 for calling the TorchStateCritic obj's underlying member method code with example usage: obj.eval() without return types