code: def test_basic(self) -> None:
      B = 2
      D = 8
      num_dense_features = 100
      eb1_config = EmbeddingBagConfig(
          name="t1",
          embedding_dim=D,
          num_embeddings=100,
          feature_names=["f1", "f3"],
      )
      eb2_config = EmbeddingBagConfig(
          name="t2",
          embedding_dim=D,
          num_embeddings=100,
          feature_names=["f2"],
      )
  
      ebc = EmbeddingBagCollection(tables=[eb1_config, eb2_config])
  
      features = torch.rand((B, num_dense_features))
      sparse_features = KeyedJaggedTensor.from_offsets_sync(
          keys=["f1", "f3", "f2"],
          values=torch.tensor([1, 2, 4, 5, 4, 3, 2, 9, 1, 2, 3]),
          offsets=torch.tensor([0, 2, 4, 6, 8, 10, 11]),
      )
  
      deepfm_nn = SimpleDeepFMNN(
          num_dense_features=num_dense_features,
          embedding_bag_collection=ebc,
          hidden_layer_size=20,
          deep_fm_dimension=5,
      )
  
      logits = deepfm_nn(
          dense_features=features,
          sparse_features=sparse_features,
      )
      self.assertEqual(logits.size(), (B, 1))
  
file_path: torchrec/torchrec/models/tests/test_deepfm.py
imports: import unittest
  import torch
  from torch.testing import FileCheck
  from torchrec.fx import symbolic_trace, Tracer
  from torchrec.models.deepfm import DenseArch, FMInteractionArch, SimpleDeepFMNN
  from torchrec.modules.embedding_configs import EmbeddingBagConfig
  from torchrec.modules.embedding_modules import EmbeddingBagCollection
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor, KeyedTensor
label_desc: Use image node_id 1 for calling the SimpleDeepFMNNTest obj's underlying member method code with example usage: obj.test_basic() without return types