code: def add_fields(self, arrays, names=None, assubarray=False):
          
          newself = add_fields(self, arrays, names=names, assubarray=assubarray)
          self.__copy_attributes__(newself)
          return newself
docs: Adds the given arrays as new fields to self.  Returns a new instance
          with the new fields added. Note: this array does not change; the
          returned array is a new copy.
  
          Parameters
          ----------
          arrays : (list of) numpy array(s)
              The arrays to add. If adding multiple arrays, must be a list;
              if adding a single array, can just be that array.
          names : (list of) strings
              Optional, the name(s) of the new fields in the output array. If
              adding multiple fields, must be a list of strings with the same
              length as the list of arrays. If None provided, names used will
              be the same as the name of the datatype in the given arrays.
              If the datatype has no name, the new field will be ``'fi'`` where
              i is the index of the array in arrays.
          assubarray : bool
              Add the list of arrays as a single subarray field. If True, and
              names provided, names should be a string or a length-1 sequence.
              Default is False, in which case each array will be added as a
              separate field.
  
          Returns
          -------
          new_array : new instance of this array
              A copy of this array with the desired fields added.