docs: def convert_numpy_str_to_uint16(data):
      """ Converts a numpy.unicode\_ to UTF-16 in numpy.uint16 form.
  
      Convert a ``numpy.unicode_`` or an array of them (they are UTF-32
      strings) to UTF-16 in the equivalent array of ``numpy.uint16``. The
      conversion will throw an exception if any characters cannot be
      converted to UTF-16. Strings are expanded along rows (across columns)
      so a 2x3x4 array of 10 element strings will get turned into a 2x30x4
      array of uint16's if every UTF-32 character converts easily to a
      UTF-16 singlet, as opposed to a UTF-16 doublet.
  
      Parameters
      ----------
      data : numpy.unicode\_ or numpy.ndarray of numpy.unicode\_
          The string or array of them to convert.
  
      Returns
      -------
      array : numpy.ndarray of numpy.uint16
          The result of the conversion.
  
      Raises
      ------
      UnicodeEncodeError
          If a UTF-32 character has no UTF-16 representation.
  
      See Also
      --------
      convert_numpy_str_to_uint32
      convert_to_numpy_str
  
      """
      # An empty string should be an empty uint16
      if data.nbytes == 0:
          return np.uint16([])
  
      # We need to use the UTF-16 codec for our endianness. Using the
      # right one means we don't have to worry about removing the BOM.
      if sys.byteorder == 'little':
          codec = 'UTF-16LE'
      else:
          codec = 'UTF-16BE'
  
      # numpy.char.encode can do the conversion element wise. Then, we
      # just have convert to uin16 with the appropriate dimensions. The
      # dimensions are gotten from the shape of the converted data with
      # the number of column increased by the number of words (pair of
      # bytes) in the strings.
      cdata = np.char.encode(np.atleast_1d(data), codec)
      shape = list(cdata.shape)
      shape[-1] *= (cdata.dtype.itemsize // 2)
      return np.ndarray(shape=shape, dtype='uint16',
                        buffer=cdata.tostring())