code: def sharded_parameter_names(self, prefix: str = "") -> Iterator[str]:
      # different than ShardedEmbeddingCollection - we consider DDP to be "sharded", so that it doesn't get wrapped up in ddp again
      # semantics of this is actually "parameters that don't need to have their gradients reduced"
      for lookup, _ in zip(
          self._lookups, self._sharding_type_to_sharding.keys()
      ):
          for name, _ in lookup.named_parameters(
              append_prefix(prefix, "embeddings")
          ):
              yield name
  
imports: from typing import Dict, Iterator, List, Optional, Type
  import torch
  from torch import nn
  from torch.nn.parallel import DistributedDataParallel
  from torchrec.distributed.embedding import ShardedEmbeddingCollection
  from torchrec.distributed.embedding_types import BaseEmbeddingSharder, EmbeddingComputeKernel
  from torchrec.distributed.sharding.dp_sharding import DpPooledEmbeddingSharding
  from torchrec.distributed.types import ParameterSharding, ShardingEnv, ShardingType
  from torchrec.distributed.utils import append_prefix
  from torchrec.modules.fused_embedding_modules import convert_optimizer_type_and_kwargs, FusedEmbeddingCollection
  from torchrec.optim.fused import FusedOptimizerModule
label_desc: Use image node_id 2 for calling the ShardedFusedEmbeddingCollection obj's underlying member method code with example usage: obj.sharded_parameter_names(prefix) without return types