code: def _separate_pinned_tensors(self, swap_info):
      pinned_tensors = []
      pinned_paths = []
  
      unpinned_tensors = []
      unpinned_paths = []
  
      for tensor, path in zip(swap_info.tensors, swap_info.swap_paths):
          if get_accelerator().is_pinned(tensor):
              pinned_tensors.append(tensor)
              pinned_paths.append(path)
          else:
              unpinned_tensors.append(tensor)
              unpinned_paths.append(path)
  
      return (
          pinned_tensors,
          pinned_paths,
          unpinned_tensors,
          unpinned_paths,
      )
  
imports: import torch
  from deepspeed.utils.logging import logger
  from deepspeed.ops.op_builder import AsyncIOBuilder
  from deepspeed import comm
  from deepspeed.runtime.swap_tensor.constants import *
  from deepspeed.runtime.swap_tensor.utils import swap_in_tensors, swap_out_tensors, print_object, get_sized_buffers
  from deepspeed.runtime.swap_tensor.async_swapper import AsyncTensorSwapper
  from deepspeed.runtime.swap_tensor.optimizer_utils import OptimizerSwapper
  from deepspeed.accelerator import get_accelerator
label_desc: Use image node_id 9 for calling the PartitionedOptimizerSwapper obj's underlying member method code with example usage: obj._separate_pinned_tensors(swap_info) and returns: pinned_tensors,  pinned_paths,  unpinned_tensors,  unpinned_paths