class_docstr: Base class for table wise sharding.
class_docstr_tok: ["Base","class","for","table","wise","sharding","."]
code: def _emb_dim_per_rank_per_feature(self) -> List[List[int]]:
      emb_dim_per_rank_per_feature = []
      for (
          grouped_embedding_configs
      ) in self._grouped_embedding_configs_per_rank:
          emb_dim_per_feature = []
          for grouped_config in grouped_embedding_configs:
              emb_dim_per_feature += grouped_config.embedding_dims()
          emb_dim_per_rank_per_feature.append(emb_dim_per_feature)
      return emb_dim_per_rank_per_feature
  
imports: from typing import Any, Callable, cast, Dict, List, Optional, TypeVar, Union
  import torch
  import torch.distributed
  from torchrec.distributed.dist_data import EmbeddingsAllToOne, KJTAllToAll, KJTOneToAll, PooledEmbeddingsAllToAll, VariableBatchPooledEmbeddingsAllToAll
  from torchrec.distributed.embedding_lookup import GroupedPooledEmbeddingsLookup, InferGroupedPooledEmbeddingsLookup
  from torchrec.distributed.embedding_sharding import BaseEmbeddingDist, BaseEmbeddingLookup, BaseSparseFeaturesDist, 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 4 for calling the BaseTwEmbeddingSharding obj's underlying member method code with example usage: obj._emb_dim_per_rank_per_feature() and returns: emb_dim_per_rank_per_feature