
    f-8              	          d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 de
dedee
ef   fd	Z ej                  d
ej                        Z ej                  dej                        Z ej                  dej"                  ej                  z        Zde
dede
fdZ G d d      Zde
dee   fdZ G d de      Z G d de      Ze	d   fdee
ef   dedee
ef   fdZ e        e       dZy)z'Adapters for Jupyter msg spec versions.    N)AnyDictListTuple   )protocol_version_infocode
cursor_posreturnc                 p    | sy| j                  d      D ]  }t        |      }||kD  r||z  } ||fS  |fS )zTurn a multiline code block and cursor position into a single line
    and new cursor position.

    For adapting ``complete_`` and ``object_info_request``.
    ) r   T)
splitlineslen)r	   r
   linens       Q/var/www/cvtools/html/venv/lib/python3.12/site-packages/jupyter_client/adapter.pycode_to_liner      sV     % I>!OJ     z\([^\(\)]+\)z	\([^\(]*$z[a-z_][0-9a-z._]*c                     t        | |      \  }}|}t        j                  d|      }||k7  r|}t        j                  d|      }||k7  rt        j                  d|      }t        j                  |      }|r|d   S y)ztReimplement token-finding logic from IPython 2.x javascript

    for adapting object_info_request from v5 to v4
    r   )r   _match_bracketsub_end_bracket_identifierfindall)r	   r
   r   _oldlinematchess         r   extract_oname_v4r   !   s     4,GD!Gb$'D
T/!!"d+ T/
 B%D!!$'Gr{r   c                       e Zd ZU dZi Zeeef   ed<   deeef   deeef   fdZ	deeef   deeef   fdZ
deeef   deeef   fdZdeeef   deeef   fdZdeeef   deeef   fd	Zy
)AdapterzaBase class for adapting messages

    Override message_type(msg) methods to create adapters.
    msg_type_mapmsgr   c                     |S )Update the header. selfr#   s     r   update_headerzAdapter.update_header@       
r   c                     |S )zUpdate the metadata.r&   r'   s     r   update_metadatazAdapter.update_metadataD   r*   r   c                 d    |d   }|d   }|| j                   v r| j                   |   x|d<   |d<   |S )zUpdate the message type.headermsg_type)r"   )r(   r#   r.   r/   s       r   update_msg_typezAdapter.update_msg_typeH   sF    X*%t(((373D3DX3NNC
OfZ0
r   c                     |S )zeThis will be called *instead of* the regular handler

        on any reply with status != ok
        r&   r'   s     r   handle_reply_status_errorz!Adapter.handle_reply_status_errorP   s	    
 
r   c                     | j                  |      }| j                  |      }| j                  |      }|d   }t        | |d   d       }||S |d   j	                  dd       dv r| j                  |      S  ||      S )Nr.   r/   contentstatus>   erroraborted)r)   r,   r0   getattrgetr2   )r(   r#   r.   handlers       r   __call__zAdapter.__call__W   s      %""3'""3'X$z 2D9?J y>h-1EE11#66s|r   N)__name__
__module____qualname____doc__r"   r   str__annotations__r   r)   r,   r0   r2   r;   r&   r   r   r!   r!   8   s    
 $&L$sCx.%c3h DcN 4S> d38n 4S> d38n T#s(^ S#X DcN tCH~ r   r!   versionc                     g }| j                  d      D ]  }	 |j                  t        |              |S # t        $ r Y -w xY w)zRconvert a version string to a list of ints

    non-int segments are excluded
    .)splitappendint
ValueError)rB   vparts      r   _version_str_to_listrK   g   sQ    
 	Ac" 	HHSY
 H  		s   6	AAc                      e Zd ZdZdZddddddZd	eeef   d
eeef   fdZ	d	eeef   d
eeef   fdZ
d	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZy)V5toV4zAdapt msg protocol v5 to v44.1pyoutpyinpyerrobject_info_requestobject_info_reply)execute_resultexecute_inputr6   inspect_requestinspect_replyr#   r   c                 Z    |d   j                  dd       |d   j                  dd       |S )r%   r.   rB   Nparent_headerpopr'   s     r   r)   zV5toV4.update_header   s0    H)T*O  D1
r   c                 \   i }|d   }dD ]  }||v st        ||         ||<    |j                  dd      dk(  rd|v rt        |d         |d<   |j                  di       }|j                  d	d      }|j                  d
|       d|v r|j                  dt        |d                ||d<   |S )Handle a kernel info reply.r4   )language_versionprotocol_versionimplementationr   ipythonimplementation_versionipython_versionlanguage_infonamelanguagerB   r^   )rK   r9   
setdefault)r(   r#   v4cr4   keyrd   rf   s          r   kernel_info_replyzV5toV4.kernel_info_reply   s    i.; 	>Cg~/=C	> ;;',	9>VZa>a%9'BZ:[%\C!"OR8 $$VR0z8,%NN-/CMR[D\/]^I
r   c                 4    |d   }|j                  dg        |S )Handle an execute request.r4   user_variablesrg   r(   r#   r4   s      r   execute_requestzV5toV4.execute_request   s!    i.+R0
r   c                 4    |d   }|j                  di        |S )Handle an execute reply.r4   rm   rn   ro   s      r   execute_replyzV5toV4.execute_reply   s!    i.+R0
r   c                 x    |d   }|d   }|d   }t        ||      \  }}i x}|d<   d|d<   ||d<   d|d<   ||d<   |S )	Handle a complete request.r4   r	   r
   r   textr   Nblock)r   )r(   r#   r4   r	   r
   r   new_contents          r   complete_requestzV5toV4.complete_request   sj    i.v\*
'j9j'))c)n F"F#G$.L!
r   c                     |d   }|j                  d      }|j                  d      }||z
  }|d   d   d| |d<   |j                  dd       |S )	Handle a complete reply.r4   cursor_start
cursor_endr   r   Nmatched_textmetadatarZ   )r(   r#   r4   r|   r}   	match_lens         r   complete_replyzV5toV4.complete_reply   s_    i.{{>2[[.
-	"))"4Q"7
"CJ%
r   c                 ~    |d   }|d   }|d   }t        ||      \  }}i x}|d<   t        ||      |d<   |d   |d<   |S )zHandle an object info request.r4   r	   r
   onamedetail_level)r   r   )r(   r#   r4   r	   r
   r   r   rx   s           r   rR   zV5toV4.object_info_request   sa    i.v\*
tZ0a'))c)n/jAG&-n&=N#
r   c                     ddd|d<   |S )1inspect_reply can't be easily backward compatibleFunknown)foundr   r4   r&   r'   s     r   rS   zV5toV4.object_info_reply   s    #(9=I
r   c                 8    |d   }|j                  d      |d<   |S )Handle a stream message.r4   rv   datarZ   ro   s      r   streamzV5toV4.stream   "    i.!++f-
r   c                     |d   }|j                  dd       |d   }d|v r	 t        j                  |d         |d<   |S |S # t        $ r Y |S w xY w)zHandle a display data message.r4   sourcedisplayr   application/json)rg   jsondumps	Exceptionr(   r#   r4   r   s       r   display_datazV5toV4.display_data   so    i.8Y/v%+/::d;M6N+O'( 
s
  
   A 	AAc                 0    |d   j                  dd       |S )Handle an input request.r4   passwordNrZ   r'   s     r   input_requestzV5toV4.input_request   s    I:t,
r   N)r<   r=   r>   r?   rB   r"   r   r@   r   r)   rj   rp   rs   ry   r   rR   rS   r   r   r   r&   r   r   rM   rM   u   s   %G "0,Lc3h DcN T#s(^ S#X "4S> d38n c3h DcN DcN tCH~ $sCx. T#s(^ 
tCH~ 
$sCx. 
T#s(^ S#X $sCx. T#s(^ S#X 4S> c3h DcN r   rM   c                      e Zd ZdZdZej                  j                         D  ci c]  \  }}||
 c}}} Zdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fd	Zdee	e
f   dee	e
f   fd
Zdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZyc c}}} w )V4toV5zConvert msg spec V4 to V5z5.0r#   r   c                 X    | j                   |d   d<   |d   r| j                   |d   d<   |S )r%   r.   rB   rY   )rB   r'   s     r   r)   zV4toV5.update_header   s4    #'<<Hi .2llC +
r   c                    |d   }dD ],  }||v sdj                  t        t        ||               ||<   . |j                  dd       |d   j	                  d      rd|v rd	|d
<   |j                  d      |d<   |j                  d      }|j                  di       }|j                  d|       d|v r@dj                  t        t        |j                  d                  }|j                  d|       d|d<   |S )r]   r4   )r_   rc   rD   r_   rN   rf   pythonrc   ra   r`   rb   rd   re   r^   rB   r   banner)joinmapr@   rg   
startswithr[   )r(   r#   r4   ri   rf   rd   r^   s          r   rj   zV4toV5.kernel_info_reply   s   i.: 	@Cg~"xxC(>?	@ 	-u5:))(38IW8T(1G$%07<M0NG,-;;z***?B?  2("xxC=O1P(QR$$Y0@A
r   c                 p    |d   }|j                  dg       }|j                  di       }|D ]  }|||<   	 |S )rl   r4   rm   user_expressions)r[   rg   )r(   r#   r4   rm   r   rI   s         r   rp   zV4toV5.execute_request  sO    i. %5r:"--.@"E 	$A"#Q	$
r   c                 "   |d   }|j                  di       }|j                  di       }|r|j                  |       |j                  dg       D ]=  }|j                  dd      dk(  sd|v sd	|vri |d	<   |j                  d      |d	   d
<   ? |S )rr   r4   r   rm   payloadr   Npagerv   r   
text/plain)rg   r[   updater9   )r(   r#   r4   r   rm   r   s         r   rs   zV4toV5.execute_reply  s    i."--.@"E %5r:##N3 {{9b1 	DG{{8T*f4&G:K(&(GFO07F0C-		D 
r   c                 >    |d   }i x}|d<   |d   |d<   |d   |d<   |S )ru   r4   r   r	   r
   r&   )r(   r#   old_contentrx   s       r   ry   zV4toV5.complete_request0  s<    )n'))c)n)&1F$/$=L!
r   c                     |d   }ddix}|d<   |d   |d<   |d   rt        |d          |d<   nd|d<   d|d<   i |d	<   |S )
r{   r4   r5   okr   r~   r|   Nr}   r   r   )r(   r#   r4   rx   s       r   r   zV4toV5.complete_reply9  ss     i.(0$'77c)n!(!3I>"+.w~/F+G*GK' +/K'$(L!"$J
r   c                 ^    |d   }|d   }i x}|d<   ||d<   t        |      |d<   |d   |d<   |S )zHandle an inspect request.r4   r   r	   r
   r   r   )r(   r#   r4   re   rx   s        r   rV   zV4toV5.inspect_requestK  sO    i.w'))c)n"F$'IL!&-n&=N#
r   c                 `   |d   }ddix}|d<   |d   x}|d<   i x|d<   }i |d<   |rg }dD ]*  }|j                  |d      s|j                  ||           n d	D ]*  }|j                  |d      s|j                  ||           n |s|j                  d
       dj                  |      |d<   |S )r   r4   r5   r   r   r   r   )call_definit_definition
definitionF)call_docstringinit_docstring	docstringz<empty docstring>
r   )r9   rF   r   )r(   r#   r4   rx   r   r   linesri   s           r   rW   zV4toV5.inspect_replyV  s    i.(0$'77c)n'.w'77G$%''Fd"$JED ;;sE*LL. I ;;sE*LL. 01!%5!1D
r   c                 8    |d   }|j                  d      |d<   |S )r   r4   r   rv   rZ   ro   s      r   r   zV4toV5.streamn  r   r   c                     |d   }|j                  dd       |d   }d|v r	 t        j                  |d         |d<   |S |S # t        $ r Y |S w xY w)zHandle display data.r4   r   Nr   r   )r[   r   loadsr   r   s       r   r   zV4toV5.display_datat  sm    i.Hd#v%+/::d;M6N+O'( 
s
  
r   c                 0    |d   j                  dd       |S )r   r4   r   Frn   r'   s     r   r   zV4toV5.input_request  s    I!!*e4
r   N)r<   r=   r>   r?   rB   rM   r"   itemsr   r@   r   r)   rj   rp   rs   ry   r   rV   rW   r   r   r   ).0krI   s   000r   r   r      s   #G &,%8%8%>%>%@AATQAqDALc3h DcN T#s(^ S#X .4S> d38n c3h DcN "DcN tCH~ $sCx. T#s(^ $	4S> 	d38n 	c3h DcN 0$sCx. T#s(^ S#X 4S> c3h DcN _ Bs   D r   r#   
to_versionc                     ddl m} | d   }d|vr
 |       |d<   d|v r!t        |d   j                  d      d         }nd}t        j                  ||fd	      }|| S  ||       S )
aS  Adapt a single message to a target version

    Parameters
    ----------

    msg : dict
        A Jupyter message.
    to_version : int, optional
        The target major version.
        If unspecified, adapt to the current version.

    Returns
    -------

    msg : dict
        A Jupyter message appropriate in the new version.
    r   )utcnowr.   daterB   rD   r      N)sessionr   rG   rE   adaptersr9   )r#   r   r   r.   from_versionadapters         r   adaptr     sz    $  ]FVvF6),2237:; llL*5t<G
3<r   ))   r   )r   r   )r?   r   retypingr   r   r   r   _versionr   r@   rG   r   compileUNICODEr   r   Ir   r   r!   rK   rM   r   r   r   r&   r   r   <module>r      s/   -  	 ) ) +s  c3h " ORZZ8rzz,

3bjj-rttbjj/@A3 C C ., ,^# $s) vW vrXW Xv 2Gq1I tCH~ 3 dSVX[S[n H HHr   