Ë
    :vžj’  ã                   ó¬  — 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
mZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ  G d	„ d
«      Zd„ Z G d„ d«      Zedk(  rvd dlZd dlZg Z eej>                  «      dkD  r4ej>                  d   Z  eej>                  «      dkD  rej>                  dd ZndZ  ee e du de«      Z!	  ejD                  d«       Œy)é    N)ÚImage)ÚHTMLé   )ÚPath)Ú	SetObjectÚSetTransformÚDeleteÚSetPropertyÚSetAnimationÚCaptureImage)ÚMeshPhongMaterial)Ústart_zmq_server_as_subprocessc                   ó^   — e Zd Z ej                  «       Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zy	)
ÚViewerWindowc                 ó  — |r!t        ||¬«      \  | _        | _        | _        nd | _        || _        | j	                  «        |s%| j                  «       | _        | j	                  «        t        d«       t        | j                  «       y )N)Úzmq_urlÚserver_argsz:You can open the visualizer by visiting the following URL:)r   Úserver_procr   Úweb_urlÚconnect_zmqÚrequest_web_urlÚprint)Úselfr   Ústart_serverr   s       úc/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/meshcat/visualizer.pyÚ__init__zViewerWindow.__init__   su   € ÙÜ;YØ¨[ô<:Ñ8ˆDÔ˜dœl¨D­Lð  $ˆDÔØ"ˆDŒLà×ÑÔáØ×/Ñ/Ó1ˆDŒLð ×ÑÔäÐJÔKÜˆd�l‰lÕó    c                 óª   — | j                   j                  t        j                  «      | _        | j                  j                  | j                  «       y ©N)ÚcontextÚsocketÚzmqÚREQÚ
zmq_socketÚconnectr   ©r   s    r   r   zViewerWindow.connect_zmq'   s2   € ØŸ,™,×-Ñ-¬c¯g©gÓ6ˆŒØ�‰×Ñ §¡Õ-r   c                 óŽ   — | j                   j                  d«       | j                   j                  «       j                  d«      }|S )Ns   urlúutf-8©r$   ÚsendÚrecvÚdecode)r   Úresponses     r   r   zViewerWindow.request_web_url+   s6   € Ø�‰×Ñ˜VÔ$Ø—?‘?×'Ñ'Ó)×0Ñ0°Ó9ˆØˆr   c                 óH   — t        j                  | j                  d¬«       | S )Né   )Únew)Ú
webbrowserÚopenr   r&   s    r   r2   zViewerWindow.open0   s   € Ü�‰˜Ÿ™¨!Õ,Øˆr   c                 óŠ   — | j                   j                  d«       | j                   j                  «       j                  d«      S )Ns   waitr(   r)   r&   s    r   ÚwaitzViewerWindow.wait4   s2   € Ø�‰×Ñ˜WÔ%Ø�‰×#Ñ#Ó%×,Ñ,¨WÓ5Ð5r   c                 ó  — |j                  «       }| j                  j                  |d   j                  d«      |d   j                  d«      t	        j
                  |«      g«       | j                  j                  «        y )NÚtyper(   Úpath)Úlowerr$   Úsend_multipartÚencodeÚumsgpackÚpackbr+   )r   ÚcommandÚcmd_datas      r   r*   zViewerWindow.send8   sh   € Ø—=‘=“?ˆØ�‰×&Ñ&Ø�VÑ×#Ñ# GÓ,Ø�VÑ×#Ñ# GÓ,Ü�N‰N˜8Ó$ð(
ô 	ð
 	�‰×ÑÕr   c                 óŠ   — | j                   j                  d«       | j                   j                  «       j                  d«      S )z(Get the static HTML from the ZMQ server.s	   get_scener(   r)   r&   s    r   Ú	get_scenezViewerWindow.get_sceneA   s2   € à�‰×Ñ˜\Ô*à�‰×#Ñ#Ó%×,Ñ,¨WÓ5Ð5r   c                 ó^  — t        «       j                  «       }| j                  j                  |d   j	                  d«      dj	                  d«      t        j                  |«      g«       | j                  j                  «       }t        j                  t        j                  |«      «      }|S )Nr6   r(   Ú )r   r8   r$   r9   r:   r;   r<   r+   r   r2   ÚioÚBytesIO)r   r>   Ú	img_bytesÚimgs       r   Ú	get_imagezViewerWindow.get_imageG   s„   € Ü“>×'Ñ'Ó)ˆØ�‰×&Ñ&Ø�VÑ×#Ñ# GÓ,Ø�I‰I�gÓÜ�N‰N˜8Ó$ð(
ô 	ð
 —O‘O×(Ñ(Ó*ˆ	Ü�j‰jœŸ™ IÓ.Ó/ˆØˆ
r   N)Ú__name__Ú
__module__Ú__qualname__r"   ÚContextr    r   r   r   r2   r4   r*   r@   rG   © r   r   r   r      s7   „ Øˆc�k‰k‹m€Gòò*.òò
ò6òò6ó	r   r   c                 óF   — | j                  dd«      j                  dd«      S )NÚ&z&amp;Ú"z&quot;)Úreplace)Úxs    r   Úsrcdoc_escaperR   S   s    € Ø�9‰9�S˜'Ó"×*Ñ*¨3°Ó9Ð9r   c                   ó¸   — e Zd ZddgZddg fd„Zed„ «       Zd„ Zd„ Zd„ Z	dd	„Z
dd
„Zd„ Zdd„Z ej                  d«      fd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú
VisualizerÚwindowr7   Nc                 ób   — |€t        ||d u |¬«      | _        n|| _        t        d«      | _        y )N)r   r   r   )Úmeshcat)r   rU   r   r7   )r   r   rU   r   s       r   r   zVisualizer.__init__Z   s0   € Øˆ>Ü&¨wÀgÐQUÀoÐdoÔpˆD�Kà ˆDŒKÜ˜Ó&ˆ�	r   c                 ó,   — t        | ¬«      }||_        |S )N)rU   )rT   r7   )rU   r7   Úviss      r   Ú	view_intozVisualizer.view_intoa   s   € ä Ô'ˆØˆŒØˆ
r   c                 ó:   — | j                   j                  «        | S r   )rU   r2   r&   s    r   r2   zVisualizer.openg   s   € Ø�‰×ÑÔØˆr   c                 ó.   — | j                   j                  S r   )rU   r   r&   s    r   ÚurlzVisualizer.urlk   s   € Ø�{‰{×"Ñ"Ð"r   c                 ó6   — | j                   j                  «       S )zB
        Block until a browser is connected to the server
        )rU   r4   r&   s    r   r4   zVisualizer.waitn   s   € ð �{‰{×ÑÓ!Ð!r   c                 óV   — t        dj                  | j                  «       |¬«      «      S )z²
        Render the visualizer in a jupyter notebook or jupyterlab cell.

        For this to work, it should be the very last command in the given jupyter
        cell.
        zè
            <div style="height: {height}px; width: 100%; overflow-x: auto; overflow-y: hidden; resize: both">
            <iframe src="{url}" style="width: 100%; height: 100%; border: none"></iframe>
            </div>
            )r]   Úheight)r   Úformatr]   ©r   r`   s     r   Újupyter_cellzVisualizer.jupyter_cellt   s,   € ô ð ÷ ‘˜4Ÿ8™8›:¨f�Ó5ó	7ð 	7r   c                 óh   — t        dj                  t        | j                  «       «      |¬«      «      S )a§  
        Render a static snapshot of the visualizer in a jupyter notebook or
        jupyterlab cell. The resulting snapshot of the visualizer will still be an
        interactive 3D scene, but it won't be affected by any future `set_transform`
        or `set_object` calls.

        Note: this method should work well even when your jupyter kernel is running
        on a different machine or inside a container.
        zÞ
        <div style="height: {height}px; width: 100%; overflow-x: auto; overflow-y: hidden; resize: both">
        <iframe srcdoc="{srcdoc}" style="width: 100%; height: 100%; border: none"></iframe>
        </div>
        )Úsrcdocr`   )r   ra   rR   Ústatic_htmlrb   s     r   Úrender_staticzVisualizer.render_static�   s6   € ô ð ÷ ‰Fœ-¨×(8Ñ(8Ó(:Ó;ÀFˆFÓKó	Mð 	Mr   c                 ót   — t         j                  | j                  | j                  j	                  |«      «      S r   )rT   rZ   rU   r7   Úappend)r   r7   s     r   Ú__getitem__zVisualizer.__getitem__‘   s(   € Ü×#Ñ# D§K¡K°·±×1AÑ1AÀ$Ó1GÓHÐHr   c                 ób   — | j                   j                  t        ||| j                  «      «      S r   )rU   r*   r   r7   )r   ÚgeometryÚmaterials      r   Ú
set_objectzVisualizer.set_object”   s$   € Ø�{‰{×Ñ¤	¨(°H¸d¿i¹iÓ HÓIÐIr   é   c                 ó`   — | j                   j                  t        || j                  «      «      S r   )rU   r*   r   r7   )r   Úmatrixs     r   Úset_transformzVisualizer.set_transform—   s"   € Ø�{‰{×Ñ¤¨V°T·Y±YÓ ?Ó@Ð@r   c                 ób   — | j                   j                  t        ||| j                  «      «      S r   )rU   r*   r
   r7   )r   ÚkeyÚvalues      r   Úset_propertyzVisualizer.set_propertyš   s$   € Ø�{‰{×Ñ¤¨C°¸¿	¹	Ó BÓCÐCr   c                 óP   — | j                   j                  t        |||¬«      «      S )N)ÚplayÚrepetitions)rU   r*   r   )r   Ú	animationrx   ry   s       r   Úset_animationzVisualizer.set_animation�   s    € Ø�{‰{×Ñ¤¨Y¸TÈ{Ô [Ó\Ð\r   c                 ó6   — | j                   j                  «       S )zSave an image)rU   rG   r&   s    r   rG   zVisualizer.get_image    s   € à�{‰{×$Ñ$Ó&Ð&r   c                 ó^   — | j                   j                  t        | j                  «      «      S r   )rU   r*   r	   r7   r&   s    r   ÚdeletezVisualizer.delete¤   s    € Ø�{‰{×Ñ¤ t§y¡yÓ 1Ó2Ð2r   c                 ó8   — | j                   j                  «        y r   )rU   Úcloser&   s    r   r€   zVisualizer.close§   s   € Ø�‰×ÑÕr   c                 ó6   — | j                   j                  «       S )zì
        Generate and save a static HTML file that standalone encompasses the visualizer and contents.

        Ask the server for the scene (since the server knows it), and pack it all into an
        HTML blob for future use.
        )rU   r@   r&   s    r   rf   zVisualizer.static_htmlª   s   € ð �{‰{×$Ñ$Ó&Ð&r   c                 óP   — dj                  | j                  | j                  ¬«      S )Nz,<Visualizer using: {window} at path: {path}>)rU   r7   )ra   rU   r7   r&   s    r   Ú__repr__zVisualizer.__repr__³   s#   € Ø=×DÑDÈDÏKÉKÐ^b×^gÑ^gÐDÓhÐhr   )i�  r   )Tr   )rH   rI   rJ   Ú	__slots__r   ÚstaticmethodrZ   r2   r]   r4   rc   rg   rj   rn   ÚnpÚeyerr   rv   r{   rG   r~   r€   rf   rƒ   rL   r   r   rT   rT   W   s�   „ Ø˜6Ð"€Ià#¨D¸bó 'ð ñó ðò
ò#ò"ó7óMò IóJð $* 2§6¡6¨!£9ó AòDó]ò'ò3òò'óir   rT   Ú__main__r/   Téd   )#r1   r;   Únumpyr†   r"   rC   ÚPILr   ÚIPython.displayr   r7   r   Úcommandsr   r   r	   r
   r   r   rl   r   Úservers.zmqserverr   r   rR   rT   rH   ÚtimeÚsysÚargsÚlenÚargvr   rU   ÚsleeprL   r   r   Ú<module>r•      sÐ   ðÛ Û Û Û 
Û 	Ý Ý  õ ß ^× ^Ý 'Ý =÷Añ AòH:÷]iñ ]ið@ ˆzÒÛÛØ€DÙ
ˆ3�8‰8ƒ}�qÒØ—(‘(˜1‘+ˆÙˆs�x‰x‹=˜1ÒØ—8‘8˜A˜B�<‰Dàˆá˜' 7¨d ?°D¸$Ó?€Fà
Øˆ�
‰
�3Œð ð r   