Ë
    Ûvžj4%  ã                   óŽ  — d 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
 ddlZddlmZ ddlmZmZmZmZ ddlmZmZmZ 	 dd	lmZ ddlZd
Zdadada ej<                  de«       d„ Z  G d„ dejB                  «      Z"g d¢Z#d„ Z$d„ Z%d„ 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„ Z0d „ Z1d!„ Z2y#  dZY ŒpxY w)%zCommunication with the vieweré    N)ÚPath)Úconnect)ÚTimer)Úis_topods_shapeÚis_toploc_locationÚ	serializeÚ	loc_to_tqé   )Ú	get_stateÚupdate_stateÚget_config_file)Úget_ipythonTFzws://127.0.0.1éc  Úoncec                 óV   — dd„}|t         _        t        j                  | t        «       y )Nc                 ó&   — |j                   ›d| ›d�S )Nz: Ú
)Ú__name__)ÚmessageÚcategoryÚfilenameÚlinenoÚfileÚlines         úa/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/ocp_vscode/comms.pyÚwarning_on_one_linez&warn_once.<locals>.warning_on_one_line,   s   € Ø%×.Ó.²Ð8Ð8ó    )NN)ÚwarningsÚformatwarningÚwarnÚUserWarning)r   r   s     r   Ú	warn_oncer"   +   s   € ó9ð 1„HÔÜ‡M�M�'œ;Õ'r   c                   ó,   — e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
ÚMessageTypezMessage typesr
   é   é   é   é   é   é   N)r   Ú
__module__Ú__qualname__Ú__doc__ÚDATAÚCOMMANDÚUPDATESÚLISTENÚBACKENDÚBACKEND_RESPONSEÚCONFIG© r   r   r$   r$   8   s)   „ Ùà€DØ€GØ€GØ€FØ€GØÐØ�Fr   r$   )Ú	send_dataÚsend_commandÚsend_responseÚset_portÚget_portÚlistenerÚ	is_pytestc                  óF   — t         j                  j                  d«      dk(  S )NÚOCP_VSCODE_PYTESTÚ1)ÚosÚenvironÚgetr5   r   r   r<   r<   O   s   € Ü�:‰:�>‰>Ð-Ó.°#Ñ5Ð5r   c                 óì   — t        j                   t         j                  t         j                  «      }|j                  d«       |j	                  t        «       | f«      dk(  }|r|j                  «        |S )z#Check whether the port is listeningr
   r   )ÚsocketÚAF_INETÚSOCK_STREAMÚ
settimeoutÚ
connect_exÚget_hostÚclose)ÚportÚsÚresults      r   Ú
port_checkrN   S   sR   € ä�‰”f—n‘n¤f×&8Ñ&8Ó9€AØ‡L�L�„OØ�\‰\œ8›: tÐ,Ó-°Ñ2€FÙØ	�‰Œ	Ø€Mr   c                 ó  — t        | «      r-t        j                  t        | «      «      j	                  d«      S t        | «      rt        | «      S t        | t        j                  «      r| j                  S t        dt        | «      › d�«      ‚)zDefault JSON serializer.úutf-8zObject of type z is not JSON serializable)r   Úbase64Ú	b64encoder   Údecoder   r	   Ú
isinstanceÚenumÚEnumÚvalueÚ	TypeErrorÚtype)Úobjs    r   Údefaultr[   ]   sm   € ä�sÔÜ×Ñ¤	¨#£Ó/×6Ñ6°wÓ?Ð?Ü	˜CÔ	 Ü˜‹~ÐÜ	�CœŸ™Ô	#Ø�y‰yÐä˜/¬$¨s«)¨Ð4MÐNÓOÐOr   c                  óX   — t        «       ryt        st        «        t        «        t        S )zGet the portr   )r<   Ú	INIT_DONEÚfind_and_set_portÚset_connection_fileÚCMD_PORTr5   r   r   r:   r:   i   s   € ä„{ØåÜÔÜÔÜ€Or   c                  ó   — t         dd S )zGet the hostr(   N)ÚCMD_URLr5   r   r   rI   rI   t   s   € ä�1�2ˆ;Ðr   c                 ó   — | a d|› �aday)zSet the portzws://TN)r`   rb   r]   )rK   Úhosts     r   r9   r9   y   s   € ð €HØ�d�Vˆn€GØ�Ir   c           
      óþ  — |€ t         st        «        t        «        t        }	 t	        |ddd«      5  t        j                  | t        ¬«      }|t        j                  k(  rd|z   }n||t        j                  k(  rd|z   }nc|t        j                  k(  rd|z   }nJ|t        j                  k(  rd	|z   }n1|t        j                  k(  rd
|z   }n|t        j                  k(  rd|z   }ddd«       t	        |dd|j                  › d�d«      5  	 t!        t"        › d|› �d¬«      5 }|j%                  «       t	        |ddt'        |«      dz  dz  d›d�d«      5  d}|t        j                  k(  r<t)        | t*        «      r| d   dk(  s$	 t-        j.                  |j1                  «       «      }ddd«       ddd«       ddd«       S # 1 sw Y   ŒÝxY w# t2        $ r}t5        |«       Y d}~Œ?d}~ww xY w# 1 sw Y   ŒHxY w# 1 sw Y   ŒLxY w# t2        $ r2}t7        dt9        |«      z   «       ddddddœcY d}~cddd«       S d}~ww xY w# 1 sw Y   S xY w# t2        $ r$}t5        d|› d�«       t5        |«       Y d}~yd}~ww xY w)úSend data to the viewerNÚ z
json dumpsr
   )r[   s   C:s   D:s   L:s   B:s   R:s   S:zwebsocket connect (Ú)Ú:gš™™™™™©?)Úclose_timeoutzwebsocket send i   z.3fz MBrY   Ú
screenshotz The viewer doesn't seem to run: ÚnoneF)r
   éê   é8   )é{   é-   r)   )ÚcollapseÚ_splashÚdefault_facecolorÚdefault_thickedgecolorÚdefault_vertexcolorz!Cannot connect to viewer on port z,, is it running and the right port provided?)r]   r^   r_   r`   r   ÚorjsonÚdumpsr[   r$   r/   r.   r1   r2   r3   r4   Únamer   rb   ÚsendÚlenrT   ÚdictÚjsonÚloadsÚrecvÚ	ExceptionÚprintr"   Ústr)ÚdataÚmessage_typerK   ÚtimeitÚjÚwsrM   Úexs           r   Ú_sendrˆ   �   s[  € ð €|ÝÜÔÜÔ!Üˆð3Ü�6˜2˜|¨QÕ/Ü—‘˜T¬7Ô3ˆAØœ{×2Ñ2Ò2Ø˜A‘I‘Ø¤×!1Ñ!1Ò1Ø˜A‘I‘Ø¤×!3Ñ!3Ò3Ø˜A‘I‘Ø¤×!4Ñ!4Ò4Ø˜A‘I‘Ø¤×!=Ñ!=Ò=Ø˜A‘I‘Ø¤×!3Ñ!3Ò3Ø˜A‘I�÷ 0ô �6˜2Ð!4°\×5FÑ5FÐ4GÀqÐIÈ1ÕMðÜ¤˜y¨¨$¨Ð0ÀÕEÈØ—G‘G˜A”JäØ  o´c¸!³f¸T±kÀ$Ñ6FÀsÐ5KÈ3Ð$OÐQRõð "&˜Ø'¬;×+>Ñ+>Ò>Ü& t¬TÔ2°t¸F±|À|Ò7Sð*Ü)-¯©°B·G±G³IÓ)> ÷÷ F÷ Nð8 ˆ÷W 0Ð/ûô: $-ò *Ü % b§	¡	ûð*ú÷ð ú÷ FÐEûô ò 	ÜÐ<¼sÀ2»wÑFÔGð !'Ø$Ø)5Ø.:Ø+7ñô ÷) NÑMûð"	ú÷# Nð8 ˆûäò ÜØ/°¨vÐ5aÐbô	
ô 	ˆbŒ	ÜûðúsÑ   ¤I ²B1F?Ã#$I ÄIÄ	HÄ4G8Å.G,Æ#GÆ%G8Æ-HÆ5	I Æ?GÇI Ç	G)	ÇG$	ÇG,Ç$G)	Ç)G,Ç,G5Ç1G8Ç8H	Ç=HÈ	H?ÈH:È+H?È,IÈ0	I È:H?È?IÉIÉI ÉI É	I<ÉI7É7I<c                 ó:   — t        | t        j                  ||«      S ©rf   )rˆ   r$   r.   ©r‚   rK   r„   s      r   r6   r6   À   s   € ä�”{×'Ñ'¨¨vÓ6Ð6r   c                 ó:   — t        | t        j                  ||«      S )zSend config to the viewer)rˆ   r$   r4   )ÚconfigrK   Útitler„   s       r   Úsend_configr�   Å   s   € ä�œ×+Ñ+¨T°6Ó:Ð:r   c                 óp   — t        | t        j                  ||«      }|j                  d«      dk(  r|d   S |S )zSend command to the viewerÚcommandÚstatusÚtext)rˆ   r$   r/   rB   )r‚   rK   rŽ   r„   rM   s        r   r7   r7   Ê   s8   € ä�4œ×,Ñ,¨d°FÓ;€FØ‡z�z�)Ó Ò(Ø�f‰~Ðàˆr   c                 ó:   — t        | t        j                  ||«      S rŠ   )rˆ   r$   r2   r‹   s      r   Úsend_backendr•   Ó   s   € ä�”{×*Ñ*¨D°&Ó9Ð9r   c                 ó:   — t        | t        j                  ||«      S rŠ   )rˆ   r$   r3   r‹   s      r   r8   r8   Ø   s   € ä�”{×3Ñ3°T¸6ÓBÐBr   c                 ó   ‡ — ˆ fd„}|S )zListen for data from the viewerc                  ó8  •— i } t        t        › dt        › �d¬«      5 }|j                  d«       	 	 |j	                  «       }|€Œt        j                  |«      }d|j                  «       v r ‰|d   t        j                  «       |j                  d«      dk(  rJ|d   }i }|j                  «       D ]  \  }}|| v r	| |   |k(  rŒ|||<   Œ |}  ‰|t        j                  «       Œ´# t        $ r}t        |«       Y d }~nd }~ww xY w	 d d d «       y # 1 sw Y   y xY w)	Nri   i   )Úmax_sizes
   L:registerÚmodelr‘   r’   r“   )r   rb   r`   ry   r~   r|   r}   Úkeysr$   r.   rB   Úitemsr0   r   r€   )	Úlast_configÚ	websocketr   ÚchangesÚnew_changesÚkÚvr‡   Úcallbacks	           €r   Ú_listenzlistener.<locals>._listené   s  ø€ ØˆÜœ�y ¤( Ð,°uÕ=ÀØ�N‰N˜=Ô)ØðØ'Ÿn™nÓ.�GØ�Ø ä"Ÿj™j¨Ó1�GØ '§,¡,£.Ñ0Ù  ¨Ñ!1´;×3CÑ3CÔDà—{‘{ 9Ó-°Ò9Ø")¨&¡/˜Ø&(˜Ø$+§M¡M¦O™D˜A˜qØ  KÑ/°KÀ±NÀaÒ4GØ (Ø-.˜K¨šNð %4ð '.˜Ù  ¬k×.AÑ.AÔBð% øô( !ò Ü˜"”IÜûðúà÷1 >×=Ñ=úsA   žD²C%ÁDÁBC%Ã$DÃ%	DÃ.C>Ã9DÃ>DÄDÄDr5   )r£   r¤   s   ` r   r;   r;   æ   s   ø€ ôð8 €Nr   c                  ó  — d„ } t        t        j                  j                  dd«      «      }|dkD  rt	        d|› d�«       n5 | «       }|�t	        d|› d	�«       nt        d
«      rd
}t	        d|› d�«       t        |«       y)z Set the port and connection filec            	      óz  — d } t        j                  «       }t        «       j                  «       }|D ]  \  }}t	        t        |«      «      s&t        d|› d�«       t        t        |«      d d «       Œ@|j                  dg «      }|D ])  }|j                  t        |«      «      sŒt        |«      }  Œ Œ� | €€|D � �cg c]  \  } }t	        t        | «      «      sŒ| ‘Œ }} }t        |«      dk(  r|d   } | S t        |«      dkD  rt        ddj                  |«      › d�«      ‚t        d	t        «       › �«        S c c}} w )
Nz#Found stale configuration for port z, deleting it.Úrootsr
   r   z
Multiple ports found (z, z–) and the file is outside of any
workspace folder of this VS Code instance:
The right viewer cannot be auto detected, use set_port(port) in your code.z#Could not find port in config file )r   Úcwdr   rœ   rN   Úintr€   r   rB   Úis_relative_torz   ÚRuntimeErrorÚjoinr   )	rK   Úcurrent_pathÚstatesÚpÚstater§   ÚrootÚ_Úportss	            r   Ú	find_portz$find_and_set_port.<locals>.find_port  s7  € ØˆÜ—x‘x“zˆÜ“×"Ñ"Ó$ˆÛ‰HˆAˆuÜœc !›fÔ%ÜÐ;¸A¸3¸nÐMÔNÜœS ›V T¨4Ô0Øà—I‘I˜g rÓ*ˆEÛ�Ø×.Ñ.¬t°D«zÕ:Ü˜q›6�DÙñ ð ð ˆ<Ù)/ÔI©™g˜d A´:¼cÀ$»iÕ3H’T¨ˆEÑIÜ�5‹z˜QŠØ˜Q‘x�ð ˆô �U“˜a’Ü"Ø.¨t¯y©y¸Ó/?Ð.@ð Aað aóð ô Ð;¼OÓ<MÐ;NÐOÔPàˆùó Js   Â:D7ÃD7ÚOCP_PORTÚ0r   zUsing predefined port z) taken from environment variable OCP_PORTNzUsing port z taken from config filer   zDefault port z is open, using it)r©   r@   rA   rB   r€   rN   r9   )r´   rK   s     r   r^   r^     s�   € òô< Œr�z‰z�~‰~˜j¨#Ó.Ó/€Dàˆa‚xÜÐ& t fÐ,UÐVÕWá‹{ˆØÐÜ�K ˜vÐ%<Ð=Õ>Ü˜ÔØˆDÜ�M $ Ð'9Ð:Ô;äˆT…Nr   c                  ó�  — t         r´t        t        «       d«      rŸt        «       j                  } | j                  d   d   }t        |dd¬«      5 }t        j                  |«      }ddd«       t        d   «      r3t        d	«       t        t        d|«       t        d
t        «       › �«       yt        d«       yyy# 1 sw Y   ŒXxY w)z@Set the connection file for Jupyter in the state file .ocpvscodeÚkernelÚIPKernelAppÚconnection_fileÚrrP   )ÚencodingNÚ
iopub_portzJupyter kernel runningz(Jupyter connection file path written to zJupyter kernel not responding)ÚJCONSOLEÚhasattrr   r¸   r�   Úopenr|   ÚloadrN   r€   r   r`   r   )r¸   ÚcfÚfÚconnection_infos       r   r_   r_   8  s£   € å”GœK›M¨8Ô4Ü“×%Ñ%ˆØ�]‰]˜=Ñ)Ð*;Ñ<ˆÜ�"�c GÕ,°Ü"Ÿi™i¨›lˆO÷ -ô �o lÑ3Ô4ÜÐ*Ô+ÜœÐ#4°bÔ9ÜÐ<¼_Ó=NÐ<OÐPÕQäÐ1Õ2ð 5€x÷ -Ð,ús   ÁB<Â<C)z	127.0.0.1)NF)NNF)3r-   rQ   rU   r|   r@   rD   r   Úpathlibr   Úwebsockets.sync.clientr   rv   Úocp_tessellate.utilsr   Úocp_tessellate.ocp_utilsr   r   r   r	   r°   r   r   r   ÚIPythonr   Újupyter_consoler¾   rb   r`   r]   Úsimplefilterr!   r"   ÚIntEnumr$   Ú__all__r<   rN   r[   r:   rI   r9   rˆ   r6   r�   r7   r•   r8   r;   r^   r_   r5   r   r   Ú<module>rÎ      sæ   ðÙ #ã Û Û Û 	Û Û å å *ã Ý &÷ó ÷ <Ñ ;ðÝ#Ûà€Hð €Ø€à€	ð €× Ñ �f˜kÔ *ò(ô	�$—,‘,ô 	ò€ò6òò	Pòòó
ó<ó~7ó
;ó
ó:ó
CòòD-ó`3øðsØ‚Hús   ÁB> Â>C