code: def compose_single(
      self, adapter_setup: str, state: BottleneckState, lvl: int = 0
  ) -> BottleneckState:
      adapter_layer = self.adapters[adapter_setup]
      context = ForwardContext.get_context()
      layer_output = adapter_layer(
          state.hidden_states,
          residual_input=state.adapter_residual,
          output_gating=context.output_adapter_gating_scores,
      )
      hidden_states, up = layer_output[0], layer_output[2]
      self._store_gating_score(adapter_setup, layer_output[-1])
  
      return BottleneckState(
          hidden_states,
          state.input_tensor,
          state.adapter_residual,
          state.layer_norm,
          up,
      )
  
imports: from typing import Dict, List, Mapping, NamedTuple, Optional, Union
  import torch
  from torch import nn
  from ..composition import AdapterCompositionBlock, Average, BatchSplit, Fuse, Parallel, Split, Stack, adjust_tensors_for_parallel
  from ..configuration import BnConfig
  from ..context import ForwardContext
  from .adapter_layer_base import ComposableAdapterLayerBase
  from .modeling import Adapter, BertFusion, ParallelAdapter
label_desc: Use image node_id 16 for calling the BottleneckLayer obj's underlying member method code with example usage: obj.compose_single(adapter_setup, state, lvl) and returns: BottleneckState