code: def get_bottleneck_tensors(
      inputs: list[Tensor],
      outputs: list[Tensor],
      execution_list: list[tuple[Layer, list[Tensor], list[Tensor]]],
  ) -> list[Tensor]:
      """
      Given an execution list this function returns all tensors that
      are a bottleneck in the network, i.e., "all information" must pass
      through this tensor.
      """
      nodes: list[tuple[Layer, tuple[list[Tensor], list[Tensor]]]]
      nodes = get_bottleneck_nodes(inputs, outputs, execution_list)
  
      ret: dict[int, Tensor] = {}
      for _l, (Xs, Ys) in nodes:
          for tensor_list in (Xs, Ys):
              if len(tensor_list) == 1:
                  tensor = tensor_list[0]
                  if id(tensor) not in ret:
                      ret[id(tensor)] = tensor
              else:
                  # TODO(albermax): put warning here?
                  pass
      return list(ret.values())
  
imports: from __future__ import annotations
  import inspect
  import warnings
  from abc import ABCMeta, abstractmethod
  from typing import Any, Callable
  import numpy
  import tensorflow.keras.backend
  import tensorflow.keras.layers
  import tensorflow.keras.models
  import innvestigate.backend
  import innvestigate.backend.checks
  import innvestigate.layers
  from innvestigate.backend.types import Layer, LayerCheck, Model, NodeDict, OptionalList, ReverseTensorDict, Tensor
label_desc: Use image node_id 20 for calling a global function with example usage: get_bottleneck_tensors(inputs, outputs, execution_list) and returns: list