
.. _libdoc_compile_shared:

===========================================
:mod:`shared` - defines theano.shared
===========================================

.. module:: shared
   :platform: Unix, Windows
   :synopsis: defines theano.shared and related classes
.. moduleauthor:: LISA


.. class:: SharedVariable

    Variable with Storage that is shared between functions that it appears in.
    These variables are meant to be created by registered *shared constructors*
    (see :func:`shared_constructor`).

    The user-friendly constructor is :func:`shared`

    .. attribute:: value

        Read/write access to the [non-symbolic] value/data associated with this SharedVariable.
        
        Changes to this value will be visible to all functions using this SharedVariable.  

    .. method:: __init__(self, name, type, value, strict, container=None)

        :param name: The name for this variable.
        :type name: None or str

        :param type: The :term:`Type` for this Variable.

        :param value: A value to associate with this variable (a new container will be created).

        :param strict: True -> assignments to ``self.value`` will not be casted
          or copied, so they must have the correct type or an exception will be
          raised.

        :param container: The container to use for this variable.   This should
           instead of the `value` parameter.  Using both is an error.

    .. attribute:: container

        A container to use for this SharedVariable when it is an implicit function parameter.

        :type: class:`Container`

.. autofunction:: theano.compile.sharedvalue.shared

.. function:: shared_constructor(ctor)

    Append `ctor` to the list of shared constructors (see :func:`shared`).

    Each registered constructor ``ctor`` will be called like this:

    .. testcode::

        ctor(value, name=name, strict=strict, **kwargs)

    If it do not support given value, it must raise a TypeError.
