code: def forward(
      self,
      input_ids=None,
      token_type_ids=None,
      position_ids=None,
      inputs_embeds=None,
      past_key_values_length=0,
  ):
      assert input_ids is not None
      assert position_ids is None
      assert inputs_embeds is None
      # assert torch.all(token_type_ids == 0)
  
      input_shape = input_ids.size()
      seq_length = input_shape[1]
      position_ids = self.position_ids[:, :seq_length]
  
      token_type_ids = self.token_type_ids[:, :seq_length].expand(
          input_shape[0], seq_length
      )
  
      inputs_embeds = self.word_embeddings(input_ids)
      token_type_embeddings = self.token_type_embeddings(token_type_ids)
  
      embeddings = inputs_embeds + token_type_embeddings
      embeddings = self.emb_quant(embeddings)
      position_embeddings = self.position_embeddings(position_ids)
      embeddings += position_embeddings
      embeddings = self.LayerNorm(embeddings)
      embeddings = self.dropout(embeddings)
      return embeddings
  
imports: import math
  import uuid
  from typing import Dict, Optional, List
  import torch
  from torch import Tensor, nn
  from torch.nn import Parameter, LayerNorm, Dropout
  from lightseq.training.ops.pytorch import util
  from lightseq.training.ops.pytorch.layer_base import TransformerEmbeddingLayerBase, TransformerEncoderLayerBase, TransformerDecoderLayerBase
  from .quantization import QuantLinear, TensorQuantizer, act_quant_config, weight_quant_config, out_quant_config, emb_quant_config
label_desc: Use image node_id 2 for calling the BertEmbeddingLayer obj's underlying member method code with example usage: obj.forward(input_ids, token_type_ids, position_ids, inputs_embeds, past_key_values_length) and returns: embeddings