class_docstr: Processes the sparse features of the DeepFMNN model. Does embedding lookups for all
  EmbeddingBag and embedding features of each collection.
  
  Args:
      embedding_bag_collection (EmbeddingBagCollection): represents a collection of
          pooled embeddings.
  
  Example::
  
      eb1_config = EmbeddingBagConfig(
          name="t1", embedding_dim=3, num_embeddings=10, feature_names=["f1"]
      )
      eb2_config = EmbeddingBagConfig(
          name="t2", embedding_dim=4, num_embeddings=10, feature_names=["f2"]
      )
  
      ebc = EmbeddingBagCollection(tables=[eb1_config, eb2_config])
  
      #     0       1        2  <-- batch
      # 0   [0,1] None    [2]
      # 1   [3]    [4]    [5,6,7]
      # ^
      # feature
      features = KeyedJaggedTensor.from_offsets_sync(
          keys=["f1", "f2"],
          values=torch.tensor([0, 1, 2, 3, 4, 5, 6, 7]),
          offsets=torch.tensor([0, 2, 2, 3, 4, 5, 8]),
      )
  
      sparse_arch(features)
class_docstr_tok: ["Processes","the","sparse","features","of","the","DeepFMNN","model",".","Does","embedding","lookups","for","all","EmbeddingBag","and","embedding","features","of","each","collection",".","Args",":","embedding_bag_collection","(","EmbeddingBagCollection",")",":","represents","a","collection","of","pooled","embeddings",".","Example",":",":","eb1_config","=","EmbeddingBagConfig","(","name=","''","t1","''",",","embedding_dim=3",",","num_embeddings=10",",","feature_names=","[","``","f1","''","]",")","eb2_config","=","EmbeddingBagConfig","(","name=","''","t2","''",",","embedding_dim=4",",","num_embeddings=10",",","feature_names=","[","``","f2","''","]",")","ebc","=","EmbeddingBagCollection","(","tables=","[","eb1_config",",","eb2_config","]",")","#","0","1","2","<","--","batch","#","0","[","0,1","]","None","[","2","]","#","1","[","3","]","[","4","]","[","5,6,7","]","#","^","#","feature","features","=","KeyedJaggedTensor.from_offsets_sync","(","keys=","[","``","f1","''",",","``","f2","''","]",",","values=torch.tensor","(","[","0",",","1",",","2",",","3",",","4",",","5",",","6",",","7","]",")",",","offsets=torch.tensor","(","[","0",",","2",",","2",",","3",",","4",",","5",",","8","]",")",",",")","sparse_arch","(","features",")"]
docstr: Args:
      features (KeyedJaggedTensor):
  
  Returns:
      KeyedJaggedTensor: an output KJT of size F * D X B.
docstr_tok: ["Args",":","features","(","KeyedJaggedTensor",")",":","Returns",":","KeyedJaggedTensor",":","an","output","KJT","of","size","F","*","D","X","B","."]
code: def forward(
      self,
      features: KeyedJaggedTensor,
  ) -> KeyedTensor:
      """
      Args:
          features (KeyedJaggedTensor):
  
      Returns:
          KeyedJaggedTensor: an output KJT of size F * D X B.
      """
      return self.embedding_bag_collection(features)
  
imports: from typing import List
  import torch
  from torch import nn
  from torchrec import EmbeddingBagCollection, KeyedJaggedTensor
  from torchrec.modules.deepfm import DeepFM, FactorizationMachine
  from torchrec.sparse.jagged_tensor import KeyedTensor
label_desc: Use image node_id 2 for calling the SparseArch obj's underlying member method code with example usage: obj.forward(features) and returns: self