code: def test_meta_to_cpu(
      self,
      data_type: DataType,
      quant_type: torch.dtype,
      output_type: torch.dtype,
      permute_order: bool,
  ) -> None:
      eb1_config = EmbeddingBagConfig(
          name="t1",
          embedding_dim=16,
          num_embeddings=10,
          feature_names=["f1"],
          data_type=data_type,
      )
      eb2_config = EmbeddingBagConfig(
          name="t2",
          embedding_dim=16,
          num_embeddings=10,
          feature_names=["f2"],
          data_type=data_type,
      )
      features = (
          KeyedJaggedTensor(
              keys=["f1", "f2"],
              values=torch.as_tensor([0, 1]),
              lengths=torch.as_tensor([1, 1]),
          )
          if not permute_order
          else KeyedJaggedTensor(
              keys=["f2", "f1"],
              values=torch.as_tensor([1, 0]),
              lengths=torch.as_tensor([1, 1]),
          )
      )
      self._test_meta_to_cpu(
          [eb1_config, eb2_config], features, quant_type, output_type
      )
  
imports: import unittest
  from typing import List
  import torch
  from hypothesis import given, settings, strategies, Verbosity
  from torch import nn
  from torchrec.distributed.model_parallel import DistributedModelParallel
  from torchrec.distributed.types import ShardingEnv
  from torchrec.modules.embedding_configs import DataType, EmbeddingBagConfig
  from torchrec.modules.embedding_modules import EmbeddingBagCollection
  from torchrec.quant.embedding_modules import EmbeddingBagCollection
  from torchrec.quant.utils import meta_to_cpu_placement
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor, KeyedTensor
label_desc: Use image node_id 2 for calling the QuantUtilsTest obj's underlying member method code with example usage: obj.test_meta_to_cpu(data_type, quant_type, output_type, permute_order) without return types