code: def split_half_float_double(tensors):
      dtypes = [
          "torch.cuda.HalfTensor",
          "torch.cuda.FloatTensor",
          "torch.cuda.DoubleTensor",
      ]
      buckets = []
      for i, dtype in enumerate(dtypes):
          bucket = [t for t in tensors if t.type() == dtype]
          if bucket:
              buckets.append(bucket)
      return buckets
  
imports: from collections import OrderedDict
  import copy
  import importlib
  from itertools import chain
  import torch
  import torch.distributed
  from torch.nn.modules import Module
  from torch.autograd import Variable
  from ..multi_tensor_apply import multi_tensor_applier
label_desc: Use image node_id 5 for calling a global function with example usage: split_half_float_double(tensors) and returns: buckets