class_docstr: A multi-index-slicing block.
  This can be used rather than the short hand tensor[...,[a,b]] where [a,b] is the list given as selection indices.
  
  :param in_keys: One key identifying the input tensors.
  :param out_keys: One key identifying the output tensors.
  :param in_shapes: List of input shapes.
  :param select_dim: The dimension to slice from.
  :param select_idxs: The index or indices to select.
docstr: Forward pass, slicing the input tensor as defined by the selection_dim and select_idxs.
  
  :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, slicing the input tensor as defined by the selection_dim and select_idxs.
  
      :param block_input: The block's input dictionary.
      :return: The block's output dictionary.
      """
  
      # check input tensor
      input_tensor = block_input[self.in_keys[0]]
      # forward pass
      if self.selection_idxs.device != input_tensor.device:
          self.selection_idxs = self.selection_idxs.to(
              input_tensor.device
          )
      output_tensor = torch.index_select(
          input_tensor,
          dim=self.selection_dim,
          index=self.selection_idxs,
      )
  
      return {self.out_keys[0]: output_tensor}
  
file_path: maze/maze/perception/blocks/general/multi_index_slicing.py
imports: from typing import Union, List, Sequence, Dict
  import torch
  from maze.core.annotations import override
  from maze.perception.blocks.base import PerceptionBlock
label_desc: Use image node_id 2 for calling the MultiIndexSlicingBlock obj's underlying member method code with example usage: obj.forward(block_input) and returns: dict