code: def __init__(
      self,
      hidden_size,
      num_attention_heads,
      attention_probs_dropout_prob,
  ):
      self.num_attention_heads = num_attention_heads
      self.attention_head_size = int(hidden_size / num_attention_heads)
      self.all_head_size = (
          self.num_attention_heads * self.attention_head_size
      )
  
      self.query = Linear(hidden_size, self.all_head_size)
      self.key = Linear(hidden_size, self.all_head_size)
      self.value = Linear(hidden_size, self.all_head_size)
  
      self.dropout = attention_probs_dropout_prob
  
imports: from tinygrad.tensor import Tensor
  from tinygrad.nn import Linear, LayerNorm, Embedding
  from tinygrad.helpers import fetch, get_child
  from pathlib import Path
label_desc: Use image node_id 1 to create a new BertSelfAttention object  with example: obj = BertSelfAttention(hidden_size, num_attention_heads, attention_probs_dropout_prob)