code: def fromrecords(
      recList,
      dtype=None,
      shape=None,
      formats=None,
      names=None,
      titles=None,
      aligned=False,
      byteorder=None,
  ):
      """create a recarray from a list of records in text form
  
          The data in the same field can be heterogeneous, they will be promoted
          to the highest data type.  This method is intended for creating
          smaller record arrays.  If used to create large array without formats
          defined
  
          r=fromrecords([(2,3.,'abc')]*100000)
  
          it can be slow.
  
          If formats is None, then this will auto-detect formats. Use list of
          tuples rather than list of lists for faster processing.
  
      >>> r=np.core.records.fromrecords([(456,'dbe',1.2),(2,'de',1.3)],
      ... names='col1,col2,col3')
      >>> print(r[0])
      (456, 'dbe', 1.2)
      >>> r.col1
      array([456,   2])
      >>> r.col2
      array(['dbe', 'de'],
            dtype='|S3')
      >>> import pickle
      >>> print(pickle.loads(pickle.dumps(r)))
      [(456, 'dbe', 1.2) (2, 'de', 1.3)]
      """
  
      if formats is None and dtype is None:  # slower
          obj = sb.array(recList, dtype=object)
          arrlist = [
              sb.array(obj[..., i].tolist())
              for i in range(obj.shape[-1])
          ]
          return fromarrays(
              arrlist,
              formats=formats,
              shape=shape,
              names=names,
              titles=titles,
              aligned=aligned,
              byteorder=byteorder,
          )
  
      if dtype is not None:
          descr = sb.dtype((record, dtype))
      else:
          descr = format_parser(
              formats, names, titles, aligned, byteorder
          )._descr
  
      try:
          retval = sb.array(recList, dtype=descr)
      except (TypeError, ValueError):
          if shape is None or shape == 0:
              shape = len(recList)
          if isinstance(shape, (int, long)):
              shape = (shape,)
          if len(shape) > 1:
              raise ValueError("Can only deal with 1-d array.")
          _array = recarray(shape, descr)
          for k in range(_array.size):
              _array[k] = tuple(recList[k])
          # list of lists instead of list of tuples ?
          # 2018-02-07, 1.14.1
          warnings.warn(
              "fromrecords expected a list of tuples, may have received a list "
              "of lists instead. In the future that will raise an error",
              FutureWarning,
              stacklevel=2,
          )
          return _array
      else:
          if shape is not None and retval.shape != shape:
              retval.shape = shape
  
      res = retval.view(recarray)
  
      return res
  
imports: from __future__ import division, absolute_import, print_function
  import sys
  import os
  import warnings
  from .None import numeric
  from .None import numerictypes
  from numpy.compat import isfileobj, bytes, long, unicode, os_fspath
  from numpy.core.overrides import set_module
  from .arrayprint import get_printoptions
label_desc: Use image node_id 3 for calling a global function with example usage: fromrecords(recList, dtype, shape, formats, names, titles, aligned, byteorder) and returns: res, fromarrays, _array