Ë
    :vžjã‘  ã                  óò  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZ	ddl
Z
ddlmZ ddl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 ddlmZ ddlmZ ddlm Z  ejB                  dk\  rddlm"Z" nddl#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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> ddl?m@Z@mAZAmBZB  G d„ de«      ZC G d„ deCe«      ZDd d!d„ZE G d„ de«      ZFy)"zbA MultiKernelManager for use in the Jupyter server

- raises HTTPErrors
- creates REST API models
é    )ÚannotationsN©Údefaultdict)ÚdatetimeÚ	timedelta)ÚpartialÚwraps)ÚAsyncIOLoopKernelManager)ÚAsyncMultiKernelManagerÚMultiKernelManager)ÚSession)Úexists)Úensure_async)ÚEventLogger)ÚSchemaRegistryException)é   é   )Úoverride)Ú	overrides)Úweb)ÚFuture)ÚIOLoopÚPeriodicCallback)ÚAnyÚBoolÚCaselessStrEnumÚDictÚFloatÚInstanceÚIntegerÚListÚ
TraitErrorÚUnicodeÚdefaultÚvalidate©ÚDEFAULT_EVENTS_SCHEMA_PATH)Ú	isoformatÚutcnow)ÚKERNEL_CURRENTLY_RUNNING_TOTAL)ÚApiPathÚimport_itemÚ
to_os_pathc                  óà  ‡ — e Zd ZU dZ ed«      d„ «       Z e e«       «      Z e	g d¢ddd¬«      Z
 ed¬	«      Z e«       Z e«       Zd
ed<   dZdZ ed«      d„ «       Z ed«      d„ «       Z eddd¬«      ZdZ eedd¬«      Z eddd¬«      Z eddd¬«      Z eddd¬«      Z eddd¬«      Z e«       Z  ed«      d„ «       Z! e"e#d¬«      Z$d„ Z% e e«       dd ¬!«      Z& eddd"¬«      Z' ed#dd$¬«      Z(d%„ Z)d&„ Z*dAd'„Z+ˆ fd(„Z,ddd)œ	 	 	 	 	 	 	 dBd*„Z-e-Z.d+„ Z/d,„ Z0d-„ Z1d.„ Z2d/„ Z3d0„ Z4dCd1„Z5e5Z6dDd2„Z7e7Z8d3„ Z9d4„ Z:d5„ Z;d6„ Z<d7„ Z= e e«       dg d8¢d9¬:«      Z>d;„ Z?d<„ Z@d=„ ZAd>„ ZBd?„ ZCd@„ ZDˆ xZES )EÚMappingKernelManagerzmA KernelManager that handles
    - File mapping
    - HTTP error handling
    - Kernel message filtering
    Úkernel_manager_classc                 ó   — y)Nz)jupyter_client.ioloop.IOLoopKernelManager© ©Úselfs    ú~/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyter_server/services/kernels/kernelmanager.pyÚ_default_kernel_manager_classz2MappingKernelManager._default_kernel_manager_classA   s   € à:ó    )ÚdisabledÚautoÚrequiredr8   Ta,  Transport encryption policy for manager-provisioned CurveZMQ keys for all managed kernels. 'disabled' (default) does not provision Curve credentials, 'auto' provisions when the kernelspec declares support, and 'required' enforces provisioning and fails kernel startup if encryption cannot be applied.)Údefault_valueÚconfigÚhelp©r<   zdict[str, list[int]]Ú_kernel_portsNFÚroot_dirc                ón   — | j                   st        j                  «       S | j                   j                  S ©N)ÚparentÚosÚgetcwdr@   r3   s    r5   Ú_default_root_dirz&MappingKernelManager._default_root_dir]   s%   € à�{Š{Ü—9‘9“;ÐØ�{‰{×#Ñ#Ð#r7   c                óü   — |d   }t         j                  j                  |«      st         j                  j                  |«      }t	        |«      rt         j                  j                  |«      st        d|z  «      ‚|S )z'Do a bit of validation of the root dir.Úvaluez%kernel root dir %r is not a directory)rD   ÚpathÚisabsÚabspathr   Úisdirr"   )r4   ÚproposalrH   s      r5   Ú_update_root_dirz%MappingKernelManager._update_root_dirc   s\   € ð ˜Ñ!ˆÜ�w‰w�}‰}˜UÔ#ä—G‘G—O‘O EÓ*ˆEÜ�eŒ}¤B§G¡G§M¡M°%Ô$8ÜÐDÀuÑLÓMÐMØˆr7   r   zêTimeout (in seconds) after which a kernel is considered idle and ready to be culled.
        Values of 0 or lower disable culling. Very short timeouts may result in kernels being culled
        for users with poor network connections.)r<   r=   i,  z^The interval (in seconds) on which to check for idle kernels exceeding the cull timeout value.zxWhether to consider culling kernels which have one or more connections.
        Only effective if cull_idle_timeout > 0.zdWhether to consider culling kernels which are busy.
        Only effective if cull_idle_timeout > 0.ae  Whether messages from kernels whose frontends have disconnected should be buffered in-memory.

        When True (default), messages are buffered and replayed on reconnect,
        avoiding lost messages due to interrupted connectivity.

        Disable if long-running kernels will produce too much output while
        no frontends are connected.
        é<   aÀ  Timeout for giving up on a kernel (in seconds).

        On starting and restarting kernels, we check whether the
        kernel is running and responsive by sending kernel_info_requests.
        This sets the timeout in seconds for how long the kernel can take
        before being presumed dead.
        This affects the MappingKernelManager (which handles kernel restarts)
        and the ZMQChannelsHandler (which handles the startup).
        Ú_kernel_buffersc                ó   — t        d„ «      S )Nc                 ó   — g di dœS )NÚ )ÚbufferÚsession_keyÚchannelsr2   r2   r7   r5   Ú<lambda>z>MappingKernelManager._default_kernel_buffers.<locals>.<lambda>ª   s   € ¨bÀÐQSÒ#Tr7   r   r3   s    r5   Ú_default_kernel_buffersz,MappingKernelManager._default_kernel_buffers¨   s   € äÑTÓUÐUr7   zAThe last activity on any kernel, including shutting down a kernel©r=   c                ó€   — t         | _        i | _         | j                  j                  | fi |¤Ž t	        «       | _        y)zInitialize a kernel manager.N©r   Úpinned_superclassÚ_pending_kernel_tasksÚ__init__r)   Úlast_kernel_activity©r4   Úkwargss     r5   r^   zMappingKernelManager.__init__±   ó7   € ä!3ˆÔØ%'ˆÔ"Ø'ˆ×Ñ×'Ñ'¨Ñ7°Ò7Ü$*£HˆÕ!r7   zsWhite list of allowed kernel message types.
        When the list is empty, all message types are allowed.
        )Útraitr<   r=   z4Whether to send tracebacks to clients on exceptions.zMAn exception occurred at runtime, which is not shown due to security reasons.zHMessage to print when allow_tracebacks is False, and an exception occursc                ó^   — | j                   j                  d|«       | j                  |«       y)znotice that a kernel diedz"Kernel %s died, removing from map.N)ÚlogÚwarningÚremove_kernel©r4   Ú	kernel_ids     r5   Ú_handle_kernel_diedz(MappingKernelManager._handle_kernel_diedÎ   s%   € à�‰×ÑÐ=¸yÔIØ×Ñ˜9Õ%r7   c                ó*  — t        || j                  «      }t        j                  j	                  |«      s]|| j                  k7  rNt        j                  j                  |«      }t        j                  j	                  |«      s|| j                  k7  rŒN|S )z$Turn API path into absolute OS path.)r-   r@   rD   rI   rL   Údirname)r4   rI   ra   Úos_paths       r5   Úcwd_for_pathz!MappingKernelManager.cwd_for_pathÓ   sc   € ä˜T 4§=¡=Ó1ˆô —'‘'—-‘- Ô(¨W¸¿¹Ò-EÜ—g‘g—o‘o gÓ.ˆGô —'‘'—-‘- Ô(¨W¸¿¹Ó-Eàˆr7   c                óX   — t        |«      }| j                  dk7  r| j                  |d<   |S )z<Build kernel launch kwargs with server-level policy applied.r8   Útransport_encryption)Údictrp   )r4   ra   Úlaunch_kwargss      r5   Ú_kernel_start_kwargsz)MappingKernelManager._kernel_start_kwargsÜ   s0   € ä˜V›ˆØ×$Ñ$¨
Ò2Ø48×4MÑ4MˆMÐ0Ñ1ØÐr7   c              ƒ  ó²   •K  — t         ‰| �  ||«      ƒ d{  –—†  | j                  j                  |d«       | j                  j                  |d«       y7 Œ=­w)z!Remove a kernel when it is ready.N)ÚsuperÚ_remove_kernel_when_readyÚ_kernel_connectionsÚpopr?   )r4   ri   Úkernel_awaitableÚ	__class__s      €r5   rv   z.MappingKernelManager._remove_kernel_when_readyã   sO   øè ø€ ä‰gÑ/°	Ð;KÓL×LÐLØ× Ñ ×$Ñ$ Y°Ô5Ø×Ñ×Ñ˜y¨$Õ/ð 	Mús   ƒA—A˜>A)ri   rI   c          	   ‹  ó|  K  — |�|| v�ré | j                   di |¤Ž}|�&| j                  ||j                  di «      ¬«      |d<   |�|€J d«       ‚||d<    | j                  j                  | fi |¤Žƒ d{  –—† }d| j
                  |<   | j                  |«      }d|_        d	|_        t        «       |_
        | j                  j                  d
|«       | j                  j                  d|j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}«       |j                  d«      }|rCt        |t         «      r3| j                  j                  dt#        |j%                  «       «      «       t'        j(                  | j+                  |«      «      }t-        | dd«      s|ƒ d{  –—†  n|| j.                  |<   t1        j2                  | j4                  |   j6                  ¬«      j9                  «        n| j                  j                  d|«       | j:                  s| j=                  «        |€J ‚|S 7 �Œ½c c}}w 7 Œ—­w)ay  Start a kernel for a session and return its kernel_id.

        Parameters
        ----------
        kernel_id : uuid (str)
            The uuid to associate the new kernel with. If this
            is not None, this kernel will be persistent whenever it is
            requested.
        path : API path
            The API path (unicode, '/' delimited) for the cwd.
            Will be transformed to an OS path relative to root_dir.
        kernel_name : str
            The name identifying which kernel spec to launch. This is ignored if
            an existing kernel is returned, but it may be checked in the future.
        NÚenv)r|   Úcwdz#Never Fail, but necessary for mypy ri   r   ÚstartingrS   zKernel started: %szKernel args (excluding env): %rz%Kernel argument 'env' passed with: %rÚuse_pending_kernels©ÚtypezUsing existing kernel: %sr2   )rs   rn   Úgetr\   Ú_async_start_kernelrw   Ú
get_kernelÚexecution_stateÚreasonr)   Úlast_activityre   ÚinfoÚdebugÚitemsÚ
isinstancerq   ÚlistÚkeysÚasyncioÚcreate_taskÚ_finish_kernel_startÚgetattrr]   r*   ÚlabelsÚ_kernelsÚkernel_nameÚincÚ_initialized_cullerÚinitialize_culler)	r4   ri   rI   ra   ÚkernelÚkÚvr|   Útasks	            r5   rƒ   z(MappingKernelManager._async_start_kernelë   s  è ø€ ð$ Ð 	°Ò 5Ø.�T×.Ñ.Ñ8°Ñ8ˆFØÐØ $× 1Ñ 1°$¸F¿J¹JÀuÈbÓ<QÐ 1Ó R��u‘ØÐ$Ø Ð,ÐSÐ.SÓSÐ,Ø&/��{Ñ#ØH˜d×4Ñ4×HÑHÈÑXÐQWÑX×XˆIØ23ˆD×$Ñ$ YÑ/ð —_‘_ YÓ/ˆFØ%/ˆFÔ"ØˆFŒMÜ#)£8ˆFÔ Ø�H‰H�M‰MÐ.°	Ô:Ø�H‰H�N‰NØ1ÀVÇ\Á\Ä^Ô3bÁ^¹T¸QÀÐWXÐ\aÓWa°A°q±DÀ^Ò3bôð —*‘*˜UÓ#ˆCÙ”z #¤tÔ,Ø—‘—‘ÐFÌÈSÏXÉXËZÓHXÔYä×&Ñ& t×'@Ñ'@ÀÓ'KÓLˆDÜ˜4Ð!6¸Ô=Ø—
‘
à8<�×*Ñ*¨9Ñ5ô +×1Ñ1°t·}±}ÀYÑ7O×7[Ñ7[Ô\×`Ñ`Õbð �H‰H�M‰MÐ5°yÔAð ×'Ò'Ø×"Ñ"Ô$ØÐ$Ð$Ð$ØÐðC Yûó 4cð ús9   ‚A2H<Á4H1Á5BH<Ã;H4Ä	H4ÄBH<Æ"H:Æ#BH<È4H<c              ƒ  ó   ‡ ‡K  — ‰ j                  ‰«      }‰ j                  j                  d‰«       t        |d«      rF|j                  }t        |t        j                  «      st        j                  |«      }	 |ƒ d{  –—†  ‰ j                  j                  d‰«       |j                  ‰ j                  ‰<   ‰ j                  ‰«       ‰ j                  ‰ˆˆ fd„d«       y7 Œb# t        $ r ‰ j                  j                  d«       Y yw xY w­w)z'Handle a kernel that finishes starting.zWaiting for kernel %sÚreadyNz&Error waiting for kernel manager readyzKernel %s readyc                 ó&   •— ‰j                  ‰ «      S rB   )rj   )ri   r4   s   €€r5   rW   z;MappingKernelManager._finish_kernel_start.<locals>.<lambda>@  s   ø€ �D×,Ñ,¨YÔ7r7   Údead)r„   re   r‰   Úhasattrr�   r‹   rŽ   r   Úwrap_futureÚ	ExceptionÚ	exceptionÚportsr?   Ústart_watching_activityÚadd_restart_callback)r4   ri   Úkmr�   s   ``  r5   r�   z)MappingKernelManager._finish_kernel_start,  sÜ   ùè ø€ à�_‰_˜YÓ'ˆØ�‰�‰Ð.°	Ô:Ü�2�wÔØ—H‘HˆEÜ˜e¤W§^¡^Ô4Ü×+Ñ+¨EÓ2�ðØ—�ð 	�‰�‰Ð(¨)Ô4à(*¯©ˆ×Ñ˜9Ñ%Ø×$Ñ$ YÔ/à×!Ñ!ØÜ7Øõ	
ð ùÜò Ø—‘×"Ñ"Ð#KÔLÙðüs=   „A5DÁ:C$ Á?C"Â C$ ÂADÃ"C$ Ã$$DÄDÄ
DÄDc                ó‚   — | j                  |«      }|r,| j                  j                  d|«       || j                  |<   yy)a}  Used by ZMQChannelsHandler to determine how to coordinate nudge and replays.

        Ports are captured when starting a kernel (via MappingKernelManager).  Ports
        are considered changed (following restarts) if the referenced KernelManager
        is using a set of ports different from those captured at startup.  If changes
        are detected, the captured set is updated and a value of True is returned.

        NOTE: Use is exclusive to ZMQChannelsHandler because this object is a singleton
        instance while ZMQChannelsHandler instances are per WebSocket connection that
        can vary per kernel lifetime.
        z#Port change detected for kernel: %sTF)Ú_get_changed_portsre   r‰   r?   )r4   ri   Úchanged_portss      r5   Úports_changedz"MappingKernelManager.ports_changedD  s@   € ð ×/Ñ/°	Ó:ˆÙà�H‰H�N‰NÐ@À)ÔLØ,9ˆD×Ñ˜yÑ)ØØr7   c                óì   — | j                  |«      }t        |j                  t        «      sJ ‚t        | j                  |   t        «      sJ ‚|j                  | j                  |   k7  r|j                  S y)aÚ  Internal method to test if a kernel's ports have changed and, if so, return their values.

        This method does NOT update the captured ports for the kernel as that can only be done
        by ZMQChannelsHandler, but instead returns the new list of ports if they are different
        than those captured at startup.  This enables the ability to conditionally restart
        activity monitoring immediately following a kernel's restart (if ports have changed).
        N)r„   r‹   r¤   rŒ   r?   )r4   ri   r§   s      r5   r©   z'MappingKernelManager._get_changed_portsX  sd   € ð �_‰_˜YÓ'ˆÜ˜"Ÿ(™(¤DÔ)Ð)Ð)Ü˜$×,Ñ,¨YÑ7¼Ô>Ð>Ð>Ø�8‰8�t×)Ñ)¨)Ñ4Ò4Ø—8‘8ˆOØr7   c                óš  ‡ ‡‡— ‰ j                   s&|j                  «       D ]  }|j                  «        Œ y‰ j                  j	                  d|«       ‰ j                  ‰«       ‰ j                  ‰«       ‰ j                  ‰   Š|‰d<   g ‰d<   |‰d<   ˆˆˆ fd„}|j                  «       D ]   \  }}|j                  t        ||«      «       Œ" y)aÞ  Start buffering messages for a kernel

        Parameters
        ----------
        kernel_id : str
            The id of the kernel to stop buffering.
        session_key : str
            The session_key, if any, that should get the buffer.
            If the session_key matches the current buffered session_key,
            the buffer will be returned.
        channels : dict({'channel': ZMQStream})
            The zmq channels whose messages should be buffered.
        NzStarting buffering for %srU   rT   rV   c                ól   •— ‰j                   j                  d‰| «       ‰d   j                  | |f«       y )NzBuffering msg on %s:%srT   )re   r‰   Úappend)ÚchannelÚ	msg_partsÚbuffer_infori   r4   s     €€€r5   Ú
buffer_msgz8MappingKernelManager.start_buffering.<locals>.buffer_msgˆ  s0   ø€ Ø�H‰H�N‰NÐ3°YÀÔHØ˜Ñ!×(Ñ(¨'°9Ð)=Õ>r7   )Úbuffer_offline_messagesÚvaluesÚclosere   rˆ   Ú_check_kernel_idÚstop_bufferingrP   rŠ   Úon_recvr   )r4   ri   rU   rV   Ústreamr³   r°   r²   s   ``     @r5   Ústart_bufferingz$MappingKernelManager.start_bufferingh  s·   ú€ ð ×+Ò+Ø"Ÿ/™/Ö+�Ø—‘•ð ,àà�‰�‰Ð1°;Ô?Ø×Ñ˜iÔ(à×Ñ˜IÔ&Ø×*Ñ*¨9Ñ5ˆà%0ˆ�MÑ"à "ˆ�HÑØ"*ˆ�JÑö	?ð  (Ÿ~™~Ö/‰OˆG�VØ�N‰Nœ7 :¨wÓ7Õ8ñ  0r7   c                óä   — | j                   j                  d|«       || j                  vry| j                  |   }|d   |k(  r| j                  j                  |«       |S | j	                  |«       y)at  Get the buffer for a given kernel

        Parameters
        ----------
        kernel_id : str
            The id of the kernel to stop buffering.
        session_key : str, optional
            The session_key, if any, that should get the buffer.
            If the session_key matches the current buffered session_key,
            the buffer will be returned.
        zGetting buffer for %sNrU   )re   r‰   rP   rx   r¸   )r4   ri   rU   r²   s       r5   Ú
get_bufferzMappingKernelManager.get_buffer�  sm   € ð 	�‰�‰Ð.°	Ô:Ø˜D×0Ñ0Ñ0Øà×*Ñ*¨9Ñ5ˆØ�}Ñ%¨Ò4à× Ñ ×$Ñ$ YÔ/àÐà×Ñ 	Õ*r7   c                ó´  — | j                   j                  d|«       | j                  |«       || j                  vry| j                  j	                  |«      }|d   j                  «       D ]:  }|j                  j                  rŒ|j                  d«       |j                  «        Œ< |d   }|r*| j                   j                  dt        |«      |d   «       yy)zšStop buffering kernel messages

        Parameters
        ----------
        kernel_id : str
            The id of the kernel to stop buffering.
        zClearing buffer for %sNrV   rT   z&Discarding %s buffered messages for %srU   )re   r‰   r·   rP   rx   rµ   ÚsocketÚclosedr¹   r¶   rˆ   Úlen)r4   ri   r²   rº   Ú
msg_buffers        r5   r¸   z#MappingKernelManager.stop_buffering¨  s¼   € ð 	�‰�‰Ð/°Ô;Ø×Ñ˜iÔ(à˜D×0Ñ0Ñ0ØØ×*Ñ*×.Ñ.¨yÓ9ˆà! *Ñ-×4Ñ4Ö6ˆFØ—=‘=×'Ó'Ø—‘˜tÔ$Ø—‘•ð 7ð
 ! Ñ*ˆ
ÙØ�H‰H�M‰MØ8Ü�J“Ø˜MÑ*õð r7   c              ƒ  óª  K  — | j                  |«       t        j                  | j                  |   j                  ¬«      j                  «        || j                  v r+| j                  j                  |«      }|j                  «        | j                  |«       | j                  |«       | j                  j                  | |||¬«      ƒ d{  –—† S 7 Œ­w)zShutdown a kernel by kernel_idr€   )ÚnowÚrestartN)r·   r*   r’   r“   r”   Údecr]   rx   ÚcancelÚstop_watching_activityr¸   r\   Ú_async_shutdown_kernel)r4   ri   rÄ   rÅ   r›   s        r5   rÉ   z+MappingKernelManager._async_shutdown_kernelÄ  s·   è ø€ à×Ñ˜iÔ(ô 	'×-Ñ-°4·=±=ÀÑ3K×3WÑ3WÔX×\Ñ\Ô^à˜×2Ñ2Ñ2Ø×-Ñ-×1Ñ1°)Ó<ˆDØ�K‰KŒMà×#Ñ# IÔ.Ø×Ñ˜IÔ&à×+Ñ+×BÑBØ�) ¨gð Có 
÷ 
ð 	
ð 
ús   ‚C
CÃCÃCc              ƒ  ó®  ‡ ‡‡‡‡‡‡	‡
‡K  — ‰ j                  ‰«       ‰ j                  j                  ‰ ‰|¬«      ƒ d{  –—†  ‰ j                  ‰«      Š‰j	                  «       Št        «       Šˆˆˆ	ˆ
ˆfd„Šˆˆˆˆ fd„}ˆˆˆˆ fd„}ˆˆˆˆ fd„Š
‰j                  ‰
d«       ‰‰_        ‰j                  j                  ‰d«       ‰j                  |«       t        j                  «       Š	‰	j                  ‰	j                  «       ‰ j                  z   |«      Š‰ j!                  ‰«      �)‰ j#                  ‰«       d	‰ _        ‰ j'                  ‰«       ‰S 7 �Œ­w)
zRestart a kernel by kernel_id)rÄ   Nc                 óš   •— ‰ j                  «       s‰ j                  «        ‰j                  ‰«       ‰j                  ‰d«       d‰_        y)z:Common cleanup when restart finishes/fails for any reason.rŸ   N)rÀ   r¶   Úremove_timeoutÚremove_restart_callbackÚ_pending_restart_cleanup)r°   r˜   ÚloopÚon_restart_failedÚtimeouts   €€€€€r5   Úfinishz:MappingKernelManager._async_restart_kernel.<locals>.finishâ  s=   ø€ à—>‘>Ô#Ø—‘”Ø×Ñ Ô(Ø×*Ñ*Ð+<¸fÔEØ.2ˆFÕ+r7   c                ó�   •— ‰j                   j                  d‰«        ‰«        ‰j                  «       s‰j                  | «       y y )NzKernel info reply received: %s)re   r‰   ÚdoneÚ
set_result)ÚmsgrÒ   Úfutureri   r4   s    €€€€r5   Úon_replyz<MappingKernelManager._async_restart_kernel.<locals>.on_replyê  s7   ø€ Ø�H‰H�N‰NÐ;¸YÔGÙŒHØ—;‘;”=Ø×!Ñ! #Õ&ð !r7   c                 ó¢   •— ‰j                   j                  d‰«        ‰ «        ‰j                  «       s‰j                  t	        d«      «       y y )Nz)Timeout waiting for kernel_info_reply: %szTimeout waiting for restart)re   rf   rÔ   Úset_exceptionÚTimeoutError©rÒ   r×   ri   r4   s   €€€€r5   Ú
on_timeoutz>MappingKernelManager._async_restart_kernel.<locals>.on_timeoutð  s?   ø€ Ø�H‰H×ÑÐHÈ)ÔTÙŒHØ—;‘;”=Ø×$Ñ$¤\Ð2OÓ%PÕQð !r7   c                 ó¢   •— ‰j                   j                  d‰«        ‰ «        ‰j                  «       s‰j                  t	        d«      «       y y )NzRestarting kernel failed: %szRestart failed)re   rf   rÔ   rÚ   ÚRuntimeErrorrÜ   s   €€€€r5   rÐ   zEMappingKernelManager._async_restart_kernel.<locals>.on_restart_failedö  s?   ø€ Ø�H‰H×ÑÐ;¸YÔGÙŒHØ—;‘;”=Ø×$Ñ$¤\Ð2BÓ%CÕDð !r7   rŸ   Úkernel_info_requestr~   )r·   r\   Ú_async_restart_kernelr„   Úconnect_shellr   r¦   rÎ   ÚsessionÚsendr¹   r   ÚcurrentÚadd_timeoutÚtimeÚkernel_info_timeoutr©   rÈ   r…   r¥   )r4   ri   rÄ   rØ   rÝ   r°   rÒ   r×   r˜   rÏ   rÐ   rÑ   s   ``   @@@@@@@r5   rá   z*MappingKernelManager._async_restart_kernelÙ  s"  ÿøè ø€ à×Ñ˜iÔ(Ø×$Ñ$×:Ñ:¸4ÀÐPSÐ:ÓT×TÐTØ—‘ Ó+ˆà×&Ñ&Ó(ˆÜ$›hˆ÷	3ð 	3÷	'÷	R÷	Eð 	×#Ñ#Ð$5°vÔ>Ø*0ˆÔ'Ø�‰×Ñ˜GÐ%:Ô;Ø�‰˜Ô!Ü�~‰~ÓˆØ×"Ñ" 4§9¡9£;°×1IÑ1IÑ#IÈ:ÓVˆà×"Ñ" 9Ó-Ð9Ø×'Ñ'¨	Ô2Ø#-ˆDÔ Ø×(Ñ(¨Ô3ØˆðW 	Uûs   ‹3E¾E¿DEc                óP   — || j                   v r| j                   |xx   dz  cc<   yy)z#Notice a new connection to a kernelé   N©rw   rh   s     r5   Únotify_connectz#MappingKernelManager.notify_connect  ó+   € à˜×0Ñ0Ñ0Ø×$Ñ$ YÓ/°1Ñ4Ô/ð 1r7   c                óP   — || j                   v r| j                   |xx   dz  cc<   yy)z$Notice a disconnection from a kernelrê   Nrë   rh   s     r5   Únotify_disconnectz&MappingKernelManager.notify_disconnect  rí   r7   c                ó  — | j                  |«       | j                  |   }||j                  t        |j                  «      |j
                  | j                  j                  |d«      dœ}t        |dd«      r|j                  |d<   |S )zqReturn a JSON-safe dict representing a kernel

        For use in representing kernels in the JSON APIs.
        r   )ÚidÚnamer‡   r…   Úconnectionsr†   N)
r·   r“   r”   r(   r‡   r…   rw   r‚   r‘   r†   )r4   ri   r˜   Úmodels       r5   Úkernel_modelz!MappingKernelManager.kernel_model  s‚   € ð
 	×Ñ˜iÔ(Ø—‘˜yÑ)ˆð Ø×&Ñ&Ü& v×';Ñ';Ó<Ø%×5Ñ5Ø×3Ñ3×7Ñ7¸	À1ÓEñ
ˆô �6˜8 TÔ*Ø$Ÿm™mˆE�(‰OØˆr7   c                óÒ   — g }| j                   j                  | «      }|D ]%  }	 | j                  |«      }|j                  |«       Œ' |S # t        j
                  t        f$ r Y ŒEw xY w)z1Returns a list of kernel_id's of kernels running.)r\   Úlist_kernel_idsrõ   r¯   r   Ú	HTTPErrorÚKeyError)r4   ÚkernelsÚ
kernel_idsri   rô   s        r5   Úlist_kernelsz!MappingKernelManager.list_kernels(  sl   € àˆØ×+Ñ+×;Ñ;¸DÓAˆ
Û#ˆIðØ×)Ñ)¨)Ó4�Ø—‘˜uÕ%ð $ð ˆøô —M‘M¤8Ð,ò áðús   ¤"A
Á
A&Á%A&c                ó>   — || vrt        j                  dd|z  «      ‚y)z5Check a that a kernel_id exists and raise 404 if not.i”  zKernel does not exist: %sN)r   rø   rh   s     r5   r·   z%MappingKernelManager._check_kernel_id6  s&   € à˜DÑ Ü—-‘- Ð%@À9Ñ%LÓMÐMð !r7   )Úcomm_info_requestÚcomm_info_replyrà   Úkernel_info_replyÚshutdown_requestÚshutdown_replyÚinterrupt_requestÚinterrupt_replyÚdebug_requestÚdebug_replyrº   Údisplay_dataÚupdate_display_dataÚexecute_inputÚexecute_resultÚerrorÚstatusÚclear_outputÚdebug_eventÚinput_requestÚinput_replyz´List of kernel message types excluded from user activity tracking.

        This should be a superset of the message types sent on any channel other
        than the shell channel.)rc   r<   r;   r=   c                ó   — || j                   vS rB   )Úuntracked_message_types)r4   Úmessage_types     r5   Útrack_message_typez'MappingKernelManager.track_message_type\  s   € Ø 4×#?Ñ#?Ð?Ð?r7   c                óh  ‡ ‡‡‡— ‰ j                   j                  d‰«       ‰ j                  ‰   Šd‰_        t	        «       ‰_        ‰j                  «       ‰_        t        ‰j                  j                  ‰j                  j                  ¬«      Šˆˆˆ ˆfd„}‰j                  j                  |«       y)z§Start watching IOPub messages on a kernel for activity.

        - update last_activity on every message
        - record execution_state from status messages
        zWatching kernel activity: %srS   )r<   Úkeyc                ón  •— ‰j                  | «      \  }}‰j                  |d¬«      }|d   d   }|j                  d«      }|€dn|j                  d«      }‰
j                  |«      s ‰
j                  |«      s‰j                  dk(  rt        «       x‰
_        ‰_        |dk(  rv‰j                  |«      }|d	   d
   }‰
j                  |«      r|‰_        n‰j                  dk(  r|dk7  rd‰_        ‰
j                  j                  d‰	|‰j                  «       y‰
j                  j                  d‰	|«       y)z.Record an IOPub message arriving from a kernelF)ÚcontentÚheaderÚmsg_typeÚparent_headerNÚbusyr  r  r…   r~   Úidlezactivity on %s: %s (%s)zactivity on %s: %s)
Úfeed_identitiesÚdeserializer‚   r  r…   r)   r_   r‡   re   r‰   )Úmsg_listÚ_identsÚfed_msg_listrÖ   r  r  Úparent_msg_typer…   r˜   ri   r4   rã   s           €€€€r5   Úrecord_activityzEMappingKernelManager.start_watching_activity.<locals>.record_activityp  s3  ø€ à$+×$;Ñ$;¸HÓ$EÑ!ˆG�\Ø×%Ñ% l¸EÐ%ÓBˆCà˜8‘} ZÑ0ˆHØŸG™G OÓ4ˆMØ&3Ð&;™dÀ×ARÑARÐS]ÓA^ˆOà×'Ñ'¨Ô1Ø×*Ñ*¨?Ô;Ø×)Ñ)¨VÒ3äCIÃ8ÐK�Ô)¨FÔ,@Ø˜8Ò#Ø×)Ñ)¨,Ó7�Ø"% i¡.Ð1BÑ"C�Ø×*Ñ*¨?Ô;Ø-<�FÕ*Ø×+Ñ+¨zÒ9¸oÐQ[Ò>[ð .4�FÔ*Ø—‘—‘Ø-ØØØ×*Ñ*õ	ð —‘—‘Ð3°YÀÕIr7   N)re   r‰   r“   r†   r)   r‡   Úconnect_iopubÚ_activity_streamr   rã   r<   r  r¹   )r4   ri   r$  r˜   rã   s   `` @@r5   r¥   z,MappingKernelManager.start_watching_activity_  s‰   û€ ð 	�‰�‰Ð5°yÔAØ—‘˜yÑ)ˆàˆŒÜ%›xˆÔØ"(×"6Ñ"6Ó"8ˆÔÜØ—>‘>×(Ñ(Ø—‘×"Ñ"ô
ˆ÷
	JðB 	×Ñ×'Ñ'¨Õ8r7   c                óú   — | j                   |   }t        |dd«      rA|j                  j                  j                  s|j                  j                  «        d|_        t        |dd«      r|j                  «        yy)z6Stop watching IOPub messages on a kernel for activity.r&  NrÎ   )r“   r‘   r&  r¿   rÀ   r¶   rÎ   )r4   ri   r˜   s      r5   rÈ   z+MappingKernelManager.stop_watching_activity“  sj   € à—‘˜yÑ)ˆÜ�6Ð-¨tÔ4Ø×*Ñ*×1Ñ1×8Ò8Ø×'Ñ'×-Ñ-Ô/Ø&*ˆFÔ#Ü�6Ð5°tÔ<Ø×+Ñ+Õ-ð =r7   c                ó²  — | j                   �sC| j                  dkD  �r3| j                  �€&t        j                  «       }| j
                  dk  rB| j                  j                  d| j
                  | j                  «       | j                  | _        t        | j                  d| j
                  z  «      | _        | j                  j                  d| j                  | j
                  «       | j                  r| j                  j                  d«       | j                  r| j                  j                  d«       | j                  j                  «        d| _         y)	z‰Start idle culler if 'cull_idle_timeout' is greater than zero.

        Regardless of that value, set flag that we've been here.
        r   NzKInvalid value for 'cull_interval' detected (%s) - using default value (%s).iè  zKCulling kernels with idle durations > %s seconds at %s second intervals ...zCulling kernels even if busyz+Culling kernels even with connected clientsT)r–   Úcull_idle_timeoutÚ_culler_callbackr   rå   Úcull_intervalre   rf   Úcull_interval_defaultr   Úcull_kernelsrˆ   Ú	cull_busyÚcull_connectedÚstart)r4   Ú_s     r5   r—   z&MappingKernelManager.initialize_culler�  s  € ð ×(Ó(Ø×&Ñ&¨Ó*Ø×%Ñ%Ñ-ä—‘Ó ˆAØ×!Ñ! QÒ&Ø—‘× Ñ ØaØ×&Ñ&Ø×.Ñ.ôð
 &*×%?Ñ%?�Ô"Ü$4°T×5FÑ5FÈÈt×OaÑOaÑHaÓ$bˆDÔ!Ø�H‰H�M‰MØ]Ø×&Ñ&Ø×"Ñ"ôð
 �~Š~Ø—‘—‘Ð<Ô=Ø×"Ò"Ø—‘—‘ÐKÔLØ×!Ñ!×'Ñ'Ô)à#'ˆÕ r7   c              ƒ  óB  K  — | j                   j                  d| j                  | j                  «       	 t	        | j
                  «      D ]  }	 | j                  |«      ƒ d{  –—†  Œ y7 Œ# t        $ r'}| j                   j                  d||«       Y d}~ŒMd}~ww xY w­w)zHandle culling kernels.z9Polling every %s seconds for kernels idle > %s seconds...NzYThe following exception was encountered while checking the idle duration of kernel %s: %s)	re   r‰   r+  r)  rŒ   r“   Úcull_kernel_if_idler¢   r£   )r4   ri   Úes      r5   r-  z!MappingKernelManager.cull_kernels½  s�   è ø€ à�‰�‰ØGØ×ÑØ×"Ñ"ô	
ð
 	]Ü˜dŸm™mÖ,ˆIðØ×.Ñ.¨yÓ9×9Ñ9ñ -à9ùÜò Ø—‘×"Ñ"ØoØØ÷ñ ûðüsB   ‚ABÁA,Á"A*Á#A,Á'BÁ*A,Á,	BÁ5BÂBÂBÂBc              ƒ  ó¶  K  — | j                   |   }t        |dd«      dk(  rU| j                  j                  d|j                  |j
                  |«       t        | j                  |«      «      ƒ d{  –—†  y|j                  j                  }|j                  d| j                  «      }t        |d«      �r| j                  j                  d||j
                  |j                  «       t        «       }||j                  z
  }|t!        |¬«      kD  }| j"                  xs |j                  d	k7  }| j$                  j                  |d
«      }	| j&                  xs |	 }
|rv|rs|
rpt)        |j+                  «       «      }| j                  j                  d|j                  |j
                  ||	|«       t        | j                  |«      «      ƒ d{  –—†  yyyyy7 �Œc7 Œ­w)zCull a kernel if it is idle.r…   NrŸ   z#Culling '%s' dead kernel '%s' (%s).r)  r‡   z.kernel_id=%s, kernel_name=%s, last_activity=%s)Úsecondsr  r   zRCulling '%s' kernel '%s' (%s) with %d connections due to %s seconds of inactivity.)r“   r‘   re   rf   r…   r”   r   Úshutdown_kernelÚkernel_specÚmetadatar‚   r)  r    r‰   r‡   r)   r   r.  rw   r/  ÚintÚtotal_seconds)r4   ri   r˜   Úkernel_spec_metadatar)  Údt_nowÚdt_idleÚis_idle_timeÚis_idle_executeró   Úis_idle_connectedÚidle_durations               r5   r3  z(MappingKernelManager.cull_kernel_if_idleÏ  sÁ  è ø€ à—‘˜yÑ)ˆä�6Ð,¨dÓ3°vÒ=Ø�H‰H×ÑØ5Ø×&Ñ&Ø×"Ñ"Øô	ô ˜t×3Ñ3°IÓ>Ó?×?Ð?Øà%×1Ñ1×:Ñ:ÐØ0×4Ñ4Ð5HÈ$×J`ÑJ`ÓaÐäØ�Oõ
ð �H‰H�N‰NØ@ØØ×"Ñ"Ø×$Ñ$ô	ô “XˆFØ˜v×3Ñ3Ñ3ˆGà"¤YÐ7HÔ%IÑIˆLØ"Ÿn™nÒR°×1GÑ1GÈ6Ñ1QˆOØ×2Ñ2×6Ñ6°yÀ!ÓDˆKØ $× 3Ñ 3Ò F¸;°Ðá¡Ñ4EÜ # G×$9Ñ$9Ó$;Ó <�Ø—‘× Ñ ØhØ×*Ñ*Ø×&Ñ&ØØØ!ôô # 4×#7Ñ#7¸	Ó#BÓC×CÑCð 5F ˆ|ð#
ð @ùðB Dús%   ‚A/GÁ1GÁ2EGÇ
GÇ
GÇG)ra   út.AnyÚreturnzdict[str, t.Any])ri   z
str | NonerI   zApiPath | Nonera   rC  rD  Ústr)FF)F)FÚ__name__Ú
__module__Ú__qualname__Ú__doc__r$   r6   r!   r#   Úkernel_argvr   rp   r@   r   rw   r?   Ú__annotations__r*  r–   rF   r%   rN   r    r)  r,  r+  r   r/  r.  r´   r   rè   r   rP   rX   r   r   r_   r^   Úallowed_message_typesÚallow_tracebacksÚtraceback_replacement_messagerj   rn   rs   rv   rƒ   Ústart_kernelr�   r«   r©   r»   r½   r¸   rÉ   r7  rá   Úrestart_kernelrì   rï   rõ   rü   r·   r  r  r¥   rÈ   r—   r-  r3  Ú__classcell__©rz   s   @r5   r/   r/   :   s’  ø… ññ Ð#Ó$ñ;ó %ð;ñ ‘w“y“/€Ká*Ú(Ø Øð!ô
Ðñ ˜dÔ#€Há›&Ðá*.«&€MÐ'Ó0àÐàÐáˆZÓñ$ó ð$ñ
 ˆjÓñó ðñ  Ø	Øð4ôÐð  ÐÙØØØqô€Mñ ØØð4ô€Nñ ØØð4ô€Iñ #ØØðôÐñ  Ø
ØðôÐñ “e€OáÐÓñVó  ðVñ $ØØPôÐò
-ñ !Ù‹iØðôÐñ Ø�TÐ!WôÐñ %,ØWØØXô%Ð!ò&ò
óô0ð *.Àdñ:Ø&ð:Ø5Cð:ØV[ð:à	ó:ð~ '€Lò
ò0ò(ò %9òN+ò2ó8
ð& -€Oó.ð` +€Nò5ò
5ò
ò&òNñ #Ù‹iØò
ð.#ô5Ðò@@ò29òh.ò(ò@ö$,Dr7   r/   c                  óN   — e Zd ZdZ ed«      d„ «       Z ed«      d„ «       Zd„ Zy)ÚAsyncMappingKernelManagerz'An asynchronous mapping kernel manager.r0   c                 ó   — y)NzAjupyter_server.services.kernels.kernelmanager.ServerKernelManagerr2   r3   s    r5   r6   z7AsyncMappingKernelManager._default_kernel_manager_class  s   € àRr7   c                ó”   — |j                   }t        |«      }t        |t        «      s t	        j
                  d|› d�t        d¬«       |S )z)A validator for the kernel manager class.zKernelManager class 'zÄ' is not a subclass of 'ServerKernelManager'.  Custom KernelManager classes should derive from 'ServerKernelManager' beginning with jupyter-server 2.0 or risk missing functionality.  Continuing...r   )Ú
stacklevel)rH   r,   Ú
issubclassÚServerKernelManagerÚwarningsÚwarnÚFutureWarning)r4   rM   Úkm_class_valueÚkm_classs       r5   Ú_validate_kernel_manager_classz8AsyncMappingKernelManager._validate_kernel_manager_class  sQ   € ð "Ÿ™ˆÜ˜~Ó.ˆÜ˜(Ô$7Ô8Ü�M‰MØ'¨ zð 2@ð @ô Øõð Ðr7   c                ó€   — t         | _        i | _         | j                  j                  | fi |¤Ž t	        «       | _        y)z+Initialize an async mapping kernel manager.Nr[   r`   s     r5   r^   z"AsyncMappingKernelManager.__init__  rb   r7   N)	rF  rG  rH  rI  r$   r6   r%   r_  r^   r2   r7   r5   rT  rT     s>   „ Ù1áÐ#Ó$ñSó %ðSñ Ð$Ó%ñó &ðó-r7   rT  c                ó   ‡ — ˆ fd„}|S )aÛ  Decorate kernel action methods to
    begin emitting jupyter kernel action events.

    Parameters
    ----------
    success_msg: str
        A formattable string that's passed to the message field of
        the emitted event when the action succeeds. You can include
        the kernel_id, kernel_name, or action in the message using
        a formatted string argument,
        e.g. "{kernel_id} succeeded to {action}."

    error_msg: str
        A formattable string that's passed to the message field of
        the emitted event when the action fails. You can include
        the kernel_id, kernel_name, or action in the message using
        a formatted string argument,
        e.g. "{kernel_id} failed to {action}."
    c                ó2   •‡ — t        ‰ «      ˆ ˆfd„«       }|S )Nc              Ÿ  ór  •K  — ‰j                   j                  dd «      }	  ‰| g|¢­i |¤Žƒ d{  –—† }| j                  |d‰	j                  | j                  | j                  |¬«      dœ}| j                  r| j                  |d<   | j                  d|¬«       |S 7 Œk# t        $ r�}| j                  |d	t        |«      dœ}| j                  r| j                  |d<   t        |t        j                  «      r$|j                  xs d }|j                  |d
<   ||d<   | j                  d|¬«       |‚d}~ww xY w­w)rS   Ú_kernelNÚsuccess)ri   r”   Úaction)r”   rf  r  rÖ   ri   z;https://events.jupyter.org/jupyter_server/kernel_actions/v1©Ú	schema_idÚdatar  Ústatus_coderÖ   )rF  Úreplacer”   Úformatri   Úemitr¢   rE  r‹   r   rø   Úlog_messagerj  )
r4   Úargsra   rf  Úoutri  ÚerrrÖ   ÚmethodÚsuccess_msgs
           €€r5   Úwrapped_methodzEemit_kernel_action_event.<locals>.wrap_method.<locals>.wrapped_method4  sH  øè ø€ ð —_‘_×,Ñ,¨Y¸Ó;ˆFð%Ù" 4Ð9¨$Ò9°&Ñ9×9�à#'×#3Ñ#3Ø$Ø'Ø&×-Ñ-Ø"&§.¡.¸d×>NÑ>NÐW]ð .ó ñ	�ð —>’>Ø(,¯©�D˜Ñ%Ø—	‘	Ø[Øð ô ð �
ð :ùô" ò à#'×#3Ñ#3Ø$Ø%Ü˜s›8ñ	�ð —>’>Ø(,¯©�D˜Ñ%ô ˜c¤3§=¡=Ô1ØŸ/™/Ò/¨R�CØ*-¯/©/�D˜Ñ'Ø"%�D˜‘KØ—	‘	Ø[Øð ô ð �	ûð'üs:   ƒD7¡B °B±A*B ÂD7ÂB Â	D4Â'BD/Ä/D4Ä4D7)r	   )rr  rt  rs  s   ` €r5   Úwrap_methodz-emit_kernel_action_event.<locals>.wrap_method3  s"   ù€ Ü	ˆv‹ô*	ó 
ð*	ðX Ðr7   r2   )rs  ru  s   ` r5   Úemit_kernel_action_eventrv    s   ø€ ô*.ð` Ðr7   c                  óŠ  ‡ — e Zd ZU dZ eddd¬«      Z edd¬«      Z eed	¬«      Z	e
dd
„«       Z eg d¬«      j                  d¬«      Zded<    ee«      Z ed«      d„ «       Zd„ Ze ed¬«      ˆ fd„«       «       Ze ed¬«      ˆ fd„«       «       Ze ed¬«      ˆ fd„«       «       Ze ed¬«      ˆ fd„«       «       Zˆ xZS )rY  z!A server-specific kernel manager.NTz)The current execution state of the kernel)Ú
allow_noner=   rS   z2The reason for the last failure against the kernelrY   zThe last activity on the kernelc                ó   — t         dz  dz  gS )NÚkernel_actionszv1.yamlr&   r3   s    r5   Úcore_event_schema_pathsz+ServerKernelManager.core_event_schema_pathst  s   € ä*Ð-=Ñ=À	ÑIÐJÐJr7   zw
        A list of pathlib.Path objects pointing at to register with
        the kernel manager's eventlogger.
        )r;   r=   r>   z	List[str]Úextra_event_schema_pathsÚevent_loggerc                ób  — | j                   �W| j                   j                   �At        | j                   j                   d«      r!| j                   j                   j                  }n
t        «       }| j                  | j
                  z   }|D ]  }	 |j                  |«       Œ |S # t        $ r Y Œ$w xY w)zAInitialize the logger and ensure all required events are present.r}  )rC   r    r}  r   r{  r|  Úregister_event_schemar   )r4   ÚloggerÚschemasÚschema_paths       r5   Ú_default_event_loggerz)ServerKernelManager._default_event_logger„  sž   € ð �K‰KÐ#Ø—‘×"Ñ"Ð.Ü˜Ÿ™×*Ñ*¨NÔ;à—[‘[×'Ñ'×4Ñ4‰Fô !“]ˆFà×.Ñ.°×1NÑ1NÑNˆÛ"ˆKðØ×,Ñ,¨[Õ9ð #ð ˆøô +ò Ùðús   ÂB"Â"	B.Â-B.c                ó>   — | j                   j                  ||¬«       y)z&Emit an event from the kernel manager.rg  N)r}  rm  )r4   rh  ri  s      r5   rm  zServerKernelManager.emit›  s   € à×Ñ×Ñ¨¸ÐÕ>r7   zKernel {kernel_id} was started.)rs  c              �  ó>   •K  — t        ‰| �  |i |¤Žƒ d {  –—† S 7 Œ­wrB   )ru   rO  ©r4   ro  ra   rz   s      €r5   rO  z ServerKernelManager.start_kernelŸ  s$   øè ø€ ô
 ‘WÑ)¨4Ð:°6Ñ:×:Ð:Ð:úó   ƒ–—z Kernel {kernel_id} was shutdown.c              �  ó>   •K  — t        ‰| �  |i |¤Žƒ d {  –—† S 7 Œ­wrB   )ru   r7  r†  s      €r5   r7  z#ServerKernelManager.shutdown_kernel¦  s$   øè ø€ ô
 ‘WÑ,¨dÐ=°fÑ=×=Ð=Ð=úr‡  z!Kernel {kernel_id} was restarted.c              �  ó>   •K  — t        ‰| �  |i |¤Žƒ d {  –—† S 7 Œ­wrB   )ru   rP  r†  s      €r5   rP  z"ServerKernelManager.restart_kernel­  s$   øè ø€ ô
 ‘WÑ+¨TÐ<°VÑ<×<Ð<Ð<úr‡  z#Kernel {kernel_id} was interrupted.c              �  ó>   •K  — t        ‰| �  |i |¤Žƒ d {  –—† S 7 Œ­wrB   )ru   Úinterrupt_kernelr†  s      €r5   r‹  z$ServerKernelManager.interrupt_kernel´  s$   øè ø€ ô
 ‘WÑ-¨tÐ>°vÑ>×>Ð>Ð>úr‡  )rD  zlist[pathlib.Path])rF  rG  rH  rI  r#   r…   r†   r   r   r‡   Úpropertyr{  r!   Útagr|  rK  r   r}  r$   rƒ  rm  r   rv  rO  r7  rP  r‹  rQ  rR  s   @r5   rY  rY  f  s0  ø… Ù+ñ Ø˜Ð$Oô€Oñ �RÐRÔS€Fá˜XÐ,MÔN€Mð
 òKó ðKñ
 +/Øðô+÷ 
�c�€cÓð ˜ió ñ ˜KÓ(€Láˆ^Óñó ðò,?ð ÙØ5ôó;óó ð;ð ÙØ6ôó>óó ð>ð ÙØ7ôó=óó ð=ð ÙØ9ôó?óó ô?r7   rY  )rS   )rs  rE  rD  zt.Callable[..., t.Any])GrI  Ú
__future__r   rŽ   rD   ÚpathlibÚsysrç   ÚtypingÚtrZ  Úcollectionsr   r   r   Ú	functoolsr   r	   Újupyter_client.ioloop.managerr
   Ú!jupyter_client.multikernelmanagerr   r   Újupyter_client.sessionr   Újupyter_core.pathsr   Újupyter_core.utilsr   Újupyter_eventsr   Újupyter_events.schema_registryr   Úversion_infor   r   Útornador   Útornado.concurrentr   Útornado.ioloopr   r   Ú	traitletsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   Újupyter_serverr'   Újupyter_server._tzr(   r)   Ú!jupyter_server.prometheus.metricsr*   Újupyter_server.utilsr+   r,   r-   r/   rT  rv  rY  r2   r7   r5   Ú<module>r¥     s¼   ðñõ #ã Û 	Û Û 
Û Û Û Ý #ß (ß $å Bß YÝ *Ý %Ý +Ý &Ý Bà×Ñ�wÒÞå/Ý Ý %ß 3÷÷ ÷ ó õ 6ß 0Ý Lß AÑ AôADÐ-ô ADôL-Ð 4Ð6Mô -ô<EôPS?Ð2õ S?r7   