Ë
    :vžj9‰  ã                   óR  — U d Z ddlZddlZddlZddlmZ d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mZ ddlmZmZ dd	lmZ dd
lm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(Z( e(jR                  e«      Z*d„ Z+ e%jX                  d«      d   Z- e&jX                  d«      d   Z. e+dd¬«      Z/i Z0ejb                  e2df   e3d<   d„ Z4d„ Z5e5e4dœZ6e7e8e9fZ:d„ Z;d„ Z<d„ Z=d„ Z> G d„ de«      Z? G d„ de?«      Z@d „ ZA G d!„ d"«      ZB eB«       ZCd#„ ZD G d$„ d%eE«      ZF G d&„ de?«      ZGy)'zqBase Widget class.  Allows user to create widgets in the back-end that render
in the Jupyter notebook front-end.
é    N)Úcontextmanager)ÚIterable)Úget_ipython)ÚAnyÚ	HasTraitsÚUnicodeÚDictÚInstanceÚListÚIntÚSetÚBytesÚobserveÚdefaultÚ	ContainerÚ	Undefined)ÚloadsÚdumpsé   ©Úcomm)Ústandard_b64encodeé   )ÚdeprecationÚ
_get_frame)Ú__protocol_version__Ú__control_protocol_version__Ú __jupyter_widgets_base_version__c                 ó‚   — | t         j                  v r#t         j                  |    j                  «       dvS t        |«      S )aB  Return True if the given environment variable is turned on, otherwise False
    If the environment variable is set, True will be returned if it is assigned to a value
    other than 'no', 'n', 'false', 'off', '0', or '0.0' (case insensitive).
    If the environment variable is not set, the default value is returned.
    )ÚnoÚnÚfalseÚoffÚ0z0.0)ÚosÚenvironÚlowerÚbool)Únamer   s     új/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/ipywidgets/widgets/widget.pyÚenvsetr+      s8   € ð Œr�z‰zÑÜ�z‰z˜$Ñ×%Ñ%Ó'Ð/VÐVÐVä�G‹}Ðó    Ú.ÚJUPYTER_WIDGETS_ECHOT©r   ÚWidgetÚ
_instancesc           	      ó6  — t        | t        «      r.| j                  «       D ��ci c]  \  }}|t        ||«      “Œ c}}S t        | t        t
        f«      r| D �cg c]  }t        ||«      ‘Œ c}S t        | t        «      rd| j                  z   S | S c c}}w c c}w )NÚ
IPY_MODEL_)Ú
isinstanceÚdictÚitemsÚ_widget_to_jsonÚlistÚtupler0   Úmodel_id©ÚxÚobjÚkÚvs       r*   r7   r7   0   sˆ   € Ü�!”TÔØ78·w±w´yÔA±y©t¨q°!�”? 1 cÓ*Ñ*°yÒAÐAÜ	�Aœœe�}Ô	%Ù12Ó3±¨A”  3Õ'°Ñ3Ð3Ü	�A”vÔ	Ø˜aŸj™jÑ(Ð(àˆùó Bùâ3s   ¤BÁBc           	      óh  — t        | t        «      r.| j                  «       D ��ci c]  \  }}|t        ||«      “Œ c}}S t        | t        t
        f«      r| D �cg c]  }t        ||«      ‘Œ c}S t        | t        «      r(| j                  d«      r| dd  t        v rt        | dd     S | S c c}}w c c}w )Nr3   é
   )	r4   r5   r6   Ú_json_to_widgetr8   r9   ÚstrÚ
startswithr1   r;   s       r*   rB   rB   :   s¢   € Ü�!”TÔØ78·w±w´yÔA±y©t¨q°!�”? 1 cÓ*Ñ*°yÒAÐAÜ	�Aœœe�}Ô	%Ù12Ó3±¨A”  3Õ'°Ñ3Ð3Ü	�A”sÔ	 §¡¨\Ô :¸qÀÀ¸vÌÑ?SÜ˜!˜B˜C˜&Ñ!Ð!àˆùó Bùâ3s   ¤B)ÁB/)Ú	from_jsonÚto_jsonc                 ó^   — t        ||«      D ]  \  }}| }|dd D ]  }||   }Œ	 |||d   <   Œ  y)z¤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.
    Néÿÿÿÿ)Úzip)ÚstateÚbuffer_pathsÚbuffersÚbuffer_pathÚbufferr=   Úkeys          r*   Ú_put_buffersrP   K   sI   € ô  # <°Ö9Ñˆ�Vð ˆØ˜s Ó#ˆCØ�c‘(‰Cð $à%ˆˆK˜‰OÒñ  :r,   c                 ó  — t        | t        t        f«      r©d}t        | «      D ]—  \  }}t        |t        «      r;|st        | «      } d}d| |<   |j                  |«       |j                  ||gz   «       ŒQt        |t        t        t        f«      sŒmt        |||gz   ||«      }||usŒ„|st        | «      } d}|| |<   Œ™ | S t        | t        «      r¬d}| j                  «       D ]•  \  }}t        |t        «      r9|st        | «      } d}| |= |j                  |«       |j                  ||gz   «       ŒOt        |t        t        t        f«      sŒkt        |||gz   ||«      }||usŒ‚|st        | «      } d}|| |<   Œ— | S t        d| z  «      ‚)z!For internal, see _remove_buffersFTNz+expected state to be a list or dict, not %r)
r4   r8   r9   Ú	enumerateÚ_binary_typesÚappendr5   Ú_separate_buffersr6   Ú
ValueError)	ÚsubstateÚpathrK   rL   Ú	is_clonedÚir?   Úvnewr>   s	            r*   rU   rU   W   sˆ  € ô �(œT¤5˜MÔ*Øˆ	Ü˜hÖ'‰DˆAˆqÜ˜!œ]Ô+Ù Ü# H›~�HØ $�IØ"�˜‘Ø—‘˜qÔ!Ø×#Ñ# D¨A¨3¡JÕ/Ü˜A¤¤d¬EÐ2Õ3Ü(¨¨D°A°3©J¸ÀgÓN�Ø˜D’=Ù$Ü#'¨£>˜Ø$(˜	Ø"&�H˜Q’Kð (ðD €Oô' 
�HœdÔ	#Øˆ	Ø—N‘NÖ$‰DˆAˆqÜ˜!œ]Ô+Ù Ü# H›~�HØ $�IØ˜Q�KØ—‘˜qÔ!Ø×#Ñ# D¨A¨3¡JÕ/Ü˜A¤¤d¬EÐ2Õ3Ü(¨¨D°A°3©J¸ÀgÓN�Ø˜D’=Ù$Ü#'¨£>˜Ø$(˜	Ø"&�H˜Q’Kð %ð" €Oô ÐFÈÑQÓRÐRr,   c                 ó0   — g g }}t        | g ||«      } | ||fS )aç  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>])
    )rU   )rJ   rK   rL   s      r*   Ú_remove_buffersr]   „   s*   € ð  �'€LÜ˜e R¨°wÓ?€EØ�, Ð'Ð'r,   c                 óÖ   — t        | «      t        |«      k7  ry| |k(  ryt        | |«      D ]<  \  }}t        |«      j                  d«      t        |«      j                  d«      k7  sŒ< y y)zæ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
    FTÚB)ÚlenrI   Ú
memoryviewÚcast)ÚaÚbÚiaÚibs       r*   Ú_buffer_list_equalrg   “   se   € ô ˆ1ƒv”�Q“ÒØØˆA‚vØÜ�a˜–)‰ˆˆBô �b‹>×Ñ˜sÓ#¤z°"£~×':Ñ':¸3Ó'?Ó?Ùð ð r,   c                   ó<   — e Zd ZdZ ed«      Z ed«      d„ «       Zy)ÚLoggingHasTraitsz¦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.
    zlogging.LoggerÚlogc                 ó.   — ddl m} |j                  «       S )Nr   )rj   )Ú	traitletsrj   Ú
get_logger)Úselfrj   s     r*   Ú_log_defaultzLoggingHasTraits._log_default°   s   € å!Ø�~‰~ÓÐr,   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   rj   r   ro   © r,   r*   ri   ri   ª   s*   „ ññ Ð#Ó
$€CÙˆUƒ^ñ ó ñ r,   ri   c                   ó,   — e Zd ZdZ e«       Zd„ Zdd„Zy)ÚCallbackDispatcherz1A structure for registering and running callbacksc                 óî   — d}| j                   D ]  }	  ||i |¤Ž}|�|n|}Œ |S # t        $ rF}t        «       }|€ | j                  j	                  d||d¬«       n|j                  «        Y d}~Œ`d}~ww xY w)z%Call all of the registered callbacks.NzException in callback %s: %sT©Úexc_info)Ú	callbacksÚ	Exceptionr   rj   ÚwarningÚshowtraceback)rn   ÚargsÚkwargsÚvalueÚcallbackÚlocal_valueÚeÚips           r*   Ú__call__zCallbackDispatcher.__call__º   s‡   € àˆØŸœˆHð	JÙ&¨Ð7°Ñ7�ð (3Ð'>™ÀE‘ð 'ð ˆøô ò 'Ü “]�Ø�:Ø—H‘H×$Ñ$Ð%CÀXÈqÐ[_Ð$Õ`à×$Ñ$Ô&ÿøð'ús   “%¥	A4®<A/Á/A4c                 ó¶   — |r*|| j                   v r| j                   j                  |«       y|s+|| j                   vr| j                   j                  |«       yyy)zÞ(Un)Register a callback

        Parameters
        ----------
        callback: method handle
            Method to be registered or unregistered.
        remove=False: bool
            Whether to unregister the callback.N)rz   ÚremoverT   ©rn   r�   r‡   s      r*   Úregister_callbackz$CallbackDispatcher.register_callbackÊ   sK   € ñ �h $§.¡.Ñ0Ø�N‰N×!Ñ! (Õ+Ù˜H¨D¯N©NÑ:Ø�N‰N×!Ñ! (Õ+ð ;�r,   N©F)rp   rq   rr   rs   r   rz   r…   r‰   rt   r,   r*   rv   rv   ¶   s   „ Ù;Ù“€Iòô ,r,   rv   c                 ó   ‡ — ˆ fd„}|S )z decorator for showing tracebacksc                 óÌ   •— 	  ‰| g|¢­i |¤ŽS # t         $ rK}t        «       }|€ | j                  j                  d‰|d¬«       n|j	                  «        Y d }~y Y d }~y d }~ww xY w)Nz!Exception in widget method %s: %sTrx   )r{   r   rj   r|   r}   )rn   r~   r   rƒ   r„   Úmethods        €r*   Úmz_show_traceback.<locals>.mÜ   sk   ø€ ð	#Ù˜$Ð0 Ò0¨Ñ0Ð1øÜò 	#Ü“ˆBØˆzØ—‘× Ñ Ð!DÀfÈaÐZ^Ð Õ_à× Ñ ×"Ñ"ô `ûð	#ús   ƒ �	A#˜<AÁA#rt   )r�   rŽ   s   ` r*   Ú_show_tracebackr�   Ú   s   ø€ ô#ð €Hr,   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚWidgetRegistryc                 ó   — i | _         y ©N)Ú	_registry©rn   s    r*   Ú__init__zWidgetRegistry.__init__ê   s	   € Øˆ�r,   c                 óÖ   — | j                   j                  |i «      }|j                  |i «      }|j                  |i «      }|j                  |i «      }|j                  |i «      }	||	|<   y)zRegister a valueN)r”   Ú
setdefault)
rn   Úmodel_moduleÚmodel_module_version_rangeÚ
model_nameÚview_moduleÚview_module_version_rangeÚ	view_nameÚklassÚmodel_versionÚview_versions
             r*   ÚregisterzWidgetRegistry.registerí   sl   € à—~‘~×0Ñ0°¸rÓBˆØ$×/Ñ/Ð0JÈBÓOˆØ"×-Ñ-¨j¸"Ó=ˆ
Ø ×+Ñ+¨K¸Ó<ˆØ"×-Ñ-Ð.GÈÓLˆØ"'ˆ�YÒr,   c                 ó²   — | j                   |   }t        |j                  «       «      d   }||   }	|	|   }
t        |
j                  «       «      d   }||   }|S )zGet a valuer   )r”   r8   Úvalues)rn   r™   Úmodel_module_versionr›   rœ   Úview_module_versionrž   Úmodule_versionsÚmodel_namesÚview_modulesÚview_versionsÚ
view_namesÚwidget_classs                r*   ÚgetzWidgetRegistry.getö   sh   € àŸ.™.¨Ñ6ˆô
 ˜?×1Ñ1Ó3Ó4°QÑ7ˆØ" :Ñ.ˆØ$ [Ñ1ˆô ˜-×.Ñ.Ó0Ó1°!Ñ4ˆ
Ø! )Ñ,ˆØÐr,   c              #   óÄ  K  — t        | j                  j                  «       «      D ]¶  \  }}t        |j                  «       «      D ]•  \  }}t        |j                  «       «      D ]t  \  }}t        |j                  «       «      D ]S  \  }}t        |j                  «       «      D ]2  \  }	}
t        |
j                  «       «      D ]  \  }}|||||	|f|f–— Œ Œ4 ŒU Œv Œ— Œ¸ y ­wr“   )Úsortedr”   r6   )rn   r™   Úmmr    Úmvr›   Úvmrœ   Úvvr¡   Úvnrž   Úwidgets                r*   r6   zWidgetRegistry.items  sÏ   è ø€ Ü & t§~¡~×';Ñ';Ó'=Ö >ÑˆL˜"Ü%+¨B¯H©H«JÖ%7Ñ!�˜rÜ&,¨R¯X©X«ZÖ&8‘N�J Ü+1°"·(±(³*Ö+=™˜ RÜ06°r·x±x³zÖ0BÑ,˜L¨"Ü5;¸B¿H¹H»JÖ5GÑ 1 	¨6Ø+7¸È
ÐT_ÐamÐoxÐ*yð  |Bð  +Bó  %Bñ 6Hñ 1Cñ ,>ñ '9ñ &8ñ !?ùs   ‚CC N)rp   rq   rr   r–   r¢   r­   r6   rt   r,   r*   r‘   r‘   è   s   „ òò(òó"Br,   r‘   c           	      óø   — | j                  «       }t        j                  |d   j                  |d   j                  |d   j                  |d   j                  |d   j                  |d   j                  | «       | S )z>A decorator registering a widget class in the widget registry.Ú_model_moduleÚ_model_module_versionÚ_model_nameÚ_view_moduleÚ_view_module_versionÚ
_view_name)Úclass_traitsr”   r¢   Údefault_value)rµ   Úws     r*   r¢   r¢     s|   € à×ÑÓ€AÜ×Ñ�q˜Ñ)×7Ñ7Ø!"Ð#:Ñ!;×!IÑ!IØ!" =Ñ!1×!?Ñ!?Ø!" >Ñ!2×!@Ñ!@Ø!"Ð#9Ñ!:×!HÑ!HØ!" <¡×!>Ñ!>Ø!'ô)ð €Mr,   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_staticpropertyc                 ó   — || _         y r“   ©Úfget)rn   rÄ   s     r*   r–   z_staticproperty.__init__$  s	   € Øˆ�	r,   c                 ó*   — |�J ‚| j                  «       S r“   rÃ   )rn   Ú
owner_selfÚ	owner_clss      r*   Ú__get__z_staticproperty.__get__'  s   € ØÐ!Ð!Ð!Ø�y‰y‹{Ðr,   N)rp   rq   rr   r–   rÈ   rt   r,   r*   rÁ   rÁ   #  s   „ òór,   rÁ   c                   óÜ  ‡ — e Zd ZdZdZed„ «       Zed„ «       Zed„ «       Zed„ «       Z	e
d„ «       Zed„ «       Zed„ «       Ze
d	„ «       Ze
d
„ «       Zed„ «       ZedBd„«       ZdCd„Zd„ Z eddd¬«      j-                  d¬«      Z eddd¬«      j-                  d¬«      Z eedd¬«      j-                  d¬«      Z eddd¬«      j-                  d¬«      Z eddd¬«      j-                  d¬«      Z edd¬«      j-                  d¬«      Z eddd¬«      j-                  d¬«      Z e d¬«      Z! e"d ¬«      Z# e$d!«      d"„ «       Z% e&«       Z'dZ( e)«       Z* e+e,d#«      Z-ˆ fd$„Z.d%„ Z/d&„ Z0d'„ Z1d(„ Z2 e3d)«      d*„ «       Z4e5d+„ «       Z6d,„ Z7dDd-„Z8dEd.„Z9d/„ Z:d0„ Z;d1„ Z<dDd2„Z=dCd3„Z>ˆ fd4„Z?ˆ fd5„Z@d6„ ZAeBd7„ «       ZCeBd8„ «       ZDd9„ ZEeFd:„ «       ZGd;„ ZHed<„ «       ZIed=„ «       ZJd>„ ZKdDd?„ZLd@„ ZMdA„ ZNˆ xZOS )Fr0   Nc                  ó¤   — t        d«      } | j                  j                  t        k(  r| j                  j                  dv st        d«       t        S )Nr   ©Ú
getmembersÚsetup_instanceÚsetup_classzWidget.widgets is deprecated.©r   Úf_codeÚco_filenameÚTRAITLETS_FILEÚco_namer   r1   ©Úframes    r*   ÚwidgetszWidget.widgets4  sH   € ô
 ˜1“ˆØ—‘×(Ñ(¬NÒ:ÀÇÁ×@TÑ@Tð  YHñ  AHÜÐ7Ô8ÜÐr,   c                  ó¤   — t        d«      } | j                  j                  t        k(  r| j                  j                  dv st        d«       t        S )Nr   rË   z%Widget._active_widgets is deprecated.rÏ   rÔ   s    r*   Ú_active_widgetszWidget._active_widgets>  sH   € ô
 ˜1“ˆØ—‘×(Ñ(¬NÒ:ÀÇÁ×@TÑ@Tð  YHñ  AHÜÐ?Ô@ÜÐr,   c                  ó¤   — t        d«      } | j                  j                  t        k(  r| j                  j                  dv st        d«       t        S )Nr   rË   z#Widget._widget_types is deprecated.©r   rÐ   rÑ   rÒ   rÓ   r   r”   rÔ   s    r*   Ú_widget_typeszWidget._widget_typesH  sH   € ô
 ˜1“ˆØ—‘×(Ñ(¬NÒ:ÀÇÁ×@TÑ@Tð  YHñ  AHÜÐ=Ô>ÜÐr,   c                  ó¤   — t        d«      } | j                  j                  t        k(  r| j                  j                  dv st        d«       t        S )Nr   rË   z"Widget.widget_types is deprecated.rÚ   rÔ   s    r*   Úwidget_typeszWidget.widget_typesR  sH   € ô
 ˜1“ˆØ—‘×(Ñ(¬NÒ:ÀÇÁ×@TÑ@Tð  YHñ  AHÜÐ<Ô=ÜÐr,   c                 óh   — t        t        j                  «       «      D ]  }|j                  «        Œ y r“   )r8   r1   r¤   Úclose)Úclsrµ   s     r*   Ú	close_allzWidget.close_all\  s#   € äœ:×,Ñ,Ó.Ö/ˆFØ�L‰L�Nñ 0r,   c                 ó   — | t         _        y)z‘Registers a callback to be called when a widget is constructed.

        The callback must have the following signature:
        callback(widget)N)r0   Ú_widget_construction_callback)r�   s    r*   Úon_widget_constructedzWidget.on_widget_constructeda  s   € ð 08ŒÕ,r,   c                 ó„   — t         j                  �0t        t         j                  «      rt         j                  | «       yyy)ú3Static method, called when a widget is constructed.N)r0   rã   Úcallable)rµ   s    r*   Ú_call_widget_constructedzWidget._call_widget_constructedi  s5   € ô ×/Ñ/Ð;ÄÌ×ImÑImÔ@nÜ×0Ñ0°Õ8ð AoÐ;r,   c                 ó   — |j                  di «      j                  dd«      }|j                  d«      d   t        k7  rt        d|›dt        ›�«      ‚|| _        | j
                  j                  | j                  «       y)	z‚
        Class method, called when the comm-open message on the
        "jupyter.widget.control" comm channel is received
        ÚmetadataÚversionÚ r-   r   z@Incompatible widget control protocol versions: received version ú, expected version N)r­   ÚsplitÚCONTROL_PROTOCOL_VERSION_MAJORrV   r   Ú_control_commÚon_msgÚ_handle_control_comm_msg)rà   r   Úmsgrë   s       r*   Úhandle_control_comm_openedz!Widget.handle_control_comm_openedo  sy   € ð —'‘'˜* bÓ)×-Ñ-¨i¸Ó<ˆØ�=‰=˜Ó˜aÑ Ô$BÒBÝÒxõ  B^ð  _ó  `ð  `à ˆÔØ×Ñ× Ñ  ×!=Ñ!=Õ>r,   c                 óÄ  — | j                   €t        d«      ‚|d   d   }|d   }|dk(  rª| j                  «        t        j	                  «       }i }d}|D ]D  }|j
                  |j                  |j                  |j                  |¬«      dœ||j                  <   ŒF t        |«      \  }}}	| j                   j                  t        d	||¬
«      |	¬«       y t        d|z  «      ‚)Nz)Control comm has not been properly openedÚcontentÚdatar�   Úrequest_statesF©Údrop_defaults)r›   r™   r¥   rJ   Úupdate_states)r�   ÚstatesrK   ©rL   zAUnknown front-end to back-end widget control msg with method "%s")rð   ÚRuntimeErrorÚget_manager_stater1   r¤   r¹   r·   r¸   Ú	get_stater:   r]   Úsendr5   )
rà   ró   r÷   r�   rÖ   Ú
full_staterú   rµ   rK   rL   s
             r*   rò   zWidget._handle_control_comm_msg|  sü   € ð ×ÑÐ$ÜÐJÓKÐKà�9‰~˜fÑ%ˆØ�h‘ˆàÐ%Ò%à×!Ñ!Ô#Ü ×'Ñ'Ó)ˆGØˆJØ!ˆMÛ!�à"(×"4Ñ"4Ø$*×$8Ñ$8Ø,2×,HÑ,HØ#×-Ñ-¸MÐ-ÓJñ	/�
˜6Ÿ?™?Ò+ð "ô 1@À
Ó0KÑ-ˆJ˜ gØ×Ñ×"Ñ"¤4Ø&Ø!Ø)ô$ð ð	 #õ  ô ÐbÐekÑkÓlÐlr,   c           	      ó|  — |j                  di «      j                  dd«      }|j                  d«      d   t        k7  rt        d|›dt        ›�«      ‚|d   d	   }|d
   }t
        j                  |d   |d   |d   |d   |d   |d   «      } || ¬«      }d|v rt        ||d   |d   «       |j                  |«       y)ræ   rê   rë   rì   r-   r   z8Incompatible widget protocol versions: received version rí   rö   r÷   rJ   r·   r¸   r¹   rº   r»   r¼   r   rK   rL   N)r­   rî   ÚPROTOCOL_VERSION_MAJORrV   r   r”   rP   Ú	set_state)r   ró   rë   r÷   rJ   r¬   rµ   s          r*   Úhandle_comm_openedzWidget.handle_comm_openedœ  sç   € ð —'‘'˜* bÓ)×-Ñ-¨i¸Ó<ˆØ�=‰=˜Ó˜aÑ Ô$:Ò:ÝÒpwõ  zNð  Oó  Pð  PØ�9‰~˜fÑ%ˆØ�W‘ˆô !—}‘} U¨?Ñ%;Ø/4Ð5LÑ/MØ/4°]Ñ/CØ/4°^Ñ/DØ/4Ð5KÑ/LØ/4°\Ñ/BóDˆñ  4Ô(ˆØ˜TÑ!Ü˜  ^Ñ 4°c¸)±nÔEØ×Ñ˜Õr,   Fc                 óŠ   — i }|€t         j                  «       }|D ]!  }|j                  | ¬«      ||j                  <   Œ# dd|dœS )zü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:
        rù   r   r   )Úversion_majorÚversion_minorrJ   )r1   r¤   Ú_get_embed_stater:   )rú   rÖ   rJ   rµ   s       r*   rÿ   zWidget.get_manager_state±  sO   € ð ˆØˆ?Ü ×'Ñ'Ó)ˆGÛˆFØ%+×%<Ñ%<È=Ð%<Ó%YˆE�&—/‘/Ò"ð à!"°QÀÑGÐGr,   c           	      ó:  — | j                   | j                  | j                  dœ}t        | j	                  |¬«      «      \  }}}||d<   t        |«      dkD  r>t        ||«      D ��cg c]#  \  }}d|t        |«      j                  d«      dœ‘Œ% c}}|d<   |S c c}}w )	N)r›   r™   r¥   rù   rJ   r   Úbase64Úascii)ÚencodingrX   r÷   rL   )	r¹   r·   r¸   r]   r   r`   rI   r   Údecode)rn   rú   rJ   Úmodel_staterK   rL   ÚpÚds           r*   r
  zWidget._get_embed_stateÀ  s¸   € à×*Ñ*Ø ×.Ñ.Ø$(×$>Ñ$>ñ
ˆô
 .=¸T¿^¹^ÐZg¸^Ó=hÓ-iÑ*ˆ�\ 7Ø$ˆˆg‰Üˆw‹<˜!Òô -0°¸gÔ,Fô Hñ -G¡D A qð .6Ø)*Ü);¸AÓ)>×)EÑ)EÀgÓ)Nó!Pð -Gò HˆE�)Ñð ˆùó	 Hs   Á&(Bc                 ó2   — t        dd| j                  ¬«      S )Nr   r   ©r  r	  r:   )r5   Ú	_model_idr•   s    r*   Úget_view_speczWidget.get_view_specÏ  s   € Ü !°1¸t¿~¹~ÔNÐNr,   ÚWidgetModelzName of the model.T)ÚhelpÚ	read_only©Úsyncz@jupyter-widgets/basezThe namespace for the model.z@A semver requirement for namespace version containing the model.zName of the view.)Ú
allow_noner  zThe namespace for the view.rì   zCA semver requirement for the namespace version containing the view.)r  zû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.)r  zThe traits which are synced.Úkeysc                 óL   — | j                  d¬«      D �cg c]  }|‘Œ c}S c c}w )NTr  )Útraits)rn   r)   s     r*   Ú_default_keyszWidget._default_keysè  s'   € à!%§¡°$ Ô!7Ó8Ñ!7˜’Ð!7Ñ8Ð8ùÒ8s   •	!rt   c                 óœ   •— |j                  dd«      | _        t        ‰| �  di |¤Ž t        j                  | «       | j                  «        y)zPublic constructorr:   Nrt   )Úpopr  Úsuperr–   r0   rè   Úopen)rn   r   Ú	__class__s     €r*   r–   zWidget.__init__ô  s<   ø€ àŸ™ J°Ó5ˆŒÜ‰ÑÑ"˜6Ò"ä×'Ñ'¨Ô-Ø�	‰	�r,   c                 ó   — t        d«      ‚©Nz8Widgets cannot be copied; custom implementation required©ÚNotImplementedErrorr•   s    r*   Ú__copy__zWidget.__copy__ü  ó   € Ü!Ð"\Ó]Ð]r,   c                 ó   — t        d«      ‚r'  r(  )rn   Úmemos     r*   Ú__deepcopy__zWidget.__deepcopy__ÿ  r+  r,   c                 ó$   — | j                  «        y)zObject disposalN)rß   r•   s    r*   Ú__del__zWidget.__del__  s   € à�
‰
�r,   c                 óò   — | j                   €kt        | j                  «       «      \  }}}t        d||dœ|dt        i¬«      }| j
                  �| j
                  |d<   t        j                  di |¤Ž| _         yy)z6Open a comm to the frontend if one isn't already open.Nzjupyter.widget)rJ   rK   rë   )Útarget_namer÷   rL   rê   Úcomm_idrt   )r   r]   r   r5   r   r  Úcreate_comm)rn   rJ   rK   rL   r~   s        r*   r$  zWidget.open
  sx   € à�9‰9ÐÜ+:¸4¿>¹>Ó;KÓ+LÑ(ˆE�< äÐ$4Ø',¸lÑKØ 'Ø"+Ô-AÐ!BôˆDð
 �~‰~Ð)Ø"&§.¡.��Y‘ä×(Ñ(Ñ0¨4Ñ0ˆD�Ið r,   r   c                 ó¢   — |d   €y| j                   | _        | j                  j                  | j                  «       | t
        | j                   <   y)z Called when the comm is changed.ÚnewN)r:   r  r   rñ   Ú_handle_msgr1   )rn   Úchanges     r*   Ú_comm_changedzWidget._comm_changed  sB   € ð �%‰=Ð ØØŸ™ˆŒà�	‰	×Ñ˜×)Ñ)Ô*Ø$(Œ
�4—=‘=Ò!r,   c                 ó.   — | j                   j                  S )zmGets the model id of this widget.

        If a Comm doesn't exist yet, a Comm will be created automagically.)r   r3  r•   s    r*   r:   zWidget.model_id#  s   € ð
 �y‰y× Ñ Ð r,   c                 ó®   — | j                   �It        j                  | j                  d«       | j                   j	                  «        d| _         d| _        yy)z¡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   r1   r"  r:   rß   Ú_repr_mimebundle_r•   s    r*   rß   zWidget.close.  sB   € ð �9‰9Ð Ü�N‰N˜4Ÿ=™=¨$Ô/Ø�I‰I�O‰OÔØˆDŒIØ%)ˆDÕ"ð	 !r,   c                 ó  — | j                  |¬«      }t        |«      dkD  rk| j                  r6|j                  «       D ]#  \  }}|| j                  v sŒ|| j                  |<   Œ% t	        |«      \  }}}d||dœ}| j                  ||¬«       yy)a  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.
        ©rO   r   Úupdate©r�   rJ   rK   rý   N)r   r`   Ú_property_lockr6   r]   Ú_send)rn   rO   rJ   r)   r€   rK   rL   ró   s           r*   Ú
send_statezWidget.send_state:  sŽ   € ð —‘ 3�Ó'ˆÜˆu‹:˜Š>Ø×"Ò"Ø#(§;¡;¦=‘K�D˜%Ø˜t×2Ñ2Ò2Ø49˜×+Ñ+¨DÒ1ð $1ô ,;¸5Ó+AÑ(ˆE�< Ø%°À|ÑTˆCØ�J‰J�s GˆJÕ,ð r,   c                 óh  — |€| j                   }n2t        |t        «      r|g}nt        |t        «      r|}nt	        d«      ‚i }| j                  «       }|D ]Y  }| j                  |d| j                  «      } |t        | |«      | «      }|r | j                  |||   j                  «      rŒU|||<   Œ[ |S )a]  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}
        z2key must be a string, an iterable of keys, or NonerF   )r  r4   rC   r   rV   r  Útrait_metadataÚ_trait_to_jsonÚgetattrÚ_comparer¾   )	rn   rO   rú   r  rJ   r  r>   rF   r€   s	            r*   r   zWidget.get_stateM  s¯   € ð ˆ;Ø—9‘9‰DÜ˜œSÔ!Ø�5‰DÜ˜œXÔ&Ø‰DäÐQÓRÐRØˆØ—‘“ˆÛˆAØ×)Ñ)¨!¨Y¸×8KÑ8KÓLˆGÙœG D¨!Ó,¨dÓ3ˆEÙ ¨¯©°e¸VÀA¹Y×=TÑ=TÕ(UØ ��a’ð	 ð
 ˆr,   c                 ój   — |j                   j                  dk(  xr |j                   j                  dk(  S )NÚndarrayÚnumpy)r%  rp   rq   )rn   r<   s     r*   Ú	_is_numpyzWidget._is_numpyl  s+   € Ø�{‰{×#Ñ# yÑ0ÒV°Q·[±[×5KÑ5KÈwÑ5VÐVr,   c                 ó|   — | j                  |«      s| j                  |«      rdd l}|j                  ||«      S ||k(  S )Nr   )rL  rK  Úarray_equal)rn   rc   rd   Únps       r*   rH  zWidget._compareo  s6   € Ø�>‰>˜!Ô §¡¨qÔ 1ÛØ—>‘> ! QÓ'Ð'à˜‘6ˆMr,   c           
      ó"  — t         rmi }|j                  «       D ].  \  }}|| j                  v sŒ| j                  |dd¬«      sŒ*|||<   Œ0 |r(t	        |«      \  }}}d||dœ}| j                  ||¬«        | j                  di |¤Ž5  | j                  «       5  |D ]J  }|| j                  v sŒ| j                  |d| j                  «      }	| j                  | |	||   | «      «       ŒL 	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z3Called when a state is received from the front-end.Úecho_updateTr/   r@  rý   rE   Nrt   )
r.   r6   r  rE  r]   rB  Ú_lock_propertyÚhold_trait_notificationsÚ_trait_from_jsonÚ	set_trait)
rn   Ú	sync_dataÚ
echo_stateÚattrr€   Úecho_buffer_pathsÚecho_buffersró   r)   rE   s
             r*   r  zWidget.set_statev  s  € õ  ØˆJØ(Ÿ™Ö0‘��eØ˜4Ÿ9™9Ò$¨×)<Ñ)<¸TÀ=ÐZ^Ð)<Õ)_Ø',�J˜tÒ$ð  1ñ Ü>MÈjÓ>YÑ;�
Ð-¨|à+Ø'Ø$5ñ�ð
 —
‘
˜3¨�
Ô5ð
 !ˆT× Ñ Ñ- 9Ó-¨t×/LÑ/LÕ/NÛ!�Ø˜4Ÿ9™9Ò$Ø $× 3Ñ 3°D¸+Ø48×4IÑ4Ió!K�Ià—N‘N 4©°9¸T±?ÀDÓ)IÕJñ	 "÷ 0O×-Ð-×/NÐ/Nú×-Ð-ús*   ÂDÂC9Â,;C9Ã(DÃ9D	Ã>DÄDc                 ó0   — | j                  d|dœ|¬«       y)a  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
        Úcustom)r�   rö   rý   N)rB  ©rn   rö   rL   s      r*   r  zWidget.send‘  s   € ð 	�
‰
˜h°7Ñ;ÀWˆ
ÕMr,   c                 ó>   — | j                   j                  ||¬«       y)a=  (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.)r‡   N)Ú_msg_callbacksr‰   rˆ   s      r*   rñ   zWidget.on_msg�  s   € ð 	×Ñ×-Ñ-¨h¸vÐ-ÕFr,   c                 óÊ   •— t        ‰| �  di |¤Ž |j                  «       D ]@  \  }}d|j                  v sŒ| j                  j                  |«       | j                  |«       ŒB y)z/Dynamically add trait attributes to the Widget.r  Nrt   )r#  Ú
add_traitsr6   rê   r  rT   rC  )rn   r  r)   Útraitr%  s       €r*   ra  zWidget.add_traits«  sQ   ø€ ä‰ÑÑ$˜VÒ$Ø!Ÿ<™<ž>‰KˆD�%Ø˜Ÿ™Ò'Ø—	‘	× Ñ  Ô&Ø—‘ Õ%ñ *r,   c                 óì   •— |d   }| j                   �St        | j                   dd«      �<|| j                  v r.| j                  |t        | |«      «      r| j	                  |¬«       t
        ‰| �  |«       y)z#Called when a property has changed.r)   NÚkernelTr>  )r   rG  r  Ú_should_send_propertyrC  r#  Únotify_change)rn   r8  r)   r%  s      €r*   rf  zWidget.notify_change³  sh   ø€ ð �f‰~ˆØ�9‰9Ð ¤W¨T¯Y©Y¸À$Ó%GÐ%Sà�t—y‘yÑ  T×%?Ñ%?ÀÄgÈdÐTXÓFYÔ%Zà—‘ D�Ô)Ü‰Ñ˜fÕ%r,   c                 ó@   — | j                  | j                  «       «      S r“   )Ú_gen_repr_from_keysÚ
_repr_keysr•   s    r*   Ú__repr__zWidget.__repr__¿  s   € Ø×'Ñ'¨¯©Ó(9Ó:Ð:r,   c              +   óJ   K  — || _         	 d–— i | _         y# i | _         w xY w­w)a  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)rA  )rn   Ú
propertiess     r*   rR  zWidget._lock_propertyÆ  s(   è ø€ ð )ˆÔð	%Ûà"$ˆDÕø "ˆDÕüs   ‚#‹ �#—	  #c              #   óD  K  — | j                   du rd–— y	 d| _         d–— d| _         | j                  | j                  «       | j                  j                  «        y# d| _         | j                  | j                  «       | j                  j                  «        w xY w­w)z@Hold syncing any state until the outermost context manager exitsTNF)Ú_holding_syncrC  Ú_states_to_sendÚclearr•   s    r*   Ú	hold_synczWidget.hold_syncÕ  s„   è ø€ ð ×Ñ Ñ%Üð-Ø%)�Ô"Ûà%*�Ô"Ø—‘ × 4Ñ 4Ô5Ø×$Ñ$×*Ñ*Õ,øð &+�Ô"Ø—‘ × 4Ñ 4Ô5Ø×$Ñ$×*Ñ*Õ,üs   ‚B —A ¢=B Á>BÂB c                 óÊ  — | j                  |d| j                  «      }|| j                  v r�t        | ||| «      i«      }t        || j                  |   i«      }t	        t        |d   «      «      |d   k(  rE|d   |d   k(  r:t        |d   |d   «      r(| j                  r| j                  j                  |«       y| j                  r| j                  j                  |«       yy)z'Check the property lock (property_lock)rF   r   r   r   FT)rE  rF  rA  r]   Ú	jsonloadsÚ	jsondumpsrg   rn  ro  ÚdiscardÚadd)rn   rO   r€   rF   Úsplit_valueÚ
split_locks         r*   re  zWidget._should_send_propertyã  sÛ   € à×%Ñ% c¨9°d×6IÑ6IÓJˆØ�$×%Ñ%Ñ%ä)¨C±¸ÀÓ1EÐ*FÓGˆKÜ(¨3°×0CÑ0CÀCÑ0HÐ)IÓJˆJô œ) K°¡NÓ3Ó4¸
À1¹ÒEØ ‘N j°¡mÒ3Ü& {°1¡~°zÀ!±}ÔEØ×%Ò%Ø×(Ñ(×0Ñ0°Ô5ØØ×ÒØ× Ñ ×$Ñ$ SÔ)Øàr,   c                 ó<  — |d   d   }|d   }|dk(  r3d|v r.|d   }d|v rt        ||d   |d   «       | j                  |«       yy|dk(  r| j                  «        y|d	k(  rd|v r| j                  |d   |d   «       yy| j                  j                  d
|z  «       y)z0Called when a msg is received from the front-endrö   r÷   r�   r?  rJ   rK   rL   Úrequest_stater\  z9Unknown front-end to back-end widget msg with method "%s"N)rP   r  rC  Ú_handle_custom_msgrj   Úerror)rn   ró   r÷   r�   rJ   s        r*   r7  zWidget._handle_msgú  s½   € ð �9‰~˜fÑ%ˆØ�h‘ˆà�XÒØ˜$‰Ø˜W™�Ø! TÑ)Ü  ¨¨^Ñ(<¸cÀ)¹nÔMØ—‘˜uÕ%ð	 ð �Ò&Ø�O‰OÕð �xÒØ˜DÑ Ø×'Ñ'¨¨Y©¸¸Y¹ÕHð !ð
 �H‰H�N‰NÐVÐY_Ñ_Õ`r,   c                 ó*   — | j                  | ||«       y)z%Called when a custom msg is received.N)r_  r]  s      r*   r{  zWidget._handle_custom_msg  s   € à×Ñ˜D '¨7Õ3r,   c                 ó   — | S )zConvert a trait value to json.rt   ©r<   rn   s     r*   rF  zWidget._trait_to_json  ó	   € ð ˆr,   c                 ó   — | S )zConvert json values to objects.rt   r  s     r*   rT  zWidget._trait_from_json  r€  r,   c                 ó�   — t        | «      }t        |«      dkD  r|d d dz   }d|i}| j                  �dd| j                  dœ|d<   |S y )Nén   u   â€¦z
text/plainr   r   r  z(application/vnd.jupyter.widget-view+json)Úreprr`   r¼   r  )rn   r   Ú	plaintextr÷   s       r*   r<  zWidget._repr_mimebundle_"  sh   € Ü˜“Jˆ	Üˆy‹>˜CÒØ! $ 3˜¨%Ñ/ˆIà˜)ð
ˆð �?‰?Ð&ð "#Ø!"Ø ŸN™Nñ@ˆDÐ;Ñ<ð
 ˆKð 'r,   c                 ó¶   — | j                   �Mt        | j                   d«      r| j                   j                  � n	 | j                   j                  ||¬«       yyy)z.Sends a message to the model in the front-end.Nrd  )r÷   rL   )r   Úhasattrrd  r  )rn   ró   rL   s      r*   rB  zWidget._send6  sI   € à�9‰9Ð ÄgÈdÏiÉiÐYaÔFb d§i¡i×&6Ñ&6Ñ&BÐhlØ�I‰I�N‰N ¨WˆNÕ5ð 'CÐ r,   c              #   óJ  K  — | j                  «       }t        | j                  «      D ]w  }|d   dk(  rŒt        | |«      }||   }| j	                  ||j
                  «      rŒ:t        |t        t        f«      r$|j
                  t        k(  r|�t        |«      dk(  rŒt|–— Œy y ­w)Nr   Ú_)r  r¯   r  rG  rH  r¾   r4   r   r	   r   r`   )rn   r  rO   r€   rb  s        r*   ri  zWidget._repr_keys;  s’   è ø€ Ø—‘“ˆÜ˜$Ÿ)™)Ö$ˆCà�1‰v˜Š}Øä˜D #Ó&ˆEØ˜3‘KˆEØ�}‰}˜U E×$7Ñ$7Ô8ØÜ˜U¤Y´Ð$5Ô6Ø×%Ñ%¬Ò2Ø�=¤C¨£J°!¢OàØ‹Iñ %ùs   ‚B!B#c                 óˆ   ‡ — ‰ j                   j                  }dj                  ˆ fd„|D «       «      }dj                  ||«      S )Nz, c              3   óV   •K  — | ]   }d j                  |t        ‰|«      «      –— Œ" y­w)z{}={!r}N)ÚformatrG  )Ú.0rO   rn   s     €r*   Ú	<genexpr>z-Widget._gen_repr_from_keys.<locals>.<genexpr>O  s-   øè ø€ ð 
á�ð ×Ñ˜S¤'¨$°Ó"4×5Ùùs   ƒ&)z{}({}))r%  rp   ÚjoinrŒ  )rn   r  Ú
class_nameÚ	signatures   `   r*   rh  zWidget._gen_repr_from_keysM  s@   ø€ Ø—^‘^×,Ñ,ˆ
Ø—I‘Ió 
áó
ó 
ˆ	ð �‰˜z¨9Ó5Ð5r,   )FNrŠ   r“   )NF)Prp   rq   rr   rã   rð   rÁ   rÖ   rØ   rÛ   rÝ   Úclassmethodrá   Ústaticmethodrä   rè   rô   rò   r  rÿ   r
  r  r   Útagr¹   r·   r   r¸   r¼   rº   r»   r   Ú_view_countr   r   r   r  r   r   r	   rA  rn  r   ro  r
   rv   r_  r–   r*  r.  r0  r$  r   r9  Úpropertyr:   rß   rC  r   rL  rH  r  r  rñ   ra  rf  rj  r   rR  rq  re  r�   r7  r{  rF  rT  r<  rB  ri  rh  Ú__classcell__)r%  s   @r*   r0   r0   -  sP  ø„ ð %)Ð!Ø€Màñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñ8ó ð8ð ñ9ó ð9ð
 ñ
?ó ð
?ð ñmó ðmð> ñ ó ð ð( òHó ðHóòOñ ˜-Ø!¨Tô3ß36±3¸D°3³>ð áÐ3Ø+°tô=ß=@¹SÀd¸S»^ð á#Ð$DØOÐ[_ôaßadÑadÐjnÐadÓaoð á˜¨$Ø ô"ß"%¡#¨4 #£.ð á˜4¨DØ*ô,ß,/©C°T¨C«Nð á" 2ØRôTßTWÑTWÐ]aÐTWÓTbð ñ �d tð KôL÷ MPñ  MPð  VZð  MPó  M[ð á˜$Ô€DáÐ3Ô4€DáˆVƒ_ñ9ó ð9ñ “V€NØ€MÙ“e€OÙÐ0°"Ó5€Nô
ò^ò^òò1ñ ˆVƒ_ñ)ó ð)ð ñ!ó ð!ò
*ó-ó&ò>WòòKó6
NóGô&ô
&ò;ð ñ%ó ð%ð ñ-ó ð-òð. ñaó ðaò24ð ñó ðð ñó ðòó(6ò
ö$6r,   )Hrs   r%   ÚsysÚtypingÚ
contextlibr   Úcollections.abcr   ÚIPythonr   rl   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Újsonr   rs  r   rt  rì   r   r  r   Úutilsr   r   Ú_versionr   r   r   ÚinspectÚgetfilerÒ   r+   rî   r  rï   r.   r1   ÚMutableMappingrC   Ú__annotations__r7   rB   Úwidget_serializationra   Ú	bytearrayÚbytesrS   rP   rU   r]   rg   ri   rv   r�   r‘   r”   r¢   ÚobjectrÁ   r0   rt   r,   r*   Ú<module>r¨     sN  ðò
ó 
Û 
Û Ý %Ý $Ý ÷÷ ÷ õ ÷ 8Ý å %ç *ç kÑ kã Ø �—‘ Ó+€ò	ð 4Ð-×3Ñ3°CÓ8¸Ñ;Ð Ø!CÐ!=×!CÑ!CÀCÓ!HÈÑ!KÐ ÙÐ4¸dÔCÐ ð 57€
ˆV×"Ñ" 3¨ =Ñ1Ó 6òòð !ØñÐ ð
 ˜Y¨Ð.€ò
&ò+òZ(òô.	 �yô 	 ô",Ð)ô ",òH÷&Bñ &BñX Ó€	ò
ô�fô ôf6Ðõ f6r,   