'Construct an ARRAY.
E.g.::
Column(\'myarray\', ARRAY(Integer))
Arguments are:
:param item_type: The data type of items of this array. Note that
dimensionality is irrelevant here, so multi-dimensional arrays like
``INTEGER[][]``, are constructed as ``ARRAY(Integer)``, not as
``ARRAY(ARRAY(Integer))`` or such.
:param as_tuple=False: Specify whether return results
should be converted to tuples from lists. DBAPIs such
as psycopg2 return lists by default. When tuples are
returned, the results are hashable.
:param dimensions: if non-None, the ARRAY will assume a fixed
number of dimensions.  This will cause the DDL emitted for this
ARRAY to include the exact number of bracket clauses ``[]``,
and will also optimize the performance of the type overall.
Note that PG arrays are always implicitly "non-dimensioned",
meaning they can store any number of dimensions no matter how
they were declared.'

def __init__(self, item_type, as_tuple=False, dimensions=None):

    if isinstance(item_type, ARRAY):
        raise ValueError('Do    not    nest    ARRAY    types;    ARRAY(basetype)    handles    multi-dimensional    arrays    of    basetype')
    if isinstance(item_type, type):
        item_type = item_type()
    self.item_type = item_type
    self.as_tuple = as_tuple
    self.dimensions = dimensions
