code: def __call__(self, pooled_embs: torch.Tensor) -> torch.Tensor:
      result = torch.ops.fbgemm.permute_pooled_embs_auto_grad(
          pooled_embs,
          self._offset_dim_list.to(device=pooled_embs.device),
          self._permute.to(device=pooled_embs.device),
          self._inv_offset_dim_list.to(device=pooled_embs.device),
          self._inv_permute.to(device=pooled_embs.device),
      )
      return result
  
imports: import copy
  import logging
  from collections import OrderedDict
  from itertools import accumulate
  from typing import Any, Dict, List, Optional, Set, Type, TypeVar, Union
  import torch
  from fbgemm_gpu.split_embedding_configs import EmbOptimType
  from torch import nn
  from torchrec import optim
  from torchrec.distributed.embedding_types import EmbeddingComputeKernel
  from torchrec.distributed.types import DataType, ParameterSharding, ShardedModule, ShardingType
  from torchrec.modules.embedding_configs import data_type_to_sparse_type
  from torchrec.types import CopyMixIn
label_desc: Use image node_id 2 for calling the PermutePooledEmbeddings obj's underlying member method code with example usage: obj.__call__(pooled_embs) and returns: result