code: def _getfield_is_safe(oldtype, newtype, offset):
      """Checks safety of getfield for object arrays.
  
      As in _view_is_safe, we need to check that memory containing objects is not
      reinterpreted as a non-object datatype and vice versa.
  
      Parameters
      ----------
      oldtype : data-type
          Data type of the original ndarray.
      newtype : data-type
          Data type of the field being accessed by ndarray.getfield
      offset : int
          Offset of the field being accessed by ndarray.getfield
  
      Raises
      ------
      TypeError
          If the field access is invalid
  
      """
      if newtype.hasobject or oldtype.hasobject:
          if offset == 0 and newtype == oldtype:
              return
          if oldtype.names is not None:
              for name in oldtype.names:
                  if (
                      oldtype.fields[name][1] == offset
                      and oldtype.fields[name][0] == newtype
                  ):
                      return
          raise TypeError("Cannot get/set field of an object array")
      return
  
imports: import ast
  import re
  import sys
  import warnings
  from ..exceptions import DTypePromotionError
  from .multiarray import dtype, array, ndarray, promote_types
label_desc: Use image node_id 10 for calling a global function with example usage: _getfield_is_safe(oldtype, newtype, offset) without return types