code: def test_attention_sequential_2():
      """test_attention_sequential"""
      in_dict = build_multi_input_dict(dims=[(2, 10), (2, 7), (2, 9)])
  
      self_attn_block = MultiHeadAttentionBlock(
          in_keys=["in_key_0", "in_key_1", "in_key_2"],
          out_keys="self_attention",
          in_shapes=[(10,), (7,), (9,)],
          num_heads=10,
          dropout=0.0,
          bias=False,
          add_input_to_output=True,
          add_bias_kv=False,
          add_zero_attn=False,
          kdim=7,
          vdim=9,
          use_key_padding_mask=False,
      )
      str(self_attn_block)
      out_dict = self_attn_block(in_dict)
      assert self_attn_block.get_num_of_parameters() == 361
      assert len(out_dict.keys()) == len(self_attn_block.out_keys) == 1
      assert out_dict[self_attn_block.out_keys[0]].shape == (2, 10)
  
file_path: maze/maze/test/perception/blocks/test_multi_head_attention.py
imports: from maze.perception.blocks.feed_forward.multi_head_attention import MultiHeadAttentionBlock
  from maze.test.perception.perception_test_utils import build_multi_input_dict
label_desc: Use image node_id 4 for calling a global function with example usage: test_attention_sequential_2() without return types