class_docstr: Interface for all perception blocks.
  Perception blocks provide a mapping of M input tensors to N output tensors.
  Both input and output tensors are stored in a dictionary with unique keys.
  
  :param in_keys: Keys identifying the input tensors.
  :param out_keys: Keys identifying the output tensors.
  :param in_shapes: List of input shapes.
class_docstr_tok: ["Interface","for","all","perception","blocks",".","Perception","blocks","provide","a","mapping","of","M","input","tensors","to","N","output","tensors",".","Both","input","and","output","tensors","are","stored","in","a","dictionary","with","unique","keys",".",":","param","in_keys",":","Keys","identifying","the","input","tensors",".",":","param","out_keys",":","Keys","identifying","the","output","tensors",".",":","param","in_shapes",":","List","of","input","shapes","."]
docstr: Forward pass of perception block.
  
  :param block_input: The block's input dictionary.
  :return: The block's output dictionary.
docstr_tok: ["Forward","pass","of","perception","block",".",":","param","block_input",":","The","block","'s","input","dictionary",".",":","return",":","The","block","'s","output","dictionary","."]
code: def forward(
      self, block_input: Dict[str, torch.Tensor]
  ) -> Dict[str, torch.Tensor]:
      """Forward pass of perception block.
  
      :param block_input: The block's input dictionary.
      :return: The block's output dictionary.
      """
  
file_path: maze/maze/perception/blocks/base.py
imports: from abc import ABC, abstractmethod
  from typing import Dict, Union, List, Sequence, Callable
  import numpy
  import torch
  from torch import nn
label_desc: Use image node_id 3 for calling the PerceptionBlock obj's underlying member method code with example usage: obj.forward(block_input) without return types