class_docstr: Simple version of a sequence tower embedding model.
  
  Args:
      tables: List[EmbeddingBagConfig],
      num_float_features: int,
      weighted_tables: Optional[List[EmbeddingConfig]],
      embedding_groups: Optional[Dict[str, List[str]]],
      dense_device: Optional[torch.device],
      sparse_device: Optional[torch.device],
  
  Call Args:
      input: ModelInput,
  
  Returns:
      torch.Tensor
  
  Example:
      >>> TestSequenceTowerInteraction()
class_docstr_tok: ["Simple","version","of","a","sequence","tower","embedding","model",".","Args",":","tables",":","List","[","EmbeddingBagConfig","]",",","num_float_features",":","int",",","weighted_tables",":","Optional","[","List","[","EmbeddingConfig","]","]",",","embedding_groups",":","Optional","[","Dict","[","str",",","List","[","str","]","]","]",",","dense_device",":","Optional","[","torch.device","]",",","sparse_device",":","Optional","[","torch.device","]",",","Call","Args",":","input",":","ModelInput",",","Returns",":","torch.Tensor","Example",":",">",">",">","TestSequenceTowerInteraction","(",")"]
code: def forward(
      self,
      input: ModelInput,
  ) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]:
      dense_r = self.dense(input.float_features)
      tower_0_r = self.tower_0(input.idlist_features)
      tower_1_r = self.tower_1(input.idlist_features)
  
      sparse_r = torch.cat([tower_0_r, tower_1_r], dim=1)
      over_r = self.over(torch.cat([dense_r, sparse_r], dim=1))
      pred = torch.sigmoid(torch.mean(over_r, dim=1))
      if self.training:
          return (
              torch.nn.functional.binary_cross_entropy_with_logits(
                  pred, input.label
              ),
              pred,
          )
      else:
          return pred
  
imports: from typing import cast, Dict, List, Optional, Tuple, Union
  import torch
  import torch.nn
  from torchrec.distributed.embedding import EmbeddingCollectionSharder
  from torchrec.distributed.fbgemm_qcomm_codec import get_qcomm_codecs_registry, QCommsConfig
  from torchrec.distributed.test_utils.test_model import ModelInput, TestDenseArch, TestSparseNNBase
  from torchrec.modules.embedding_configs import BaseEmbeddingConfig, EmbeddingConfig
  from torchrec.modules.embedding_modules import EmbeddingCollection
  from torchrec.modules.embedding_tower import EmbeddingTower
  from torchrec.sparse.jagged_tensor import JaggedTensor, KeyedJaggedTensor
label_desc: Use image node_id 2 for calling the TestSequenceTowerSparseNN obj's underlying member method code with example usage: obj.forward(input) and returns: torch,  pred, pred