class_docstr: Class to convert formats, names, titles description to a dtype.
  
  After constructing the format_parser object, the dtype attribute is
  the converted data-type:
  ``dtype = format_parser(formats, names, titles).dtype``
  
  Attributes
  ----------
  dtype : dtype
      The converted data-type.
  
  Parameters
  ----------
  formats : str or list of str
      The format description, either specified as a string with
      comma-separated format descriptions in the form ``'f8, i4, a5'``, or
      a list of format description strings  in the form
      ``['f8', 'i4', 'a5']``.
  names : str or list/tuple of str
      The field names, either specified as a comma-separated string in the
      form ``'col1, col2, col3'``, or as a list or tuple of strings in the
      form ``['col1', 'col2', 'col3']``.
      An empty list can be used, in that case default field names
      ('f0', 'f1', ...) are used.
  titles : sequence
      Sequence of title strings. An empty list can be used to leave titles
      out.
  aligned : bool, optional
      If True, align the fields by padding as the C-compiler would.
      Default is False.
  byteorder : str, optional
      If specified, all the fields will be changed to the
      provided byte-order.  Otherwise, the default byte-order is
      used. For all available string specifiers, see `dtype.newbyteorder`.
  
  See Also
  --------
  dtype, typename, sctype2char
  
  Examples
  --------
  >>> np.format_parser(['<f8', '<i4', '<a5'], ['col1', 'col2', 'col3'],
  ...                  ['T1', 'T2', 'T3']).dtype
  dtype([(('T1', 'col1'), '<f8'), (('T2', 'col2'), '<i4'), (('T3', 'col3'), 'S5')])
  
  `names` and/or `titles` can be empty lists. If `titles` is an empty list,
  titles will simply not appear. If `names` is empty, default field names
  will be used.
  
  >>> np.format_parser(['f8', 'i4', 'a5'], ['col1', 'col2', 'col3'],
  ...                  []).dtype
  dtype([('col1', '<f8'), ('col2', '<i4'), ('col3', '<S5')])
  >>> np.format_parser(['<f8', '<i4', '<a5'], [], []).dtype
  dtype([('f0', '<f8'), ('f1', '<i4'), ('f2', 'S5')])
code: def __init__(
      self, formats, names, titles, aligned=False, byteorder=None
  ):
      self._parseFormats(formats, aligned)
      self._setfieldnames(names, titles)
      self._createdtype(byteorder)
  
imports: import warnings
  from collections import Counter
  from contextlib import nullcontext
  from .._utils import set_module
  from .None import numeric
  from .None import numerictypes
  from numpy.compat import os_fspath
  from .arrayprint import _get_legacy_print_mode
label_desc: Use image node_id 1 to create a new format_parser object  with example: obj = format_parser(formats, names, titles, aligned, byteorder)