docs: def qlist(array, adjust_dtype = True, **meta):
      '''Converts an input array to q vector and enriches object instance with 
      meta data.
  
      Returns a :class:`.QList` instance for non-datetime vectors. For datetime 
      vectors :class:`.QTemporalList` is returned instead.
  
      If parameter `adjust_dtype` is `True` and q type retrieved via 
      :func:`.get_list_qtype` doesn't match one provided as a `qtype` parameter 
      guessed q type, underlying numpy.array is converted to correct data type.
      
      `qPython` internally represents ``(0x01;0x02;0xff)`` q list as:
      ``<class 'qpython.qcollection.QList'> dtype: int8 qtype: -4: [ 1  2 -1]``.
      This object can be created by calling the :func:`.qlist` with following 
      arguments:
      
      - `byte numpy.array`:
         
         >>> v = qlist(numpy.array([0x01, 0x02, 0xff], dtype=numpy.byte))
         >>> print('%s dtype: %s qtype: %d: %s' % (type(v), v.dtype, v.meta.qtype, v))
         <class 'qpython.qcollection.QList'> dtype: int8 qtype: -4: [ 1  2 -1]
      
      - `int32 numpy.array` with explicit conversion to `QBYTE_LIST`:   
        
         >>> v = qlist(numpy.array([1, 2, -1]), qtype = QBYTE_LIST)
         >>> print('%s dtype: %s qtype: %d: %s' % (type(v), v.dtype, v.meta.qtype, v))
         <class 'qpython.qcollection.QList'> dtype: int8 qtype: -4: [ 1  2 -1]
      
      - plain Python `integer` list with explicit conversion to `QBYTE_LIST`:   
         
         >>> v = qlist([1, 2, -1], qtype = QBYTE_LIST)
         >>> print('%s dtype: %s qtype: %d: %s' % (type(v), v.dtype, v.meta.qtype, v))
         <class 'qpython.qcollection.QList'> dtype: int8 qtype: -4: [ 1  2 -1]
  
      - numpy datetime64 array with implicit conversion to `QDATE_LIST`:   
         
         >>> v = qlist(numpy.array([numpy.datetime64('2001-01-01'), numpy.datetime64('2000-05-01'), numpy.datetime64('NaT')], dtype='datetime64[D]'))
         >>> print('%s dtype: %s qtype: %d: %s' % (type(v), v.dtype, v.meta.qtype, v))
         <class 'qpython.qcollection.QList'> dtype: datetime64[D] qtype: -14: ['2001-01-01' '2000-05-01' 'NaT']
         
      - numpy datetime64 array with explicit conversion to `QDATE_LIST`:   
         
         >>> v = qlist(numpy.array([numpy.datetime64('2001-01-01'), numpy.datetime64('2000-05-01'), numpy.datetime64('NaT')], dtype='datetime64[D]'), qtype = QDATE_LIST)
         >>> print('%s dtype: %s qtype: %d: %s' % (type(v), v.dtype, v.meta.qtype, v))
         <class 'qpython.qcollection.QList'> dtype: datetime64[D] qtype: -14: ['2001-01-01' '2000-05-01' 'NaT']
  
      
      :Parameters:
       - `array` (`tuple`, `list`, `numpy.array`) - input array to be converted
       - `adjust_dtype` (`boolean`) - determine whether data type of vector should
         be adjusted if it doesn't match default representation. **Default**: ``True``
         
       .. note:: numpy `datetime64` and `timedelta64` arrays are not converted
                 to raw temporal vectors if `adjust_dtype` is ``True``
      
      :Kwargs:
       - `qtype` (`integer` or `None`) - qtype indicator
       
      :returns: `QList` or `QTemporalList` - array representation of the list
      
      :raises: `ValueError` 
      '''
      if type(array) in (list, tuple):
          if meta and 'qtype' in meta and meta['qtype'] == QGENERAL_LIST:
              # force shape and dtype for generic lists
              tarray = numpy.ndarray(shape = len(array), dtype = numpy.dtype('O'))
              for i in range(len(array)):
                  tarray[i] = array[i]
              array = tarray
          else:
              array = numpy.array(array)
  
      if not isinstance(array, numpy.ndarray):
          raise ValueError('array parameter is expected to be of type: numpy.ndarray, list or tuple. Was: %s' % type(array))
  
      qtype = None
      is_numpy_temporal = array.dtype.type in (numpy.datetime64, numpy.timedelta64)
  
      if meta and 'qtype' in meta:
          qtype = -abs(meta['qtype'])
          dtype = PY_TYPE[qtype]
          if adjust_dtype and dtype != array.dtype and not is_numpy_temporal:
              array = array.astype(dtype = dtype)
  
      qtype = get_list_qtype(array) if qtype is None else qtype
      meta['qtype'] = qtype
  
      is_raw_temporal = meta['qtype'] in [QMONTH, QDATE, QDATETIME, QMINUTE, QSECOND, QTIME, QTIMESTAMP, QTIMESPAN] \
                        and not is_numpy_temporal
      vector = array.view(QList) if not is_raw_temporal else array.view(QTemporalList)
      vector._meta_init(**meta)
      return vector