class_docstr: This implementation uses non-fused EmbeddingCollection
class_docstr_tok: ["This","implementation","uses","non-fused","EmbeddingCollection"]
code: def shard(
      self,
      module: QuantEmbeddingCollection,
      params: Dict[str, ParameterSharding],
      env: ShardingEnv,
      device: Optional[torch.device] = None,
  ) -> ShardedQuantEmbeddingCollection:
      fused_params = self.fused_params if self.fused_params else {}
      fused_params["output_dtype"] = data_type_to_sparse_type(
          dtype_to_data_type(module.output_dtype())
      )
      if (
          FUSED_PARAM_QUANT_STATE_DICT_SPLIT_SCALE_BIAS
          not in fused_params
      ):
          fused_params[
              FUSED_PARAM_QUANT_STATE_DICT_SPLIT_SCALE_BIAS
          ] = getattr(
              module,
              MODULE_ATTR_QUANT_STATE_DICT_SPLIT_SCALE_BIAS,
              False,
          )
      if FUSED_PARAM_REGISTER_TBE_BOOL not in fused_params:
          fused_params[FUSED_PARAM_REGISTER_TBE_BOOL] = getattr(
              module, FUSED_PARAM_REGISTER_TBE_BOOL, False
          )
      return ShardedQuantEmbeddingCollection(
          module=module,
          table_name_to_parameter_sharding=params,
          env=env,
          fused_params=fused_params,
          device=device,
      )
  
imports: from collections import defaultdict, deque
  from dataclasses import dataclass
  from typing import Any, cast, Dict, List, Optional, Tuple, Type
  import torch
  from fbgemm_gpu.split_table_batched_embeddings_ops_inference import IntNBitTableBatchedEmbeddingBagsCodegen
  from torch import nn
  from torchrec.distributed.embedding import create_sharding_infos_by_sharding, EmbeddingShardingInfo
  from torchrec.distributed.embedding_sharding import EmbeddingSharding
  from torchrec.distributed.embedding_types import BaseQuantEmbeddingSharder, FeatureShardingMixIn, GroupedEmbeddingConfig, KJTList, ListOfKJTList, ShardingType
  from torchrec.distributed.fused_params import FUSED_PARAM_QUANT_STATE_DICT_SPLIT_SCALE_BIAS, FUSED_PARAM_REGISTER_TBE_BOOL, get_tbes_to_register_from_iterable, is_fused_param_quant_state_dict_split_scale_bias, is_fused_param_register_tbe
  from torchrec.distributed.quant_state import ShardedQuantEmbeddingModuleState
  from torchrec.distributed.sharding.cw_sequence_sharding import InferCwSequenceEmbeddingSharding
  from torchrec.distributed.sharding.rw_sequence_sharding import InferRwSequenceEmbeddingSharding
  from torchrec.distributed.sharding.rw_sharding import InferRwSparseFeaturesDist
  from torchrec.distributed.sharding.sequence_sharding import InferSequenceShardingContext
  from torchrec.distributed.sharding.tw_sequence_sharding import InferTwSequenceEmbeddingSharding
  from torchrec.distributed.types import ParameterSharding, ShardingEnv, ShardMetadata
  from torchrec.modules.embedding_configs import data_type_to_sparse_type, dtype_to_data_type, EmbeddingConfig
  from torchrec.quant.embedding_modules import EmbeddingCollection, MODULE_ATTR_QUANT_STATE_DICT_SPLIT_SCALE_BIAS
  from torchrec.sparse.jagged_tensor import JaggedTensor, KeyedJaggedTensor
  from torchrec.streamable import Multistreamable
label_desc: Use image node_id 1 for calling the QuantEmbeddingCollectionSharder obj's underlying member method code with example usage: obj.shard(module, params, env, device) and returns: ShardedQuantEmbeddingCollection