code: def to(
      self,
      device: torch.device,
      *,
      use_amp: bool = False,
      use_half: bool = False,
  ) -> None:
      if use_amp and use_half:
          raise ValueError(
              "`use_amp` & `use_half` should not be True simultaneously"
          )
      self.device = device
      self.use_amp = use_amp
      self.use_half = use_half
      device_is_cpu = is_cpu(device)
      if device_is_cpu:
          self.m.to(device)
      if use_half:
          self.m.half()
      else:
          self.m.float()
      if not device_is_cpu:
          self.m.to(device)
  
imports: import torch
  import torch.nn
  from typing import Any
  from typing import Type
  from typing import TypeVar
  from typing import Optional
  from cftool.data_structures import ILoadableItem
  from cftool.data_structures import ILoadablePool
  from cftool.types import tensor_dict_type
  from torch.cuda.amp.autocast_mode import autocast
  from .zoo import TPipeline
  from ..misc.toolkit import is_cpu
  from ..misc.toolkit import get_device
  from ..misc.toolkit import empty_cuda_cache
label_desc: Use image node_id 2 for calling the APIMixin obj's underlying member method code with example usage: obj.to(device) without return types