class_docstr: QMix impl. Assumes homogeneous agents for now.
  
  You must use MultiAgentEnv.with_agent_groups() to group agents
  together for QMix. This creates the proper Tuple obs/action spaces and
  populates the '_group_rewards' info field.
  
  Action masking: to specify an action mask for individual agents, use a
  dict space with an action_mask key, e.g. {"obs": ob, "action_mask": mask}.
  The mask space must be `Box(0, 1, (n_actions,))`.
class_docstr_tok: ["QMix","impl",".","Assumes","homogeneous","agents","for","now",".","You","must","use","MultiAgentEnv.with_agent_groups","(",")","to","group","agents","together","for","QMix",".","This","creates","the","proper","Tuple","obs\/action","spaces","and","populates","the","'_group_rewards","'","info","field",".","Action","masking",":","to","specify","an","action","mask","for","individual","agents",",","use","a","dict","space","with","an","action_mask","key",",","e.g",".","{","``","obs","''",":","ob",",","``","action_mask","''",":","mask","}",".","The","mask","space","must","be","`","Box","(","0",",","1",",","(","n_actions",",",")",")","`","."]
code: def get_initial_state(self):  # initial RNN state
      return [
          s.expand([self.n_agents, -1]).cpu().numpy()
          for s in self.model.get_initial_state()
      ]
  
imports: import logging
  from typing import Dict, List, Optional, Tuple
  import gymnasium
  import numpy
  import tree
  from rllib_qmix.qmix.mixers import QMixer, VDNMixer
  from rllib_qmix.qmix.model import RNNModel, _get_size
  from ray.rllib.env.multi_agent_env import ENV_STATE
  from ray.rllib.env.wrappers.group_agents_wrapper import GROUP_REWARDS
  from ray.rllib.models.catalog import ModelCatalog
  from ray.rllib.models.modelv2 import _unpack_obs
  from ray.rllib.models.torch.torch_action_dist import TorchCategorical
  from ray.rllib.policy.rnn_sequencing import chop_into_sequences
  from ray.rllib.policy.sample_batch import SampleBatch
  from ray.rllib.policy.torch_policy import TorchPolicy
  from ray.rllib.utils.annotations import override
  from ray.rllib.utils.framework import try_import_torch
  from ray.rllib.utils.metrics.learner_info import LEARNER_STATS_KEY
  from ray.rllib.utils.torch_utils import apply_grad_clipping
  from ray.rllib.utils.typing import TensorType
label_desc: Use image node_id 6 for calling the QMixTorchPolicy obj's underlying member method code with example usage: obj.get_initial_state() and returns: unknown