class_docstr: Generates embedding sharding options for given `nn.Module`, considering user provided
  constraints.
  
  Args:
      topology (Topology): device topology.
      batch_size (int): batch size.
      constraints (Optional[Dict[str, ParameterConstraints]]): dict of parameter names
          to provided ParameterConstraints.
class_docstr_tok: ["Generates","embedding","sharding","options","for","given","`","nn.Module","`",",","considering","user","provided","constraints",".","Args",":","topology","(","Topology",")",":","device","topology",".","batch_size","(","int",")",":","batch","size",".","constraints","(","Optional","[","Dict","[","str",",","ParameterConstraints","]","]",")",":","dict","of","parameter","names","to","provided","ParameterConstraints","."]
code: def populate_estimates(
      self, sharding_options: List[ShardingOption]
  ) -> None:
      for estimator in self._estimators:
          estimator.estimate(sharding_options, self._sharder_map)
  
imports: import logging
  from typing import Dict, List, Optional, Tuple, Union
  from torch import nn
  from torchrec.distributed.embedding_types import EmbeddingComputeKernel
  from torchrec.distributed.planner.constants import POOLING_FACTOR
  from torchrec.distributed.planner.shard_estimators import EmbeddingPerfEstimator, EmbeddingStorageEstimator
  from torchrec.distributed.planner.types import Enumerator, ParameterConstraints, PartitionByType, Shard, ShardEstimator, ShardingOption, Topology
  from torchrec.distributed.planner.utils import sharder_name
  from torchrec.distributed.sharding_plan import calculate_shard_sizes_and_offsets
  from torchrec.distributed.types import BoundsCheckMode, CacheParams, ModuleSharder, ShardingType
  from torchrec.modules.embedding_tower import EmbeddingTower, EmbeddingTowerCollection
label_desc: Use image node_id 3 for calling the EmbeddingEnumerator obj's underlying member method code with example usage: obj.populate_estimates(sharding_options) without return types