code: def multi_head_attention(
      self: ivy.Container,
      /,
      *,
      key: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      value: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      num_heads: Union[int, ivy.Container] = 8,
      scale: Optional[Union[float, ivy.Container]] = None,
      attention_mask: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      in_proj_weights: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      q_proj_weights: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      k_proj_weights: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      v_proj_weights: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      out_proj_weights: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      in_proj_bias: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      out_proj_bias: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      is_causal: Union[bool, ivy.Container] = False,
      key_padding_mask: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      bias_k: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      bias_v: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      static_k: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      static_v: Optional[
          Union[ivy.Array, ivy.NativeArray, ivy.Container]
      ] = None,
      add_zero_attn: Union[bool, ivy.Container] = False,
      return_attention_weights: Union[bool, ivy.Container] = False,
      average_attention_weights: Union[bool, ivy.Container] = True,
      dropout: Union[float, ivy.Container] = 0.0,
      training: Union[bool, ivy.Container] = False,
      key_chains: Optional[
          Union[List[str], Dict[str, str], ivy.Container]
      ] = None,
      to_apply: Union[bool, ivy.Container] = True,
      prune_unapplied: Union[bool, ivy.Container] = False,
      map_sequences: Union[bool, ivy.Container] = False,
      out: Optional[Union[ivy.Array, ivy.Container]] = None,
  ) -> ivy.Container:
      return self._static_multi_head_attention(
          self,
          key=key,
          value=value,
          num_heads=num_heads,
          scale=scale,
          attention_mask=attention_mask,
          in_proj_weights=in_proj_weights,
          q_proj_weights=q_proj_weights,
          k_proj_weights=k_proj_weights,
          v_proj_weights=v_proj_weights,
          out_proj_weights=out_proj_weights,
          in_proj_bias=in_proj_bias,
          out_proj_bias=out_proj_bias,
          is_causal=is_causal,
          key_padding_mask=key_padding_mask,
          bias_k=bias_k,
          bias_v=bias_v,
          static_k=static_k,
          static_v=static_v,
          add_zero_attn=add_zero_attn,
          return_attention_weights=return_attention_weights,
          average_attention_weights=average_attention_weights,
          dropout=dropout,
          training=training,
          key_chains=key_chains,
          to_apply=to_apply,
          prune_unapplied=prune_unapplied,
          map_sequences=map_sequences,
          out=out,
      )
  
imports: from typing import Optional, Tuple, Union, List, Callable, Dict, Sequence
  from ivy.data_classes.container.base import ContainerBase
  import ivy
label_desc: Use image node_id 14 for calling the _ContainerWithLayers obj's underlying member method code with example usage: obj.multi_head_attention() and returns: self