code: def create_input_dist(
      self,
      device: Optional[torch.device] = None,
  ) -> BaseSparseFeaturesDist[KJTList]:
      num_features = self._get_num_features()
      feature_hash_sizes = self._get_feature_hash_sizes()
  
      (embed_sharding, is_even_sharding) = get_embedding_shard_metadata(
          self._grouped_embedding_configs_per_rank
      )
  
      return InferRwSparseFeaturesDist(
          world_size=self._world_size,
          num_features=num_features,
          feature_hash_sizes=feature_hash_sizes,
          device=device if device is not None else self._device,
          embedding_shard_metadata=embed_sharding
          if not is_even_sharding
          else None,
      )
  
imports: import math
  from typing import Any, cast, Dict, List, Optional, Tuple, TypeVar, Union
  import torch
  import torch.distributed
  from torchrec.distributed.dist_data import EmbeddingsAllToOneReduce, KJTAllToAll, KJTOneToAll, PooledEmbeddingsReduceScatter, VariableBatchPooledEmbeddingsReduceScatter
  from torchrec.distributed.embedding_lookup import GroupedPooledEmbeddingsLookup, InferGroupedPooledEmbeddingsLookup
  from torchrec.distributed.embedding_sharding import BaseEmbeddingDist, BaseEmbeddingLookup, BaseSparseFeaturesDist, bucketize_kjt_before_all2all, EmbeddingSharding, EmbeddingShardingContext, EmbeddingShardingInfo, group_tables
  from torchrec.distributed.embedding_types import BaseGroupedFeatureProcessor, EmbeddingComputeKernel, GroupedEmbeddingConfig, KJTList, ShardedEmbeddingTable
  from torchrec.distributed.types import Awaitable, CommOp, NullShardingContext, QuantizedCommCodecs, ShardedTensorMetadata, ShardingEnv, ShardMetadata
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor
  from torchrec.streamable import Multistreamable
label_desc: Use image node_id 1 for calling the InferRwPooledEmbeddingSharding obj's underlying member method code with example usage: obj.create_input_dist(device) and returns: InferRwSparseFeaturesDist