.. _libdoc_typed_list:

===============================
:mod:`typed_list` -- Typed List
===============================

.. note::

    This has been added in release 0.7.

.. note::

    This works, but is not well integrated with the rest of Theano. If
    speed is important, it is probably better to pad to a dense
    tensor.

This is a type that represents a list in Theano. All elements must have
the same Theano type. Here is an example::

    import theano.typed_list

    tl = theano.typed_list.TypedListType(theano.tensor.fvector)()
    v = theano.tensor.fvector()
    o = theano.typed_list.append(tl, v)
    f = theano.function([tl, v], o)
    print f([[1, 2, 3], [4, 5]], [2])
    #[array([ 1.,  2.,  3.], dtype=float32), array([ 4.,  5.], dtype=float32), array([ 2.], dtype=float32)]

A second example with Scan. Scan doesn't yet have direct support of
TypedList, so you can only use it as non_sequences (not in sequences or
as outputs)::

    import theano.typed_list

    a = theano.typed_list.TypedListType(theano.tensor.fvector)()
    l = theano.typed_list.length(a)
    s, _ = theano.scan(fn=lambda i, tl: tl[i].sum(),
                       non_sequences=[a],
                       sequences=[theano.tensor.arange(l, dtype='int64')])

    f = theano.function([a], s)
    f([[1, 2, 3], [4, 5]])
    #array([ 6.,  9.], dtype=float32)

.. automodule:: theano.typed_list.basic
    :members:
