class_docstr: FeatureProcessedEmbeddingBagCollection represents a EmbeddingBagCollection module and a set of feature processor modules.
  The inputs into the FP-EBC will first be modified by the feature processor before being passed into the embedding bag collection.
  
  For details of input and output types, see EmbeddingBagCollection
  
  
  Args:
      embedding_bag_collection (EmbeddingBagCollection): ebc module
      feature_processors (Dict[str, FeatureProcessor]): feature processors
  Example::
      fp_ebc = FeatureProcessedEmbeddingBagCollection(
          EmbeddingBagCollection(...),
          {
              "feature_1": FeatureProcessorModule(...),
              "feature_2": FeatureProcessorModule2(...),
          }
      )
  
      features = KeyedJaggedTensor(
          keys=["f1", "f2"],
          values=torch.tensor([0, 1, 2, 3, 4, 5, 6, 7]),
          offsets=torch.tensor([0, 2, 2, 3, 4, 5, 8]),
      )
  
      >>> fp_ebc(features).to_dict()
      {
          "feature_1": torch.Tensor(...)
          "feature_2": torch.Tensor(...)
      }
class_docstr_tok: ["FeatureProcessedEmbeddingBagCollection","represents","a","EmbeddingBagCollection","module","and","a","set","of","feature","processor","modules",".","The","inputs","into","the","FP-EBC","will","first","be","modified","by","the","feature","processor","before","being","passed","into","the","embedding","bag","collection",".","For","details","of","input","and","output","types",",","see","EmbeddingBagCollection","Args",":","embedding_bag_collection","(","EmbeddingBagCollection",")",":","ebc","module","feature_processors","(","Dict","[","str",",","FeatureProcessor","]",")",":","feature","processors","Example",":",":","fp_ebc","=","FeatureProcessedEmbeddingBagCollection","(","EmbeddingBagCollection","(","...",")",",","{","``","feature_1","''",":","FeatureProcessorModule","(","...",")",",","``","feature_2","''",":","FeatureProcessorModule2","(","...",")",",","}",")","features","=","KeyedJaggedTensor","(","keys=","[","``","f1","''",",","``","f2","''","]",",","values=torch.tensor","(","[","0",",","1",",","2",",","3",",","4",",","5",",","6",",","7","]",")",",","offsets=torch.tensor","(","[","0",",","2",",","2",",","3",",","4",",","5",",","8","]",")",",",")",">",">",">","fp_ebc","(","features",")",".to_dict","(",")","{","``","feature_1","''",":","torch.Tensor","(","...",")","``","feature_2","''",":","torch.Tensor","(","...",")","}"]
docstr: Args:
      features (KeyedJaggedTensor): KJT of form [F X B X L].
  
  Returns:
      KeyedTensor
docstr_tok: ["Args",":","features","(","KeyedJaggedTensor",")",":","KJT","of","form","[","F","X","B","X","L","]",".","Returns",":","KeyedTensor"]
code: def forward(
      self,
      features: KeyedJaggedTensor,
  ) -> KeyedTensor:
      """
      Args:
          features (KeyedJaggedTensor): KJT of form [F X B X L].
  
      Returns:
          KeyedTensor
      """
  
      if isinstance(
          self._feature_processors, FeatureProcessorsCollection
      ):
          fp_features = self._feature_processors(features)
      else:
          # TODO: This path isn't currently scriptable. May be hard to support Dict[nn.Module]. Workaround is to always use FP-Collections
          fp_features = apply_feature_processors_to_kjt(
              features,
              self._feature_processors,
          )
  
      return self._embedding_bag_collection(fp_features)
  
file_path: torchrec/torchrec/modules/fp_embedding_modules.py
imports: from typing import Dict, List, Set, Union
  import torch
  import torch.nn
  from torchrec.modules.embedding_modules import EmbeddingBagCollection
  from torchrec.modules.feature_processor_ import FeatureProcessor, FeatureProcessorsCollection
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor, KeyedTensor
label_desc: Use image node_id 2 for calling the FeatureProcessedEmbeddingBagCollection obj's underlying member method code with example usage: obj.forward(features) and returns: self