code: def _array_descr(descriptor):
      fields = descriptor.fields
      if fields is None:
          subdtype = descriptor.subdtype
          if subdtype is None:
              if descriptor.metadata is None:
                  return descriptor.str
              else:
                  new = descriptor.metadata.copy()
                  if new:
                      return (descriptor.str, new)
                  else:
                      return descriptor.str
          else:
              return (_array_descr(subdtype[0]), subdtype[1])
  
      names = descriptor.names
      ordered_fields = [fields[x] + (x,) for x in names]
      result = []
      offset = 0
      for field in ordered_fields:
          if field[1] > offset:
              num = field[1] - offset
              result.append(("", f"|V{num}"))
              offset += num
          elif field[1] < offset:
              raise ValueError(
                  "dtype.descr is not defined for types with overlapping or "
                  "out-of-order fields"
              )
          if len(field) > 3:
              name = (field[2], field[3])
          else:
              name = field[2]
          if field[0].subdtype:
              tup = (
                  name,
                  _array_descr(field[0].subdtype[0]),
                  field[0].subdtype[1],
              )
          else:
              tup = (name, _array_descr(field[0]))
          offset += field[0].itemsize
          result.append(tup)
  
      if descriptor.itemsize > offset:
          num = descriptor.itemsize - offset
          result.append(("", f"|V{num}"))
  
      return result
  
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 3 for calling a global function with example usage: _array_descr(descriptor) and returns: result, _array_descr,  subdtype, descriptor, descriptor,  new, descriptor