Format: application/x-python-code
⬇ Download File (34.0 KB)
   1  o
   2  
   3  �h���@s�dZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
   4  Z
   5  ddlZddlZddl
   6  Z
   7  ddlZddlZddlZddlmZddlmZddlmZmZmZmZmZddlmZejd	krhdd
   8  lmZndZzddlmZ Wne!y~ej Z Ynwddl"Z"ddl#Z#dd
   9  l$m%Z%ddlm&Z&ddl'm(Z(ddl)m*Z*m+Z+ddl,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9ddl:m;Z;ddl<m=Z=ddl>m?Z?ddl@mAZAdd�ZBGdd�de-�ZCdS)z9Base class for a kernel that talks to frontends over 0MQ.�)�annotationsN)�datetime)�partial)�SIGINT�SIGTERM�Signals�default_int_handler�signal�)�CONTROL_THREAD_NAME�win32)�SIGKILLzwindown-SIGKILL-sentinel)�utcnow��StdinNotImplementedError)�Session)�ioloop)�Queue�
  10  QueueEmpty)�SingletonConfigurable)�Any�Bool�Dict�Float�Instance�Integer�List�Set�Unicode�default�observe)�	ZMQStream)�
  11  json_clean)�kernel_protocol_version)�	OutStreamcCsbt�|�j}dd�|D�}|D]}|�|�}|o |j|j|jfvp+tdd�|��D��||<q|S)NcSsi|]}|d�qS�F�)�.0�paramr&r&�Jc:\Users\shubh\Videos\agent\nova\Lib\site-packages\ipykernel/kernelbase.py�
  12  <dictcomp>Esz'_accepts_parameters.<locals>.<dictcomp>css�|]	}|j|jkVqdS�N)�kind�VAR_KEYWORD)r'�pr&r&r)�	<genexpr>Ls�z&_accepts_parameters.<locals>.<genexpr>)	�inspect�	signature�
  13  parameters�getr,�KEYWORD_ONLY�POSITIONAL_OR_KEYWORD�any�values)�methZparam_namesr2Zacceptsr(Z
  14  param_specr&r&r)�_accepts_parametersCs
  15  ��r9cs<eZdZUdZed�ZiZded<ed�dd��Z	e
  16  edd	�Ze
  17  d
  18  dd	�Z
  19  e
  20  edd	�Zedd�Zd
  21  ed<ded<ded<ded<ed�dd��Zed�dd��Ze
  22  edd	�Ze�Ze�Ze�Ze�Ze�Ze
  23  ejdd	�Zded<ed�Ze �Z!ed�dd��Z"iZ#ded<e�Z$ded <e%dd!d�j&dd"�Z'e%dd#d�j&dd"�Z(e%d$�Z)e*iid%��Z+d&ed'<e*d(d(d%��Z,e-d)d*��Z.e/d+�j&dd"�Z0e/d,�j&dd"�Z1e/d-dd.d/�Z2dZ3e*�Z4e5�Z6d0Z7gd1�Z8ge8�d2�d3�d4�d5�Z9�fd6d7�Z:d8d9�Z;d:d;�Z<d<d=�Z=d>d?�Z>d@dA�Z?dBdC�Z@dDdE�ZAdFdG�ZBdHdI�ZCdJdK�ZDd�dLdM�ZEdNdO�ZFedPd�ZGedQ�dRdS��ZHdTdU�ZIdVdW�ZJdXdY�ZKdZd[�ZLd�d\d]�ZMd^d_�ZNd�dadb�ZOd�dcdd�ZP				$			d�dedf�ZQdgdh�ZRdidj�ZSdkdl�ZT			$d�dddm�dndo�ZUdpdq�ZVdrds�ZWdtdu�ZXd�dwdx�ZYdydz�ZZ						$d�d{d|�Z[d}d~�Z\e-dd���Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�d��Zcd�d��Zdd�d��Zed�d��Zfd�d�d��Zgd�d��Zhd�d��Zid�d��Zjd�d��Zkd�d��Zld�d��Zmd�d��Znd�d��Zoe%d$�Zpd�d��Zqd�d��Zrd�d��Zsd�d�d��Ztd�d�d��Zud�d�d��Zvd�d��Zwd�d��Zxd�d��Zyd�d��Zz�Z{S)��KernelzThe base kernel class.Nzdict[str, psutil.Process]�	processes�	eventloopcCs(tj��}|jdur|�|j�dSdS)z&schedule call to eventloop from IOLoopN)r�IOLoop�current�new�add_callback�enter_eventloop)�self�change�loopr&r&r)�_update_eventloop]s
  24  
  25  �zKernel._update_eventloopT)�
  26  allow_nonez"IPython.core.profiledir.ProfileDirz�Deprecated shell_streams alias. Use shell_stream
  27  
  28          .. versionchanged:: 6.0
  29              shell_streams is deprecated. Use shell_stream.
  30          )�helpzList[t.Any]�
  31  shell_streams�str�implementation�implementation_version�bannercCs&tjdtdd�|jdur|jgSgS)N�LKernel.shell_streams is deprecated in ipykernel 6.0. Use Kernel.shell_stream���
  32  stacklevel)�warnings�warn�DeprecationWarning�shell_stream�rBr&r&r)�_shell_streams_defaultts�
  33  zKernel._shell_streams_defaultcCsHtjdtdd�t|j�dkrtjdtdd�|jr"|jd|_dSdS)NrMrNrOr
  34  zJKernel only supports one shell stream. Additional streams will be ignored.r)rQrRrS�lenr?�RuntimeWarningrT)rBrCr&r&r)�_shell_streams_changeds���zKernel._shell_streams_changedzlogging.Logger�log������identcCstt���Sr+)rI�uuid�uuid4rUr&r&r)�_default_ident�szKernel._default_identzdict[str, object]�
  35  language_infozList[dict[str, str]]�
  36  help_linkszSSet to False if you want to debug python standard and dependent libraries.
  37          )�configzhWhether to use appnope for compatibility with OS X App Nap.
  38  
  39          Only affects OS X >= 10.9.
  40          F)�shell�controlzDict[str, t.Any]�_parents�cCstjdtdd�|��S)NzEKernel._parent_header is deprecated in ipykernel 6. Use .get_parent()rNrO)rQrRrS�
  41  get_parentrUr&r&r)�_parent_header�s�zKernel._parent_headerg����Mb@?�{�G�z�?�a�time (in seconds) to wait for messages to arrive
  42          when aborting queued requests after an error.
  43  
  44          Requests that arrive within this window after an error
  45          will be cancelled.
  46  
  47          Increase in the event of unusually slow network
  48          causing significant delays,
  49          which can manifest as e.g. "Run all" in a notebook
  50          aborting some, but not all, messages after an error.
  51          )rbrGr)�execute_request�complete_request�inspect_request�history_request�comm_info_request�kernel_info_request�connect_request�shutdown_request�is_complete_request�interrupt_request�
  52  apply_request�
  53  clear_request�
  54  abort_request�
  55  debug_request�
  56  usage_requestcs�t�jdi|��tj|_tj|_i|_|jD]
  57  }t	||�|j|<qi|_
  58  |jD]
  59  }t	||�|j
  60  |<q(t�|_
  61  t|jddg�|_dS)zInitialize the kernel.�	cell_meta�cell_idNr&)�super�__init__�sys�stdoutZ_stdout�stderr�_stderr�shell_handlers�	msg_types�getattr�control_handlers�control_msg_typesr�
  62  control_queuer9�
  63  do_execute�_do_exec_accepted_params)rB�kwargs�msg_type��	__class__r&r)r}s
  64  
  65  
  66  
  67  �zKernel.__init__cCs|j�|�dSr+)r��
  68  put_nowait�rB�msgr&r&r)�dispatch_control+szKernel.dispatch_controlc�sF�	|j��IdH}t|tjjtjf�r|�d�q|�|�IdHqr+)	r�r3�
  69  isinstance�
  70  concurrent�futures�Future�asyncio�
  71  set_result�process_controlr�r&r&r)�poll_control_queue.s�
  72  �zKernel.poll_control_queuec�sT��jr�jj}tj���t���}n	�j}t���}��fdd�}|�|�|S)zDFlush the control queue, wait for processing of any pending messagescs �jr�j���j���dSr+)�control_stream�flushr��putr&�rBZ
  73  tracer_futurer&r)�_flushDs
  74  z+Kernel._flush_control_queue.<locals>._flush)�control_thread�io_loopr�r�r�r��wrap_futurer@)rB�control_loopZawaitable_futurer�r&r�r)�_flush_control_queue7s�
  75  
  76  zKernel._flush_control_queuec�sB�|jsdS|jj|dd�\}}z|jj|ddd�}Wnty-|jjddd�YdSw|j�d|�|j||d	d
  77  �|�dd	�|d}|d
  78  }|j	�
  79  |d�}|dur^|j�d|�n%z||j||�}t�
  80  |�rp|IdHWnty�|jjddd�Ynwtj��tj��|�dd	�|jr�|j�tj�dSdS)zdispatch control requestsNF��copyT��contentr�zInvalid Control Message��exc_infozControl received: %srd��channel�busy�headerr�z UNKNOWN CONTROL MESSAGE TYPE: %rzException in control handler:�idle)�session�feed_identities�deserialize�	ExceptionrZ�error�debug�
  81  set_parent�_publish_statusr�r3r�r0�isawaitabler~rr�r��zmq�POLLOUT)rBr��identsr�r��handler�resultr&r&r)r�Os@��
  82  
  83  ��
  84  
  85  �zKernel.process_controlcCs8|dd}||jvr|j�|�|�|||�dSdS)z�Check whether a shell-channel message should be handled
  86  
  87          Allows subclasses to prevent handling of certain messages (e.g. aborted requests).
  88          r��msg_idFT)�aborted�remove�_send_abort_reply)rB�streamr�r�r�r&r&r)�
  89  should_handleus
  90  zKernel.should_handlec�sz�|jsdS|��IdH|jj|dd�\}}z|jj|ddd�}Wnty4|jjddd�YdSw|j||dd	�|�d
  91  d�|dd}|j	rj|d
  92  krj|�
  93  |j||�|�dd�|jrh|j�t
  94  j�dS|j�d|�|j�d|d�|�|j||�s�dS|j�|d�}|dur�|j�d|�n�|j�d||�z|��Wnty�|jjddd�YnwzMz||j||�}t�|�r�|IdHWnty�|jjddd�Ynty�|j�d�YnwWz|��Wn+t�y|jjddd�Ynwz|��Wwt�y|jjddd�Ywwtj��tj��|�dd�|j�r;|j�t
  95  j�dSdS)zdispatch shell requestsNFr�Tr�zInvalid Messager�rcr�r�r�r�rkr�z
  96  *** MESSAGE TYPE:%s***z   Content: %s
  97     --->
  98     r�zUnknown message type: %rz%s: %sz%Unable to signal in pre_handler_hook:zException in message handler:z#KeyboardInterrupt caught in kernel.z&Unable to signal in post_handler_hook:)r�r�r�r�r�rZr�r�r��	_abortingr�rTr�r�r�r�r�r�r3�warning�pre_handler_hookr0r��KeyboardInterrupt�post_handler_hookr~rr�)rBr�r�r�r�r�r&r&r)�dispatch_shell�sx���
  99  
 100  ������
 101  
 102  �zKernel.dispatch_shellcCsttt�|_dS)z.Hook to execute before calling message handlerN)r	rr�saved_sigint_handlerrUr&r&r)r��szKernel.pre_handler_hookcCstt|j�dS)z-Hook to execute after calling message handlerN)r	rr�rUr&r&r)r��szKernel.post_handler_hookcsV�j�d�j��j��dur�j�d�dS���fdd����fdd����dS)zenter eventloopzEntering eventloop %sNz Exiting as there is no eventloopc�s���j�ur�j�d��dS�j��r�j�d���dS�j�d��z���Wnty;�j�d�Ynw�j�urF��dSdS)Nzexiting eventloop %sz*Delaying eventloop due to waiting messageszAdvancing eventloop %sz"KeyboardInterrupt caught in kernel)r<rZ�info�	msg_queue�qsizer�r�r�r&)r<�
 103  schedule_nextrBr&r)�advance_eventloop�s"�
 104  
 105  �
 106  
 107  �z1Kernel.enter_eventloop.<locals>.advance_eventloopcs&�j�d��j�dt�j���dS)z*Schedule the next advance of the eventloopzScheduling eventloop advanceg����MbP?N)rZr�r��
 108  call_laterr�schedule_dispatchr&)r�rBr&r)r��sz-Kernel.enter_eventloop.<locals>.schedule_next)rZr�r<rUr&)r�r<r�rBr)rA�s
 109  zKernel.enter_eventloopc�s(�|jr	|j��|jdd�IdHdS)z�Process a single shell message
 110  
 111          Any pending control messages will be flushed as well
 112  
 113          .. versionchanged:: 5
 114              This is now a coroutine
 115          F)�waitN)rTr��process_onerUr&r&r)�do_one_iteration�s�	
 116  zKernel.do_one_iterationc	�s`�|r|j��IdH\}}}nz
 117  |j��\}}}Wn
 118  tjtfy&YdSw||�IdHdS)zMProcess one request
 119  
 120          Returns None if no message was handled.
 121          N)r�r3�
 122  get_nowaitr�r)rBr��t�dispatch�argsr&r&r)r�
 123  s��zKernel.process_onec�s8�	z	|��IdHWnty|j�d�Ynwq)z�Coroutine to preserve order of message handling
 124  
 125          Ensures that only one message is processing at a time,
 126          even when the handler is async
 127          TNzError in message handler)r�r�rZ�	exceptionrUr&r&r)�dispatch_queues���zKernel.dispatch_queuez&Monotonic counter of messages
 128          �_message_countercCst��Sr+)�	itertools�countrUr&r&r)�_message_counter_default*�zKernel._message_counter_defaultcGs0t|j�}|j�|||f�|j�dd��dS)zschedule a message for dispatchcSsdSr+r&r&r&r&r)�<lambda>:sz*Kernel.schedule_dispatch.<locals>.<lambda>N)�nextr�r�r�r�r@)rBr�r��idxr&r&r)r�.s
 129  ��zKernel.schedule_dispatchcCs�tj��|_t�|_|j�|j�|jr|jj	|j
 130  dd�|jr$|jjn|j}t�
 131  |��|j�|jr@|jj	t|j|j�dd�|�dd�dS)z register dispatchers for streamsFr��startingrcN)rr=r>r�rr�r@r�r�Zon_recvr�r�r��run_coroutine_threadsafer�Zasyncio_looprTrr�r�r�)rBr�r&r&r)�start<s ��	zKernel.startcCs
 132  ||_dS)z�Record the ports that this kernel is using.
 133  
 134          The creator of the Kernel instance must call this methods if they
 135          want the :meth:`connect_request` method to return the port numbers.
 136          N)�_recorded_ports)rBZportsr&r&r)�record_portsTs
 137  zKernel.record_portscCs2|jsdS|jj|jd||d�||�d�d�dS)z-Publish the code request on the iopub stream.NZ
 138  execute_input)�code�execution_count��parentr\)r��send�iopub_socket�_topic)rBr�r�r�r&r&r)�_publish_execute_input`s
 139  �zKernel._publish_execute_inputcCs:|jsdS|jj|jdd|i|p|�|�|�d�d�dS)z send status (busy/idle) on IOPubN�statusZexecution_stater��r�r�r�rgr�)rBr�r�r�r&r&r)r�ls
 140  �zKernel._publish_statuscCs0|jsdS|jj|jd||��|�d�d�dS)NZdebug_eventr�r�)rB�eventr&r&r)�_publish_debug_eventxs
 141  �zKernel._publish_debug_eventrccCs||j|<||j|<dS)a
 142  Set the current parent request
 143  
 144          Side effects (IOPub messages) and replies are associated with
 145          the request that caused them via the parent_header.
 146  
 147          The parent identity is used to route input_request messages
 148          on the stdin channel.
 149          N)�
 150  _parent_identre)rBr\r�r�r&r&r)r��s
 151  	zKernel.set_parentcCs.|durt��jtkrd}nd}|j�|i�S)aRGet the parent request associated with a channel.
 152  
 153          .. versionadded:: 6
 154  
 155          Parameters
 156          ----------
 157          channel : str
 158              the name of the channel ('shell' or 'control')
 159  
 160          Returns
 161          -------
 162          message : dict
 163              the parent message for the most recent request on the channel.
 164          Nrdrc)�	threading�current_thread�namerrer3)rBr�r&r&r)rg�s
 165  zKernel.get_parentc
 166  
 167  Cs,|jsdS|j�||||�|	�|||||�	S)aSend a response to the message we're currently processing.
 168  
 169          This accepts all the parameters of :meth:`jupyter_client.session.Session.send`
 170          except ``parent``.
 171  
 172          This relies on :meth:`set_parent` having been called for the current
 173          message.
 174          N)r�r�rg)
 175  rBr�Zmsg_or_typer�r\�buffers�trackr��metadatar�r&r&r)�
 176  send_response�s�zKernel.send_responsecCs
 177  dt�iS)zRInitialize metadata.
 178  
 179          Run at the beginning of execution requests.
 180          �started)�now)rBr�r&r&r)�
 181  init_metadata�s�zKernel.init_metadatacCs|S)zXFinish populating metadata.
 182  
 183          Run after completing an execution request.
 184          r&)rBr�r��
 185  reply_contentr&r&r)�finish_metadata�szKernel.finish_metadatac�s��|jsdSz.|d}|d}|�dd�}|�d|�}|�di�}|�dd�}	|�d	i�}
 186  |
 187  �d
 188  �}WntyK|j�d�|j�d|�YdSw|�d
 189  d�}|�|�}
 190  |sh|jd7_|�|||j�|||||	d�}|jdry|
 191  |d<|jdr�||d<|j	di|��}t
 192  �|�r�|IdH}tj
 193  ��tj��|jr�t�|j�t|�}|�||
 194  |�}
 195  |jj|d|||
 196  |d�}|j�d|�|s�|dddkr�|r�|��dSdSdSdS)zhandle an execute_requestNr�r��silentF�
 197  store_history�user_expressions�allow_stdinr�ZcellIdz
 198  Got bad msg: �%s�
 199  stop_on_errorTr
 200  )r�rrrrrzr{Z
 201  execute_reply)r�r\r�r�r&)r�r3r�rZr�r�r�r�r�r�r0r�r~rr�r��_execute_sleep�time�sleepr"r�r�r��
 202  _abort_queues)rBr�r\r�r�r�rrrrrzr{rr�Zdo_execute_argsr��	reply_msgr&r&r)rk�sj��
 203  �
 204  
 205  
 206  
 207  
 208  
 209  �	�zKernel.execute_request)rzr{cC�t�)z4Execute user code. Must be overridden by subclasses.��NotImplementedError)rBr�rrrrrzr{r&r&r)r�'szKernel.do_executec�sd�|jsdS|d}|d}|d}|�||�}t�|�r"|IdH}t|�}|j�|d|||�dS)zHandle a completion request.Nr�r��
 210  cursor_posZcomplete_reply)r��do_completer0r�r"r�)rBr�r\r�r�r�r�matchesr&r&r)rl5s�
 211  
 212  zKernel.complete_requestcCsg||idd�S)�+Override in subclasses to find completions.�ok)rZ
 213  cursor_endZcursor_startr�r�r&)rBr�rr&r&r)rDs�zKernel.do_completec
 214  �s��|jsdS|d}|�|d|d|�dd�t|�dg���}t�|�r*|IdH}t|�}|j�|d|||�}|j�	d	|�dS)
 215  zHandle an inspect request.Nr�r�r�detail_levelr�
 216  omit_sectionsZ
 217  inspect_replyr)
 218  r��
 219  do_inspectr3�setr0r�r"r�rZr��rBr�r\r�r�r�r�r&r&r)rmNs�
 220  �
 221  
 222  zKernel.inspect_requestr&cCsdiidd�S)z.Override in subclasses to allow introspection.rF)r��datar��foundr&)rBr�rrrr&r&r)rbszKernel.do_inspectc�sf�|jsdS|d}|jdi|��}t�|�r|IdH}t|�}|j�|d|||�}|j�d|�dS)zHandle a history request.Nr�Z
 223  history_replyrr&)r��
 224  do_historyr0r�r"r�rZr�rr&r&r)rnfs�
 225  
 226  zKernel.history_requestc
 227  
 228  Cs
 229  dgd�S)z)Override in subclasses to access history.r)r��historyr&)
 230  rBZhist_access_type�output�rawr�r��stop�n�pattern�uniquer&r&r)rts
 231  
 232  zKernel.do_historyc�sN�|jsdS|jr|j��ni}d|d<|j�|d|||�}|j�d|�dS)zHandle a connect request.Nrr�Z
 233  connect_replyr)r�r�r�r�rZr��rBr�r\r�r�r�r&r&r)rq�s�zKernel.connect_requestcCst|j|j|j|j|jd�S)N)Zprotocol_versionrJrKr`rLra)r#rJrKr`rLrarUr&r&r)�kernel_info�s�zKernel.kernel_infoc�sF�|jsdSddi}|�|j�|j�|d|||�}|j�d|�dS)zHandle a kernel info request.Nr�rZkernel_info_replyr)r��updater#r�rZr�r"r&r&r)rp�s�zKernel.kernel_info_requestc�s|�|jsdS|d}|�dd��t|d�r#�fdd�|jj��D�}ni}t|dd�}|j�|d	|||�}|j�	d
 234  |�dS)zHandle a comm info request.Nr��target_name�comm_managercs0i|]\}}|j�ks�dur|t|jd��qS)N�r%)r%�dict)r'�k�vr'r&r)r*�s
 235  �z,Kernel.comm_info_request.<locals>.<dictcomp>r)�commsr�Zcomm_info_replyr)
 236  r�r3�hasattrr&r+�itemsr(r�rZr�)rBr�r\r�r�r+r�r�r&r'r)ro�s�
 237  
 238  
 239  �zKernel.comm_info_requestcCs�tjdkr
 240  |j�d�dSt��}t�|�}|r9||kr9ttd�r9z	t�|t�WdSt	y8t�
 241  |t��wt�
 242  |t�dS)N�ntz*Interrupt message not supported on Windows�killpg)�osr�rZr��getpid�getpgidr,r/r�OSError�kill)rB�pidZpgidr&r&r)�_send_interrupt_children�s
 243  
 244  �zKernel._send_interrupt_childrenc
 245  �s��|jsdSddi}z|��Wn&ty6}zddl}d|��tt|�j�t|�d�}WYd}~nd}~ww|jj|d|||d�dS)	zHandle an interrupt request.Nr�rrr�)r��	tracebackZenameZevalueZinterrupt_reply�r\)	r�r6r3r7�format_stackrI�type�__name__r�)rBr�r\r�r��errr7r&r&r)rt�s"����
 246  zKernel.interrupt_requestc�s��|jsdS|�|dd�}t�|�r|IdH}|jj|d|||d�|j�d||�|_|��IdH|j�	d�|j
 247  rG|j
 248  j}|�|j
 249  �|j�	d�|jr\|jj}|�|j
 250  �dSdS)zHandle a shutdown request.Nr��restartZshutdown_replyr8zStopping control ioloopzStopping shell ioloop)r��do_shutdownr0r�r�r��_shutdown_message�_at_shutdownrZr�r�r�r@rrT)rBr�r\r�r�Zcontrol_io_loopZ
 251  shell_io_loopr&r&r)rr�s$�
 252  
 253  �zKernel.shutdown_requestcCs
 254  d|d�S)z]Override in subclasses to do things when the frontend shuts down the
 255          kernel.
 256          r)r�r=r&)rBr=r&r&r)r>�s
 257  zKernel.do_shutdownc�sh�|jsdS|d}|d}|�|�}t�|�r|IdH}t|�}|j�|d|||�}|j�d|�dS)zHandle an is_complete request.Nr�r�Zis_complete_replyr)r��do_is_completer0r�r"r�rZr�)rBr�r\r�r�r�r�r
 258  r&r&r)rs�s�
 259  
 260  
 261  zKernel.is_complete_requestcCsddiS)rr��unknownr&)rBr�r&r&r)rAr�zKernel.do_is_completec�s`�|jsdS|d}|�|�}t�|�r|IdH}t|�}|j�|d|||�}|j�d|�dS)zHandle a debug request.Nr�Zdebug_replyr)r��do_debug_requestr0r�r"r�rZr�)rBr�r\r�r�r�r
 262  r&r&r)rxs�
 263  
 264  
 265  zKernel.debug_requestcCs<zt||��}|durt||�WS|WStyYdSw)zGet the process metric value.Nr)r��
 266  BaseException)rB�processr��	attributeZmetric_valuer&r&r)�get_process_metric_values�zKernel.get_process_metric_valuec	�s��jsdSt��t��d�}t��}|g|jdd��}�fdd�|D��_t	�fdd��j�
 267  �D��|d	<t|��d
 268  �r?d
 269  nd�t	��fdd��j�
 270  �D��|d
 271  <t�
 272  �}|durb|dkrb||d<tjdd�|d<tt�����|d<�j�|d|||�}�j�d|�dS)zHandle a usage request.N)�hostnamer5T��	recursivecs i|]}|j�j�|j|��qSr&)r5r;r3�r'rErUr&r)r**s��z(Kernel.usage_request.<locals>.<dictcomp>csg|]	}��|dd��qS)�cpu_percentN�rGrKrUr&r)�
 273  <listcomp>/���z(Kernel.usage_request.<locals>.<listcomp>Z
 274  kernel_cpuZpssZrsscsg|]	}��|d���qS)�memory_full_inforMrK�Z
 275  mem_info_typerBr&r)rN6rOZ
 276  kernel_memoryrjZhost_cpu_percent)Zlogical�	cpu_countZhost_virtual_memoryZusage_replyr)r��socket�gethostnamer0r1�psutil�Process�childrenr;�sumr7r,rPrLrRr(Zvirtual_memory�_asdictr�rZr�)	rBr�r\r�r��current_processZ
 277  all_processesrLr
 278  r&rQr)ry!s6�
 279  �
 280  ����zKernel.usage_requestc�s�t�r+rr�r&r&r)rCEs�zKernel.do_debug_requestc
 281  	�s��|j�d�z|d}|d}|dd}Wnty*|jjd|dd�Yd	Sw|�|�}|�||||�\}}	tj��tj	��|�
 282  |||�}|jsPd	S|jj|d
 283  ||||	|d�d	S)zHandle an apply request.zBapply_request is deprecated in kernel_base, moving to ipyparallel.r�r�r�r�zGot bad msg: %sTr�NZapply_reply)r�r\r�r�)
 284  rZr�r�r�r��do_applyr~rr�r�r�r�r�)
 285  rBr�r\r�r��bufsr��mdr�Z
 286  result_bufr&r&r)ruLs4��
 287  
 288  
 289  
 290  �zKernel.apply_requestcCr)Z
 291  DEPRECATEDr)rBr�r\r�Zreply_metadatar&r&r)r[l�zKernel.do_applyc�s��|j�d�|d�dd�}t|t�r|g}|s|��|D]
 292  }|j�t|��qtdd�}|j	s4dS|j	j
 293  |d|||d�}|j�d	|�dS)
 294  zabort a specific msg by idzOabort_request is deprecated in kernel_base. It is only part of IPython parallelr��msg_idsNr)r�Zabort_reply)r�r�r\r)rZr�r3r�rIr	r��addr(r�r�r�)rBr�r\r�r_�midr�r
 295  r&r&r)rwts$��
 296  
 297  
 298  �zKernel.abort_requestc�s:�|j�d�|��}|jr|jj|d|||d�dSdS)zClear our namespace.zOclear_request is deprecated in kernel_base. It is only part of IPython parallelZclear_reply)r\r�r�N)rZr��do_clearr�r�)rBr�r�r�r�r&r&r)rv�s���zKernel.clear_requestcCr)zDEPRECATED since 4.0.3rrUr&r&r)rb�r^zKernel.do_clearcCsd|j}|�d|����S)z!prefixed topic for IOPub messagesz	kernel.%s�.)r\�encode)rBZtopic�baser&r&r)r��s
 299  z
 300  Kernel._topiccs�d�_�j�d��jr�j���fdd�}t�j|�}�jrB�j�	�j|��j
 301  dur>t�j
 302  d�r@�j
 303  ��jd�dSdSdS|�dS)NTzAborting queuec�s��j�d�d�_dS)NzFinishing abortF)rZr�r�r&rUr&r)�
 304  stop_aborting�s�
 305  z+Kernel._abort_queues.<locals>.stop_aborting�_schedule_exitri)
 306  r�rZr�rTr�rr��stop_on_error_timeoutr�r�r<r,rg)rBrfZschedule_stop_abortingr&rUr)r	�s
 307  �
 308  zKernel._abort_queuescCs�|jsdS|j�d|dd|dd�|dd�dd�dd	}d
 309  di}|�|�}|�|||�}|�|�|jj||||||d�dS)
 310  z"Send a reply to an aborted requestNzAborting %s: %sr�r�r��_r
 311  rZ_replyr�r�)r�r�r�r\)r�rZr��rsplitr�r�r$r�)rBr�r�r�Z
 312  reply_typer�r]r&r&r)r��s  
 313  
 314  
 315  �zKernel._send_abort_replycCsd}t|��)zPRaise StdinNotImplementedError if active frontend doesn't support
 316          stdin.z?raw_input was called, but this frontend does not support stdin.rr�r&r&r)�
 317  _no_raw_input�szKernel._no_raw_input�cCsP|js	d}t|��|durddl}|jdtdd�|j||jd|�d�dd	�S)
 318  z�Forward getpass to frontends
 319  
 320          Raises
 321          ------
 322          StdinNotImplementedError if active frontend doesn't support stdin.
 323          zFgetpass was called, but this frontend does not support input requests.NrzTThe `stream` parameter of `getpass.getpass` will have no effect when using ipykernelrNrOrcT��password)�_allow_stdinrrQrR�UserWarning�_input_requestr�rg)rB�promptr�r�rQr&r&r)�getpass�s ��zKernel.getpasscCs4|js	d}t|��|jt|�|jd|�d�dd�S)z�Forward raw_input to frontends
 324  
 325          Raises
 326          ------
 327          StdinNotImplementedError if active frontend doesn't support stdin.
 328          zHraw_input was called, but this frontend does not support input requests.rcFrm)rorrqrIr�rg)rBrrr�r&r&r)�	raw_input�s�zKernel.raw_inputc
 329  
 330  Csjtj��tj��	z	|j�tj�Wntjy.}z
 331  |j	tj
 332  kr)WYd}~n�d}~wwq|jdus7J�tt
 333  ||d��}|jj|jd|||d�	z&t�|jgg|jgd�\}}}	|s`|	rq|j�|j�\}}
 334  ||
 335  fdkrqWn!Wnty�d}t|�d�ty�|jjddd	�YnwqLz|
 336  d
 337  d}Wnty�|j�d|�d
 338  }Ynw|dkr�t�|S)NT)rrrnZ
 339  input_requestr8ri)NNzInterrupted by userzInvalid Message:r�r��valuezBad input_reply: %srl�)r~r�r�r�stdin_socketZrecv_multipartr�ZNOBLOCKZZMQError�errno�EAGAINr�r"r(r��select�recvr�r�rZr�r��EOFError)
 340  rBrrr\r�rn�er�ZrlistriZxlistZreplyr�rur&r&r)rq	sN
 341  
 342  ���	�
 343  ���zKernel._input_requestc	Csrt|��}|��D]-}|j�d||�z|tkr|��n|tkr&|��n|�|�Wq	t	j
 344  y6Yq	wdS)z�
 345          Send a signal to all our children
 346  
 347          Like `killpg`, but does not include the current process
 348          (or possible parents).
 349          zSending %s to subprocess %sN)r�_process_childrenrZr�r�	terminater
 350  r4�send_signalrUZ
 351  NoSuchProcess)rB�signumZsig_repr.r&r&r)�_signal_children;s
 352  
 353  
 354  
 355  ���zKernel._signal_childrenc	Csrt��}|jdd�}tjdkr|St��}g}|D]}zt�|j�}Wn	ty,Yqw||kr6|�	|�q|S)z�Retrieve child processes in the kernel's process group
 356  
 357          Avoids:
 358          - including parents and self with killpg
 359          - including all children that may have forked-off a new group
 360          TrIr.)
 361  rUrVrWr0r�Zgetpgrpr2r5r3�append)rBZkernel_processZall_childrenZkernel_pgidZprocess_group_children�childZ
 362  child_pgidr&r&r)r~Os 
 363  �
 364  �zKernel._process_childrenc�s��d}|��s|j�d�dSttfD],}|D]'}|��}|s)|j�d�dS|�|�|j�d||�t�|�IdHqqdS)N)rig���Q��?g�������?g333333�?r
 365  ��
 366  zKernel has no children.z.No more children, continuing shutdown routine.z?Will sleep %s sec before checking for children and retrying. %s)r~rZr�rr
 367  r�r�r)rBZsleepsr��delayrWr&r&r)�%_progressively_terminate_all_childrenfs(�
 368  ���z,Kernel._progressively_terminate_all_childrenc�s��zPz	|��IdHWnty$}z
 369  |j�d|�WYd}~nd}~wwW|jdurD|jrD|jj|j|j|�d�d�|j�	d|j�|j
 370  rP|j
 371  �tj
 372  �dSdS|jdurp|jrp|jj|j|j|�d�d�|j�	d|j�|j
 373  r{|j
 374  �tj
 375  �ww)zCActions taken at shutdown by the kernel, called by python's atexit.Nz,Exception during subprocesses termination %s�shutdownr8r)r�r�rZr�r?r�r�r�r�r�r�r�r�r�)rBr}r&r&r)r@{s8���������zKernel._at_shutdown)Tr+)rc)NNNFNNN)TNF)rr&)NNNNNF)rlN)rlr%)|r;�
 376  __module__�__qualname__�__doc__rr<r;�__annotations__r rErrr�Zprofile_dirr!rTrrHrrVrYr�Zdebug_shell_socketr�r�Ziopub_threadrw�logging�LoggerrZrZint_idrr\r_r`rar�tagZdebug_just_my_codeZ_darwin_app_naprorrer��propertyrhrrZ_poll_intervalrhr?r�rr�r�r�r�r}r�r�r�r�r�r�r�r�rAr�r�r�r�r�r�r�r�r�r�r�r�rgr�r�r�rkr�rlrrmrrnrrqr#rpror6rtrrr>rsrArxrGryrCrur[rwrvrbr�r�r	r�rkrsrtrqr�r~r�r@�
 377  __classcell__r&r&r�r)r:Qs@
 378  
 379  �
 380  
 381  
 382  
 383  ��	��	
 384  ������	&
 385  G*
 386  
 387  �
 388  
 389  
 390  
 391  
 392  �"O��
 393  
 394  
 395  �	
 396  
 397  	
 398  
 399  $ 	#
 400  
 401  
 402  2r:)Dr��
 403  __future__rr��concurrent.futuresr�r0r�r�r0rSr~r�r�typingr�r]rQr�	functoolsrr	rrrrrdr�platformr
 404  Zjupyter_client.sessionrr��ImportErrorrUr�ZIPython.core.errorrr�tornadorZtornado.queuesrrZtraitlets.config.configurablerZtraitlets.traitletsrrrrrrrrrrr Zzmq.eventloop.zmqstreamr!Zipykernel.jsonutilr"�_versionr#Ziostreamr$r9r:r&r&r&r)�<module>sR
 405  
 406  �4
 407