code: def build(self, input_shape=None):
      if self.built:
          return
      self.built = True
      if getattr(self, "Wq", None) is not None:
          with tf.name_scope(self.Wq.name):
              self.Wq.build([None, None, self.d_model_size])
      if getattr(self, "Wk", None) is not None:
          with tf.name_scope(self.Wk.name):
              self.Wk.build([None, None, self.d_model_size])
      if getattr(self, "Wv", None) is not None:
          with tf.name_scope(self.Wv.name):
              self.Wv.build([None, None, self.d_model_size])
      if getattr(self, "dense", None) is not None:
          with tf.name_scope(self.dense.name):
              self.dense.build([None, None, self.d_model_size])
  
imports: from __future__ import annotations
  from typing import Optional, Tuple, Union
  import numpy
  import tensorflow
  from ...modeling_tf_outputs import TFBaseModelOutputWithPast, TFCausalLMOutputWithPast, TFSequenceClassifierOutput
  from ...modeling_tf_utils import TFCausalLanguageModelingLoss, TFModelInputType, TFPreTrainedModel, TFSequenceClassificationLoss, get_initializer, keras_serializable, unpack_inputs
  from ...tf_utils import check_embeddings_within_bounds, shape_list, stable_softmax
  from ...utils import add_code_sample_docstrings, add_start_docstrings, add_start_docstrings_to_model_forward, logging
  from .configuration_ctrl import CTRLConfig
label_desc: Use image node_id 4 for calling the TFMultiHeadAttention obj's underlying member method code with example usage: obj.build(input_shape) without return types