
/I]c           @   s  d  Z  d d l m Z y d d l m Z Wn! e k
 rM d d l m Z n Xd d l m Z d d l	 m
 Z
 d d l m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z d d l m Z m Z d d l m Z d d	 l m Z m  Z! d d
 l" m# Z# d d l$ m% Z% m& Z& e% j' d  d Z( d   Z) d   Z* i e* d 6e) d 6Z+ e rse, e- e. f Z/ n e, e- f Z/ d   Z0 d   Z1 d   Z2 d   Z3 d e f d     YZ4 d e4 f d     YZ5 d   Z6 d e7 f d     YZ8 d d  Z9 d  e4 f d!     YZ: d" S(#   sq   Base Widget class.  Allows user to create widgets in the back-end that render
in the IPython notebook front-end.
i(   t   contextmanager(   t   Iterable(   t   get_ipython(   t   Comm(   t	   HasTraitst   Unicodet   Dictt   Instancet   Listt   Intt   Sett   Bytest   observet   defaultt	   Containert	   Undefined(   t   string_typest   PY3(   t   display(   t   loadst   dumps(   t   standard_b64encodei   (   t   __protocol_version__t    __jupyter_widgets_base_version__t   .i    c            s   t  |  t  r)   f d   |  j   D St  |  t t f  r^ g  |  D] } t |    ^ qE St  |  t  rx d |  j S|  Sd  S(   Nc            s(   i  |  ] \ } } t  |    |  q S(    (   t   _widget_to_json(   t   .0t   kt   v(   t   obj(    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pys
   <dictcomp>!   s   	 t
   IPY_MODEL_(   t
   isinstancet   dictt   itemst   listt   tupleR   t   Widgett   model_id(   t   xR   R   (    (   R   s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR      s     c            s   t  |  t  r)   f d   |  j   D St  |  t t f  r^ g  |  D] } t |    ^ qE St  |  t  r |  j d  r |  d t j	 k r t j	 |  d S|  Sd  S(   Nc            s(   i  |  ] \ } } t  |    |  q S(    (   t   _json_to_widget(   R   R   R   (   R   (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pys
   <dictcomp>+   s   	 R   i
   (
   R   R    R!   R"   R#   R'   R   t
   startswithR$   t   widgets(   R&   R   R   (    (   R   s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR'   )   s     1t	   from_jsont   to_jsonc         C   sW   xP t  | |  D]? \ } } |  } x | d  D] } | | } q- W| | | d <q Wd S(   s   The inverse of _remove_buffers, except here we modify the existing dict/lists.
    Modifying should be fine, since this is used when state comes from the wire.
    iN(   t   zip(   t   statet   buffer_pathst   bufferst   buffer_patht   bufferR   t   key(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _put_buffers=   s
    c   	      C   s  t  |  t t f  r t } xt |   D] \ } } t  | t  r | s^ t |   }  t } n  d |  | <| j |  | j | | g  q( t  | t	 t t f  r( t
 | | | g | |  } | | k	 r | s t |   }  t } n  | |  | <q q( q( Wnt  |  t	  rt } x |  j   D] \ } } t  | t  r| sVt	 |   }  t } n  |  | =| j |  | j | | g  q t  | t	 t t f  r t
 | | | g | |  } | | k	 r| st	 |   }  t } n  | |  | <qq q Wn t d |    |  S(   s!   For internal, see _remove_bufferss+   expected state to be a list or dict, not %rN(   R   R"   R#   t   Falset	   enumeratet   _binary_typest   Truet   Nonet   appendR    t   _separate_buffersR!   t
   ValueError(	   t   substatet   pathR.   R/   t	   is_clonedt   iR   t   vnewR   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR:   I   sH    	
			c         C   s/   g  g  } } t  |  g  | |  }  |  | | f S(   s  Return (state_without_buffers, buffer_paths, buffers) for binary message parts

    A binary message part is a memoryview, bytearray, or python 3 bytes object.

    As an example:
    >>> state = {'plain': [0, 'text'], 'x': {'ar': memoryview(ar1)}, 'y': {'shape': (10,10), 'data': memoryview(ar2)}}
    >>> _remove_buffers(state)
    ({'plain': [0, 'text']}, {'x': {}, 'y': {'shape': (10, 10)}}, [['x', 'ar'], ['y', 'data']],
     [<memory at 0x107ffec48>, <memory at 0x107ffed08>])
    (   R:   (   R-   R.   R/   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _remove_buffersv   s    c         C   s   t  |   t  |  k r t S|  | k r, t Sx t |  |  D] \ } } t r t |  j d  t |  j d  k r t Sq< t | t  r | j d k r | j	   } n  t | t  r | j d k r | j	   } n  | | k r< t Sq< Wt S(   s   Compare two lists of buffers for equality.

    Used to decide whether two sequences of buffers (memoryviews,
    bytearrays, or python 3 bytes) differ, such that a sync is needed.

    Returns True if equal, False if unequal
    t   B(
   t   lenR4   R7   R,   R   t
   memoryviewt   castR   t   formatt   tobytes(   t   at   bt   iat   ib(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _buffer_list_equal   s    *t   LoggingHasTraitsc           B   s/   e  Z d  Z e d  Z e d  d    Z RS(   s   A parent class for HasTraits that log.
    Subclasses have a log trait, and the default behavior
    is to get the logger from the currently running Application.
    s   logging.Loggert   logc         C   s   d d l  m } | j   S(   Ni(   RN   (   t	   traitletsRN   t
   get_logger(   t   selfRN   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _log_default   s    (   t   __name__t
   __module__t   __doc__R   RN   R   RR   (    (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyRM      s   t   CallbackDispatcherc           B   s,   e  Z d  Z e   Z d   Z e d  Z RS(   s1   A structure for registering and running callbacksc         O   s   d } x |  j D] } y | | |   } WnQ t k
 r| } t   } | d k ro |  j j d | | d t q | j   q X| d k	 r | n | } q W| S(   s%   Call all of the registered callbacks.s   Exception in callback %s: %st   exc_infoN(   R8   t	   callbackst	   ExceptionR   RN   t   warningR7   t   showtraceback(   RQ   t   argst   kwargst   valuet   callbackt   local_valuet   et   ip(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   __call__   s    	c         C   sU   | r( | |  j  k r( |  j  j |  n) | rQ | |  j  k rQ |  j  j |  n  d S(   s   (Un)Register a callback

        Parameters
        ----------
        callback: method handle
            Method to be registered or unregistered.
        remove=False: bool
            Whether to unregister the callback.N(   RX   t   removeR9   (   RQ   R_   Rd   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   register_callback   s    (   RS   RT   RU   R   RX   Rc   R4   Re   (    (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyRV      s   		c            s     f d   } | S(   s+   decorator for showing tracebacks in IPythonc            sl   y   |  | |  SWnQ t  k
 rg } t   } | d  k rZ |  j j d   | d t qh | j   n Xd  S(   Ns!   Exception in widget method %s: %sRW   (   RY   R   R8   RN   RZ   R7   R[   (   RQ   R\   R]   Ra   Rb   (   t   method(    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   m   s    	(    (   Rf   Rg   (    (   Rf   s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _show_traceback   s    	t   WidgetRegistryc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   i  |  _  d  S(   N(   t	   _registry(   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   __init__   s    c   
      C   sk   |  j  j | i   } | j | i   } | j | i   } | j | i   } | j | i   }	 | |	 | <d S(   s   Register a valueN(   Rj   t
   setdefault(
   RQ   t   model_modulet   model_module_version_ranget
   model_namet   view_modulet   view_module_version_ranget	   view_namet   klasst   model_versiont   view_version(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   register   s    c         C   s[   |  j  | } t | j    d } | | }	 |	 | }
 t |
 j    d } | | } | S(   s   Get a valuei    (   Rj   R"   t   values(   RQ   Rm   t   model_module_versionRo   Rp   t   view_module_versionRr   t   module_versionst   model_namest   view_modulest   view_versionst
   view_namest   widget_class(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   get   s    


c         c   s   x t  |  j j    D] \ } } x t  | j    D] \ } } x t  | j    D] \ } } x t  | j    D]o \ } } x` t  | j    D]L \ }	 }
 x= t  |
 j    D]) \ } } | | | | |	 | f | f Vq Wq Wqs WqT Wq5 Wq Wd  S(   N(   t   sortedRj   R!   (   RQ   Rm   t   mmRt   t   mvRo   t   vmRp   t   vvRu   t   vnRr   t   widget(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR!     s    "(   RS   RT   Rk   Rv   R   R!   (    (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyRi      s   				t    c         C   sF   d   } t  |  t  r8 d d l } | j d t  | S| |   Sd S(   s?   For backwards compatibility, we support @register(name) syntax.c         S   s\   |  j    } t j j | d j | d j | d j | d j | d j | d j |   |  S(   s>   A decorator registering a widget class in the widget registry.t   _model_modulet   _model_module_versiont   _model_namet   _view_modulet   _view_module_versiont
   _view_name(   t   class_traitsR$   t   widget_typesRv   t   default_value(   R   t   w(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   reg  s    




iNsx   Widget registration using a string name has been deprecated. Widget registration now uses a plain `@register` decorator.(   R   R   t   warningst   warnt   DeprecationWarning(   t   nameR   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyRv     s    	R$   c           B   s/  e  Z d7 Z i  Z e   Z e d     Z e	 d    Z
 e	 d    Z e	 d    Z e	 e d7 d   Z e d  Z d   Z e d d d	 d
 e j d e  Z e d d d d
 e j d e  Z e e d d d
 e j d e  Z e d7 d e d d j d e  Z e d7 d e d d j d e  Z e d d d j d e  Z e d7 d e d d j d e  Z e d d e Z e d d  Z  e! d  d    Z" e#   Z$ e Z% e&   Z' e e( d8  Z) e e( d9  Z* d   Z+ d   Z, d   Z- e. d  d    Z/ e0 d    Z1 d   Z2 d7 d   Z3 d7 e d!  Z4 d"   Z5 d#   Z6 d$   Z7 d7 d%  Z8 e d&  Z9 e d'  Z: d(   Z; d)   Z< d*   Z= e> d+    Z? e> d,    Z@ d-   ZA eB d.    ZC d/   ZD d0   ZE e	 d1    ZF e	 d2    ZG d3   ZH d7 d4  ZI d5   ZJ d6   ZK RS(:   c         C   s.   x' t  |  j j    D] } | j   q Wd  S(   N(   R"   R)   Rw   t   close(   t   clsR   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt	   close_all,  s    c         C   s   |  t  _ d S(   s   Registers a callback to be called when a widget is constructed.

        The callback must have the following signature:
        callback(widget)N(   R$   t   _widget_construction_callback(   R_   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   on_widget_constructed2  s    c         C   s2   t  j d k	 r. t t  j  r. t  j |   n  d S(   s3   Static method, called when a widget is constructed.N(   R$   R   R8   t   callable(   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _call_widget_constructed:  s    c         C   s   | j  d i   j  d d  } | j d  d t k rP t d | t f   n  | d d } | d	 } t j j  | d
 | d | d | d | d | d  } | d |   } d | k r t | | d | d  n  | j |  d S(   s3   Static method, called when a widget is constructed.t   metadatat   versionR   R   i    sO   Incompatible widget protocol versions: received version %r, expected version %rt   contentt   dataR-   R   R   R   R   R   R   t   commR.   R/   N(	   R   t   splitt   PROTOCOL_VERSION_MAJORR;   R   R$   R   R3   t	   set_state(   R   t   msgR   R   R-   R   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   handle_comm_opened@  s    
c         C   sg   i  } | d k r$ t j j   } n  x' | D] } | j d |   | | j <q+ Wi d d 6d d 6| d 6S(   s   Returns the full state for a widget manager for embedding

        :param drop_defaults: when True, it will not include default value
        :param widgets: list with widgets to include in the state (or all widgets when None)
        :return:
        t   drop_defaultsi   t   version_majori    t   version_minorR-   N(   R8   R$   R)   Rw   t   _get_embed_stateR%   (   R   R)   R-   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   get_manager_stateU  s    c         C   s   i |  j  d 6|  j d 6|  j d 6} t |  j d |   \ } } } | | d <t |  d k r g  t | |  D]6 \ } } i d d 6| d	 6t |  j d
  d 6^ qq | d <n  | S(   NRo   Rm   Rx   R   R-   i    t   base64t   encodingR=   t   asciiR   R/   (	   R   R   R   RA   t	   get_stateRC   R,   R   t   decode(   RQ   R   R-   t   model_stateR.   R/   t   pt   d(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR   d  s    

!
Pc         C   s   t  d d d d d |  j  S(   NR   i   R   i    R%   (   R    t	   _model_id(   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   get_view_specs  s    t   WidgetModelt   helps   Name of the model.t	   read_onlyt   syncs   @jupyter-widgets/bases   The namespace for the model.s@   A semver requirement for namespace version containing the model.t
   allow_nones   Name of the view.s   The namespace for the view.R   sC   A semver requirement for the namespace version containing the view.s   EXPERIMENTAL: The number of views of the model displayed in the frontend. This attribute is experimental and may change or be removed in the future. None signifies that views will not be tracked. Set this to 0 to start tracking view creation/deletion.s   ipykernel.comm.Comms   The traits which are synced.t   keysc         C   s#   g  |  j  d t  D] } | ^ q S(   NR   (   t   traitsR7   (   RQ   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _default_keys  s    c         K   sF   | j  d d  |  _ t t |   j |   t j |   |  j   d S(   s   Public constructorR%   N(   t   popR8   R   t   superR$   Rk   R   t   open(   RQ   R]   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyRk     s    c         C   s   |  j    d S(   s   Object disposalN(   R   (   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   __del__  s    c         C   s   |  j  d
 k r t |  j    \ } } } t d d d i | d 6| d 6d | d i t d 6 } |  j d
 k	 r |  j | d	 <n  t |   |  _  n  d
 S(   s6   Open a comm to the frontend if one isn't already open.t   target_names   jupyter.widgetR   R-   R.   R/   R   R   t   comm_idN(   R   R8   RA   R   R    R   R   R   (   RQ   R-   R.   R/   R\   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    R   c         C   sG   | d d k r d S|  j |  _ |  j j |  j  |  t j |  j <d S(   s    Called when the comm is changed.t   newN(   R8   R%   R   R   t   on_msgt   _handle_msgR$   R)   (   RQ   t   change(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _comm_changed  s
    c         C   s
   |  j  j S(   sm   Gets the model id of this widget.

        If a Comm doesn't exist yet, a Comm will be created automagically.(   R   R   (   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR%     s    c         C   sK   |  j  d k	 rG t j j |  j d  |  j  j   d |  _  d |  _ n  d S(   s   Close method.

        Closes the underlying comm.
        When the comm is closed, all of the widget views are automatically
        removed from the front-end.N(   R   R8   R$   R)   R   R%   R   t   _ipython_display_(   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s
    	c         C   s   |  j  d |  } t |  d k r |  j rl x< | j   D]+ \ } } | |  j k r: | |  j | <q: q: Wn  t |  \ } } } i d d 6| d 6| d 6} |  j | d | n  d S(	   s  Sends the widget state, or a piece of it, to the front-end, if it exists.

        Parameters
        ----------
        key : unicode, or iterable (optional)
            A single property's name or iterable of property names to sync with the front-end.
        R2   i    t   updateRf   R-   R.   R/   N(   R   RC   t   _property_lockR!   RA   t   _send(   RQ   R2   R-   R   R^   R.   R/   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt
   send_state  s    	c   	      C   s  | d k r |  j } n? t | t  r3 | g } n$ t | t  rK | } n t d   i  } |  j   } x | D] } |  j | d |  j  } | t	 |  |  |   } t
 r t | | t  r t | t  r t |  } n  | s |  j | | | j  rp | | | <qp qp W| S(   s]  Gets the widget state, or a piece of it.

        Parameters
        ----------
        key : unicode or iterable (optional)
            A single property's name or iterable of property names to get.

        Returns
        -------
        state : dict of states
        metadata : dict
            metadata for each field: {key: metadata}
        s2   key must be a string, an iterable of keys, or NoneR+   N(   R8   R   R   R   R   R;   R   t   trait_metadatat   _trait_to_jsont   getattrR   R   t   bytesRD   t   _compareR   (	   RQ   R2   R   R   R-   R   R   R+   R^   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s"    	)!c         C   s"   | j  j d k o! | j  j d k S(   Nt   ndarrayt   numpy(   t	   __class__RS   RT   (   RQ   R&   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt	   _is_numpy  s    c         C   sH   |  j  |  s |  j  |  r: d d  l } | j | |  S| | k Sd  S(   Ni(   R   R   t   array_equal(   RQ   RH   RI   t   np(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    c         C   s   |  j  |   p |  j   ] xU | D]M } | |  j k r$ |  j | d |  j  } |  j | | | | |    q$ q$ WWd QXWd QXd S(   s3   Called when a state is received from the front-end.R*   N(   t   _lock_propertyt   hold_trait_notificationsR   R   t   _trait_from_jsont	   set_trait(   RQ   t	   sync_dataR   R*   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s     c         C   s%   |  j  i d d 6| d 6d | d S(   s  Sends a custom msg to the widget model in the front-end.

        Parameters
        ----------
        content : dict
            Content of the message to send.
        buffers : list of binary buffers
            Binary buffers to send with message
        t   customRf   R   R/   N(   R   (   RQ   R   R/   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   send#  s    
c         C   s   |  j  j | d | d S(   s=  (Un)Register a custom msg receive callback.

        Parameters
        ----------
        callback: callable
            callback will be passed three arguments when a message arrives::

                callback(widget, content, buffers)

        remove: bool
            True if the callback should be unregistered.Rd   N(   t   _msg_callbacksRe   (   RQ   R_   Rd   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR   /  s    c         C   s   |  j  j | d | d S(   s\  (Un)Register a widget displayed callback.

        Parameters
        ----------
        callback: method handler
            Must have a signature of::

                callback(widget, **kwargs)

            kwargs from display are passed through without modification.
        remove: bool
            True if the callback should be unregistered.Rd   N(   t   _display_callbacksRe   (   RQ   R_   Rd   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   on_displayed=  s    c         K   sf   t  t |   j |   xI | j   D]; \ } } | j d  r# |  j j |  |  j |  q# q# Wd S(   s/   Dynamically add trait attributes to the Widget.R   N(   R   R$   t
   add_traitsR!   t   get_metadataR   R9   R   (   RQ   R   R   t   trait(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR   L  s
    c         C   s   | d } |  j  d k	 rk |  j  j d k	 rk | |  j k rk |  j | t |  |   rk |  j d |  qk n  t t |   j	 |  d S(   s#   Called when a property has changed.R   R2   N(
   R   R8   t   kernelR   t   _should_send_propertyR   R   R   R$   t   notify_change(   RQ   R   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR   T  s
    
!*c         C   s   |  j  |  j    S(   N(   t   _gen_repr_from_keyst
   _repr_keys(   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   __repr__`  s    c         k   s#   | |  _  z	 d VWd i  |  _  Xd S(   s  Lock a property-value pair.

        The value should be the JSON state of the property.

        NOTE: This, in addition to the single lock for all state changes, is
        flawed.  In the future we may want to look into buffering state changes
        back to the front-end.N(   R   (   RQ   t
   properties(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR   g  s    			c         c   sW   |  j  t k r d Vn< z t |  _  d VWd t |  _  |  j |  j  |  j j   Xd S(   s@   Hold syncing any state until the outermost context manager exitsN(   t   _holding_syncR7   R4   R   t   _states_to_sendt   clear(   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt	   hold_syncv  s    			c         C   s   |  j  | d |  j  } | |  j k r t i | | |   | 6 } t i |  j | | 6 } t t | d   | d k r | d | d k r t | d | d  r t Sn  |  j r |  j	 j
 |  t St Sd S(   s'   Check the property lock (property_lock)R+   i    i   i   N(   R   R   R   RA   t	   jsonloadst	   jsondumpsRL   R4   R   R   t   addR7   (   RQ   R2   R^   R+   t   split_valuet
   split_lock(    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s     	c         C   s   | d d } | d } | d k rt d | k r | d } d | k ra t  | | d | d  n  |  j |  q nc | d k r |  j   nJ | d	 k r d | k r |  j | d | d  q n |  j j d
 |  d S(   s0   Called when a msg is received from the front-endR   R   Rf   R   R-   R.   R/   t   request_stateR   s9   Unknown front-end to back-end widget msg with method "%s"N(   R3   R   R   t   _handle_custom_msgRN   t   error(   RQ   R   R   Rf   R-   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    

c         C   s   |  j  |  | |  d S(   s%   Called when a custom msg is received.N(   R   (   RQ   R   R/   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    c         K   s   |  j  |  |  d S(   s>   Called when a view has been displayed for this widget instanceN(   R   (   RQ   R]   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   _handle_displayed  s    c         C   s   |  S(   s   Convert a trait value to json.(    (   R&   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    c         C   s   |  S(   s   Convert json values to objects.(    (   R&   RQ   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    c         K   s   t  |   } t |  d k r/ | d  d } n  i | d 6} |  j d k	 rp i d d 6d d 6|  j d 6| d	 <n  t | d
 t |  j d k	 r |  j |   n  d S(   s>   Called when `IPython.display.display` is called on the widget.in   s   …s
   text/plaini   R   i    R   R%   s(   application/vnd.jupyter.widget-view+jsont   rawN(   t   reprRC   R   R8   R   R   R7   R   (   RQ   R]   t	   plaintextR   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    
c         C   sA   |  j  d k	 r= |  j  j d k	 r= |  j  j d | d |  n  d S(   s.   Sends a message to the model in the front-end.R   R/   N(   R   R8   R   R   (   RQ   R   R/   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    !c         c   s   |  j    } x t |  j  D] } | d d k r8 q n  t |  |  } | | } |  j | | j  rl q nH t | t t f  r | j t	 k r | d  k s t |  d k r q n  | Vq Wd  S(   Ni    t   _(   R   R   R   R   R   R   R   R   R   R   R8   RC   (   RQ   R   R2   R^   R   (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s    
c            s9     j  j } d j   f d   | D  } d | | f S(   Ns   , c         3   s(   |  ] } d  | t    |  f Vq d S(   s   %s=%rN(   R   (   R   R2   (   RQ   (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pys	   <genexpr>  s   s   %s(%s)(   R   RS   t   join(   RQ   R   t
   class_namet	   signature(    (   RQ   s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR     s
    N(    (    (L   RS   RT   R8   R   R)   Ri   R   t   classmethodR   t   staticmethodR   R   R   R4   R   R   R   R   R7   t   tagR   R   R   R   R   R   R   R	   t   _view_countR   R   R   R   R   R   R   R   R   R
   R   RV   R   R   Rk   R   R   R   R   t   propertyR%   R   R   R   R   R   R   R   R   R   R   R   R   R    R   R   R   Rh   R   R   R   R   R   R   R   R   R   (    (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyR$      s|   											
	!											N(;   RU   t
   contextlibR    t   collections.abcR   t   ImportErrort   collectionst   IPython.core.getipythonR   t   ipykernel.commR   RO   R   R   R   R   R   R	   R
   R   R   R   R   R   t   ipython_genutils.py3compatR   R   t   IPython.displayR   t   jsonR   R   R   R   R   R   t   _versionR   R   R   R   R   R'   t   widget_serializationRD   t	   bytearrayR   R6   R3   R:   RA   RL   RM   RV   Rh   t   objectRi   Rv   R$   (    (    (    s8   lib/python2.7/site-packages/ipywidgets/widgets/widget.pyt   <module>   s@   R	
	

		-		 $	(