code: def _build_proj_equation(free_dims, bound_dims, output_dims):
      """Builds an einsum equation for projections inside multi-head attention."""
      input_str = ""
      kernel_str = ""
      output_str = ""
      bias_axes = ""
      letter_offset = 0
      for i in range(free_dims):
          char = _index_to_einsum_variable(i + letter_offset)
          input_str += char
          output_str += char
  
      letter_offset += free_dims
      for i in range(bound_dims):
          char = _index_to_einsum_variable(i + letter_offset)
          input_str += char
          kernel_str += char
  
      letter_offset += bound_dims
      for i in range(output_dims):
          char = _index_to_einsum_variable(i + letter_offset)
          kernel_str += char
          output_str += char
          bias_axes += char
      equation = f"{input_str},{kernel_str}->{output_str}"
  
      return equation, bias_axes, len(output_str)
  
imports: import collections
  import math
  import string
  import numpy
  from keras import constraints
  from keras import initializers
  from keras import ops
  from keras import regularizers
  from keras.api_export import keras_export
  from keras.layers.activations.softmax import Softmax
  from keras.layers.core.einsum_dense import EinsumDense
  from keras.layers.layer import Layer
  from keras.layers.regularization.dropout import Dropout
label_desc: Use image node_id 3 for calling a global function with example usage: _build_proj_equation(free_dims, bound_dims, output_dims) and returns: equation,  bias_axes,  len