class_docstr: Flatten and concatenation policy model.
  
  :param obs_shapes: Dictionary mapping of observation names to shapes.
  :param action_logits_shapes: Dictionary mapping of observation names to shapes.
  :param hidden_units: Dictionary mapping of action names to shapes.
  :param non_lin: The non-linearity to apply.
docstr: forward pass. 
docstr_tok: ["forward","pass","."]
code: def forward(self, x):
      """forward pass."""
      return self.net(x)
  
imports: from typing import Sequence, Dict, List, Tuple
  import torch
  from maze.perception.blocks.general.functional import FunctionalBlock
  from maze.train.trainers.common.value_transform import support_to_scalar
  from torch import nn
  from maze.perception.blocks import PerceptionBlock
  from maze.perception.blocks.feed_forward.dense import DenseBlock
  from maze.perception.blocks.general.concat import ConcatenationBlock
  from maze.perception.blocks.general.flatten import FlattenBlock
  from maze.perception.blocks.inference import InferenceBlock
  from maze.perception.blocks.output.linear import LinearOutputBlock
  from maze.perception.weight_init import make_module_init_normc
label_desc: Use image node_id 2 for calling the FlattenConcatPolicyNet obj's underlying member method code with example usage: obj.forward(x) and returns: self