code: def numpy_type_to_builtin_type(nptype):
      # If this is a data type object, use the corresponding scalar data type.
      if np.issubclass_(type(nptype), np.dtype):
          nptype = nptype.type
  
      if np.issubclass_(nptype, (bool, np.bool_)):
          # numpy as 2 bool types it looks like. what is the difference?
          return types_bool
      # Because np.uint is a subclass of int,
      # we need to first check for np.uint before
      # checking for int
      elif np.issubclass_(nptype, np.uint8):
          return types_uint8
      elif np.issubclass_(nptype, np.int8):
          return types_int8
      elif np.issubclass_(nptype, np.uint16):
          return types_uint16
      elif np.issubclass_(nptype, np.int16):
          return types_int16
      elif np.issubclass_(nptype, np.uint32):
          return types_uint32
      elif np.issubclass_(nptype, np.int32):
          return types_int32
      elif np.issubclass_(nptype, np.uint64):
          return types_uint64
      elif np.issubclass_(nptype, np.int64):
          return types_int64
      elif np.issubclass_(nptype, int) or nptype == int:
          # Catch all int
          return types_int32
      elif np.issubclass_(nptype, np.object_):
          # symbolic shape is considered int32
          return types_int32
      elif np.issubclass_(nptype, np.float16):
          return types_fp16
      elif (
          np.issubclass_(nptype, (np.float32, np.single))
          or nptype == float
      ):
          return types_fp32
      elif np.issubclass_(nptype, (np.float64, np.double)):
          return types_fp64
      elif np.issubclass_(nptype, np.complex64):
          return types_complex64
      elif np.issubclass_(nptype, (np.complex128, complex)):
          return types_complex128
      elif np.issubclass_(nptype, (str, np.string_, np.str_)):
          return types_str
      else:
          raise TypeError(f"Unsupported numpy type: {nptype}.")
  
imports: from collections import namedtuple
  import numpy
  import numpy
  import sympy
  import coremltools.proto.MIL_pb2
  from .get_type_info import get_type_info
  from .type_bool import bool
  from .type_bool import is_bool
  from .type_complex import complex64
  from .type_complex import complex128
  from .type_complex import is_complex
  from .type_dict import is_dict
  from .type_double import fp16
  from .type_double import fp32
  from .type_double import fp64
  from .type_double import is_float
  from .type_int import int8
  from .type_int import int16
  from .type_int import int32
  from .type_int import int64
  from .type_int import is_int
  from .type_int import uint8
  from .type_int import uint16
  from .type_int import uint32
  from .type_int import uint64
  from .type_list import is_list
  from .type_str import str
  from .type_unknown import unknown
label_desc: Use image node_id 17 for calling a global function with example usage: numpy_type_to_builtin_type(nptype) and returns: types_bool, types_uint8, types_int8, types_uint16, types_int16, types_uint32, types_int32, types_uint64, types_int64, types_int32, types_int32, types_fp16, types_fp32, types_fp64, types_complex64, types_complex128, types_str