Ë
    :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ej                  rddl
mZ  ej                  d«      Zej                  eej                   f   Zej$                  ej                  eej                   f      Zej$                  ej(                  e      Zej.                  egdf   Zej.                  degdf   Z G d„ d«      Z G d„ d	«      Zdd	gZy)
z?Default classes for Comm and CommManager, for usage in IPython.é    )ÚannotationsN)Ú	ZMQStreamÚCommÚBaseCommc                  ó  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 d	 	 	 	 	 	 	 dd„Z	 	 	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 dd„Z	dd„Z
dd	„Zdd
„Zdd„Zˆ xZS )r   z¶Class for communicating between a Frontend and a Kernel

    Must be subclassed with a publish_msg method implementation which
    sends comm messages through the iopub channel.
    c                ó�  •— t        ‰| �  di |¤Ž |r|nt        j                  «       j                  | _        || _        || _        || _        |r|nd| j
                  › �j                  d«      | _
        |	r|	ni | _        |
r|
ni | _        d | _        d | _        d| _        | j                  r| j!                  |||¬«       y d| _        y )Nzcomm-ÚasciiT©ÚdataÚmetadataÚbuffersF© )ÚsuperÚ__init__ÚuuidÚuuid4ÚhexÚcomm_idÚprimaryÚtarget_nameÚtarget_moduleÚencodeÚtopicÚ
_open_dataÚ_close_dataÚ_msg_callbackÚ_close_callbackÚ_closedÚopen)Úselfr   r   r   r   r   r   r   r   r   r   ÚkwargsÚ	__class__s               €ú_/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/comm/base_comm.pyr   zBaseComm.__init__!   s²   ø€ ô 	‰ÑÑ"˜6Ò"á")‘w¬t¯z©z«|×/?Ñ/?ˆŒØˆŒØ&ˆÔØ*ˆÔÙ#‘U¨E°$·,±,°Ð*@×)HÑ)HÈÓ)QˆŒ
á(2™*¸ˆŒÙ*5™;¸2ˆÔà26ˆÔØ48ˆÔàˆŒà�<Š<à�I‰I˜4¨(¸GˆIÕDà ˆD�Ló    c                ó   — d}t        |«      ‚)Nz*publish_msg Comm method is not implemented)ÚNotImplementedError)r    Úmsg_typer   r   r   ÚkeysÚmsgs          r#   Úpublish_msgzBaseComm.publish_msgE   s   € ð ;ˆÜ! #Ó&Ð&r$   c                ó„   — t        j                  t        «      5  | j                  d¬«       ddd«       y# 1 sw Y   yxY w)ztrigger close on gcT)ÚdeletingN)Ú
contextlibÚsuppressÚ	ExceptionÚclose©r    s    r#   Ú__del__zBaseComm.__del__P   s,   € ä× Ñ ¤Õ+ð �J‰J ˆJÔ%÷ ,×+Ñ+ús   š6¶?c                ó,  — |€| j                   }t        j                  «       }|€d}t        |«      ‚|j	                  | «       	 | j                  d|||| j                  | j                  ¬«       d| _        y# t        $ r |j                  | «       ‚ w xY w)z+Open the frontend-side version of this commNz.Comms cannot be opened without a comm_manager.Ú	comm_open)r   r   r   r   r   F)r   ÚcommÚget_comm_managerÚRuntimeErrorÚregister_commr*   r   r   r   r/   Úunregister_comm)r    r   r   r   Úcomm_managerr)   s         r#   r   zBaseComm.openY   s£   € ð
 ˆ<Ø—?‘?ˆDÜ×,Ñ,Ó.ˆØÐØBˆCÜ˜sÓ#Ð#à×"Ñ" 4Ô(ð	Ø×ÑØØØ!ØØ ×,Ñ,Ø"×0Ñ0ð ô ð !ˆD�LøÜò 	Ø×(Ñ(¨Ô.Øð	ús   Á2A7 Á7Bc                ó¾   — | j                   ryd| _         |€| j                  }| j                  d|||¬«       |s$t        j                  «       j                  | «       yy)z,Close the frontend-side version of this commNTÚ
comm_closer
   )r   r   r*   r5   r6   r9   )r    r   r   r   r,   s        r#   r0   zBaseComm.closet   se   € ð �<Š<àØˆŒØˆ<Ø×#Ñ#ˆDØ×ÑØØØØð	 	ô 	
ñ ä×!Ñ!Ó#×3Ñ3°DÕ9ð r$   c                ó.   — | j                  d|||¬«       y)z8Send a message to the frontend-side version of this commÚcomm_msgr
   N)r*   )r    r   r   r   s       r#   ÚsendzBaseComm.sendŒ   s#   € ð 	×ÑØØØØð	 	õ 	
r$   c                ó   — || _         y)z©Register a callback for comm_close

        Will be called with the `data` of the close message.

        Call `on_close(None)` to disable an existing callback.
        N)r   ©r    Úcallbacks     r#   Úon_closezBaseComm.on_close™   s   € ð  (ˆÕr$   c                ó   — || _         y)z©Register a callback for comm_msg

        Will be called with the `data` of any comm_msg messages.

        Call `on_msg(None)` to disable an existing callback.
        N)r   rA   s     r#   Úon_msgzBaseComm.on_msg¢   s   € ð &ˆÕr$   c                ó‚   — t         j                  d| j                  |«       | j                  r| j                  |«       yy)zHandle a comm_close messagezhandle_close[%s](%s)N)ÚloggerÚdebugr   r   )r    r)   s     r#   Úhandle_closezBaseComm.handle_close­   s3   € ä�‰Ð+¨T¯\©\¸3Ô?Ø×ÒØ× Ñ  Õ%ð  r$   c                ó  — t         j                  d| j                  |«       | j                  rZddlm}  |«       }|r|j                  j                  d«       | j                  |«       |r|j                  j                  d«       yyy)zHandle a comm_msg messagezhandle_msg[%s](%s)r   )Úget_ipythonÚpre_executeÚpost_executeN)rG   rH   r   r   ÚIPythonrK   ÚeventsÚtrigger)r    r)   rK   Úshells       r#   Ú
handle_msgzBaseComm.handle_msg³   sl   € ä�‰Ð)¨4¯<©<¸Ô=Ø×ÒÝ+á“MˆEÙØ—‘×$Ñ$ ]Ô3Ø×Ñ˜sÔ#ÙØ—‘×$Ñ$ ^Õ4ð ð r$   )
r5   NNNNTNNNN)r   Ústrr   Ú	MaybeDictr   rT   r   ÚBuffersTyper   ú
str | Noner   Úboolr   rV   r   zbytes | Noner   rT   r   rT   r!   út.AnyÚreturnÚNone)NNN)r'   rS   r   rT   r   rT   r   rU   r(   rX   rY   rZ   ©rY   rZ   )r   rT   r   rT   r   rU   rY   rZ   )NNNF)
r   rT   r   rT   r   rU   r,   rW   rY   rZ   )rB   zCommCallback | NonerY   rZ   )r)   ÚMessageTyperY   rZ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   r2   r   r0   r?   rC   rE   rI   rR   Ú__classcell__)r"   s   @r#   r   r      s¢  ø„ ñð "ØØ"Ø#Ø"ØØ$(Ø"Ø $Ø!%ð"!àð"!ð ð"!ð ð	"!ð
 ð"!ð ð"!ð ð"!ð "ð"!ð ð"!ð ð"!ð ð"!ð ð"!ð 
õ"!ðN Ø"Ø#ð	'àð	'ð ð	'ð ð		'ð
 ð	'ð ð	'ð 
ó	'ó&ð Z^ðØðØ09ðØKVðà	óð: Ø"Ø#Øð:àð:ð ð:ð ð	:ð
 ð:ð 
ó:ð2 Z^ð	
Øð	
Ø09ð	
ØKVð	
à	ó	
ó(ó&ó&÷5r$   c                  óX   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zy)ÚCommManagerzDDefault CommManager singleton implementation for Comms in the Kernelc                ó    — i | _         i | _        y )N)ÚcommsÚtargetsr1   s    r#   r   zCommManager.__init__Æ   s   € Ø*,ˆŒ
Ø68ˆ�r$   c                óT  — t        |t        «      rO|j                  dd«      }t        |«      dk(  r!|\  }}t	        ||g¬«      }	 t        ||«      }nt	        |d   «      }t        j                  t        |«      | j                  |<   y# t        $ r}d|› �}t        |«      |‚d}~ww xY w)a  Register a callable f for a given target name

        f will be called with two arguments when a comm_open message is received with `target`:

        - the Comm instance
        - the `comm_open` message itself.

        f can be a Python callable or an import string for one.
        Ú.é   é   )ÚfromlistzNo module named Nr   )Ú
isinstancerS   ÚrsplitÚlenÚ
__import__ÚgetattrÚAttributeErrorÚImportErrorÚtÚcastÚCommTargetCallbackrf   )	r    r   ÚfÚpartsÚpackageÚobjÚmoduleÚeÚ	error_msgs	            r#   Úregister_targetzCommManager.register_targetÊ   s¦   € ô �aœÔØ—H‘H˜S !Ó$ˆEÜ�5‹z˜QŠà$‘�˜Ü# G°s°eÔ<�ð8Ü ¨Ó,‘Aô ˜u Q™xÓ(�ä$%§F¡FÔ+=¸qÓ$Aˆ�‰�[Ò!øô &ò 8Ø"2°3°%Ð 8�IÜ% iÓ0°aÐ7ûð8ús   ÁB Â	B'ÂB"Â"B'c                ó8   — | j                   j                  |«      S )z5Unregister a callable registered with register_target)rf   Úpop)r    r   rv   s      r#   Úunregister_targetzCommManager.unregister_targetå   s   € à�|‰|×Ñ Ó,Ð,r$   c                ó<   — |j                   }|| j                  |<   |S )zRegister a new comm)r   re   )r    r5   r   s      r#   r8   zCommManager.register_commé   s   € à—,‘,ˆØ"ˆ�
‰
�7ÑØˆr$   c                óN   — | j                   j                  |j                  «      }y)z,Unregister a comm, and close its counterpartN)re   r   r   )r    r5   s     r#   r9   zCommManager.unregister_commï   s   € ð �z‰z�~‰~˜dŸl™lÓ+‰r$   c                ó   — 	 | j                   |   S # t        $ rs t        j                  d|«       t        j	                  t
        j                  «      r7t        j                  dt        | j                   j                  «       «      «       Y yw xY w)z½Get a comm with a particular id

        Returns the comm if found, otherwise None.

        This will not raise an error,
        it will log messages if the comm cannot be found.
        zNo such comm: %szCurrent comms: %sN)
re   ÚKeyErrorrG   ÚwarningÚisEnabledForÚloggingÚDEBUGrH   Úlistr(   )r    r   s     r#   Úget_commzCommManager.get_commô   sh   € ð	Ø—:‘:˜gÑ&Ð&øÜò 	Ü�N‰NÐ-¨wÔ7Ü×"Ñ"¤7§=¡=Ô1ä—‘Ð0´$°t·z±z·±Ó7HÓ2IÔJÙð	ús   ‚ ‘A9BÂBc                ó¤  — ddl m} |d   }|d   }|d   }| j                  j                  |d«      } ||d|¬«      }	| j	                  |	«       |€t
        j                  d	|«       n	  ||	|«       y	  |	j                  «        y# t        $ r t
        j                  d
|d¬«       Y Œ6w xY w# t        $ r t
        j                  dd¬«       Y yw xY w)zHandler for comm_open messagesr   )Úcreate_commÚcontentr   r   NF)r   r   r   z"No such comm target registered: %sz&Exception opening comm with target: %sT©Úexc_infozqCould not close comm during `comm_open` failure
                clean-up.  The comm may not have been opened yet.)	r5   rŒ   rf   Úgetr8   rG   Úerrorr/   r0   )
r    ÚstreamÚidentr)   rŒ   r�   r   r   rv   r5   s
             r#   r4   zCommManager.comm_open  sâ   € å$à�i‘.ˆØ˜)Ñ$ˆØ˜mÑ,ˆØ�L‰L×Ñ˜[¨$Ó/ˆÙØØØ#ô
ˆð
 	×Ñ˜4Ô Øˆ9Ü�L‰LÐ=¸{ÕKðcÙ�$˜”Øð
	ØˆD�J‰J�Løô ò cÜ—‘ÐEÀ{Ð]a�Öbðcûô ò 	Ü�L‰LðEàð ö ð	ús$   Á(	B Á3B, Â!B)Â(B)Â, CÃCc                ó´   — |d   }|d   }| j                  |«      }|€y	  |j                  |«       y# t        $ r t        j	                  d|d¬«       Y yw xY w)zHandler for comm_msg messagesr�   r   NzException in comm_msg for %sTrŽ   )rŠ   rR   r/   rG   r‘   ©r    r’   r“   r)   r�   r   r5   s          r#   r>   zCommManager.comm_msg(  sc   € à�i‘.ˆØ˜)Ñ$ˆØ�}‰}˜WÓ%ˆØˆ<Øð	QØˆD�O‰O˜CÕ øÜò 	QÜ�L‰LÐ7¸È4ˆLÖPð	Qús    3 ³!AÁAc                óö   — |d   }|d   }| j                  |«      }|€yd| j                  |   _        | j                  |= 	  |j                  |«       y# t        $ r t
        j                  d|d¬«       Y yw xY w)zHandler for comm_close messagesr�   r   NTzException in comm_close for %srŽ   )rŠ   re   r   rI   r/   rG   r‘   r•   s          r#   r<   zCommManager.comm_close5  s‚   € à�i‘.ˆØ˜)Ñ$ˆØ�}‰}˜WÓ%ˆØˆ<Øà&*ˆ�
‰
�7ÑÔ#Ø�J‰J�wÐð	SØˆD×Ñ˜cÕ"øÜò 	SÜ�L‰LÐ9¸7ÈTˆLÖRð	Sús   ÁA Á!A8Á7A8Nr[   )r   rS   rv   zCommTargetCallback | strrY   rZ   )r   rS   rv   ru   rY   ru   )r5   r   rY   rS   )r5   r   rY   rZ   )r   rS   rY   zBaseComm | None)r’   r   r“   rS   r)   r\   rY   rZ   )r]   r^   r_   r`   r   r}   r€   r8   r9   rŠ   r4   r>   r<   r   r$   r#   rc   rc   Á   s6   „ ÙNó9óBó6-óó,ó
ó&óBQôSr$   rc   )r`   Ú
__future__r   r-   r‡   Útypingrs   r   r5   ÚTYPE_CHECKINGÚzmq.eventloop.zmqstreamr   Ú	getLoggerrG   ÚDictrS   ÚAnyr\   ÚOptionalrT   ÚListÚbytesrU   ÚCallableÚCommCallbackru   r   rc   Ú__all__r   r$   r#   Ú<module>r¤      sÙ   ðÙ Eõ #ã Û Û Û ã à‡?‚?Ý1à	ˆ×	Ñ	˜6Ó	"€à�f‰f�S˜!Ÿ%™%�ZÑ €Ø�J‰J�q—v‘v˜c 1§5¡5˜jÑ)Ñ*€	Ø�j‰j˜Ÿ™ ™Ñ'€Ø�z‰z˜;˜-¨Ð-Ñ.€Ø—Z‘Z ¨[Ð 9¸4Ð ?Ñ@Ð ÷d5ñ d5÷NBSñ BSðJ �}Ð
%�r$   