class_docstr: Distributes sparse features (input) to be data-parallel.
class_docstr_tok: ["Distributes","sparse","features","(","input",")","to","be","data-parallel","."]
docstr: No-op as sparse features are already distributed in data-parallel fashion.
  
  Args:
      sparse_features (SparseFeatures): input sparse features.
  
  Returns:
      Awaitable[Awaitable[SparseFeatures]]: awaitable of awaitable of SparseFeatures.
docstr_tok: ["No-op","as","sparse","features","are","already","distributed","in","data-parallel","fashion",".","Args",":","sparse_features","(","SparseFeatures",")",":","input","sparse","features",".","Returns",":","Awaitable","[","Awaitable","[","SparseFeatures","]","]",":","awaitable","of","awaitable","of","SparseFeatures","."]
code: def forward(
      self,
      sparse_features: KeyedJaggedTensor,
  ) -> Awaitable[Awaitable[KeyedJaggedTensor]]:
      """
      No-op as sparse features are already distributed in data-parallel fashion.
  
      Args:
          sparse_features (SparseFeatures): input sparse features.
  
      Returns:
          Awaitable[Awaitable[SparseFeatures]]: awaitable of awaitable of SparseFeatures.
      """
  
      if sparse_features.variable_stride_per_key():
          raise ValueError(
              "Dense TBE kernel does not support variable batch per feature"
          )
      return NoWait(
          cast(Awaitable[KeyedJaggedTensor], NoWait(sparse_features))
      )
  
imports: from typing import Any, cast, Dict, List, Optional, TypeVar
  import torch
  from torchrec.distributed.embedding_lookup import GroupedPooledEmbeddingsLookup
  from torchrec.distributed.embedding_sharding import BaseEmbeddingDist, BaseEmbeddingLookup, BaseSparseFeaturesDist, EmbeddingSharding, EmbeddingShardingContext, EmbeddingShardingInfo, group_tables
  from torchrec.distributed.embedding_types import BaseGroupedFeatureProcessor, EmbeddingComputeKernel, GroupedEmbeddingConfig, ShardedEmbeddingTable
  from torchrec.distributed.types import Awaitable, NoWait, ShardingEnv, ShardMetadata
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor
  from torchrec.streamable import Multistreamable
label_desc: Use image node_id 2 for calling the DpSparseFeaturesDist obj's underlying member method code with example usage: obj.forward(sparse_features) and returns: NoWait