
    uki                       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mZ ddlm	Z
 ddlmZ ej                  rddlmZ 	 ddlZdZ G d
 dej$                        Z G d dej$                        Z G d dej$                        Z G d dej,                        Zd Zej                  r e
j2                  ded       yy# e$ r d	ZY w xY w)z#Module for Colab-specific debugger.    )annotationsN)	colab_lib)core)cli_debugger)outputTFc                  H    e Zd ZdZdddZd Zd Zd Zd ZddZ	dd	dd
Z
y)
CodeViewerz1A mutable DOM element that displays code as HTML.   c                    || _         || _        t        j                  t        j                               | _        || _        y N)_code_highlightsr   dynamicdiv_view_linenostart)selfcode_
highlightslinenostarts       [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/debugger/colab_debugger.py__init__zCodeViewer.__init__+   s1    DJ!D""9==?3DJ#D    c                h    | j                  | j                  | j                  | j                         y )Nr   )update_coder   r   r   r   s    r   renderzCodeViewer.render1   s-    

D$$$2C2C  Er   c                8    | j                   j                          y r   )r   clearr   s    r   r    zCodeViewer.clear5   s    JJr   c                    t         r   NotImplementedErrorr   childs     r   appendzCodeViewer.append8       
r   c                :    | j                   j                  |       y r   )r   updater   elems     r   r)   zCodeViewer.update;   s    JJdr   c                T   t        j                  d      }|rdnd}|rdnd}t        rt        j                  j                  d      }t        j                  j                  d|d||	      }|r||j                  _	        |j                         }	t        j                  |||      }||	fS y
)Nz1document.documentElement.matches("[theme=dark]");monokaidefaultz#4e56b7z#fff7c1pythonFT)fullhl_lineslinenosr   style )r   eval_jsIS_PYGMENTS_ENABLEDpygmentslexersget_lexer_by_name
formattersHtmlFormatterr3   highlight_colorget_style_defs	highlight)
r   coder   r   is_dark_mode
code_stylehl_colorlexer	formattercss_s
             r   _highlight_codezCodeViewer._highlight_code>   s    >>;=L*	J(yiHoo//9e%%33! 4 i 
*2	'%%'deY7d : r   r   c                  || _         | j                  j                          | j                  | j                   ||      \  }}t	        j
                         }t        j                  t        j                  |      |d| t        j                  ddddd            }|r+|d   t        | j                   j                  d	            z  }nd
}| j                  |       t        j                  dj                  d| |             y)z(Updates the code viewer to use new code.zcode-500pxscrollzvar(--colab-border-color)5px 5px 5px 5px)z
max-heightz
overflow-ybackground-colorpadding)idr3   r   
g        z
    console.log("{id}")
    var elem = document.getElementById("{id}")
    var maxScrollPosition = elem.scrollHeight - elem.clientHeight;
    elem.scrollTop = maxScrollPosition * {percent_scroll}
    )rM   percent_scrollN)r   r   r    rF   uuiduuid4r   r   cssr3   lensplitr)   r   r5   format)r   r   r   r   rE   uuid_code_divrO   s           r   r   zCodeViewer.update_codeS   s    DJJJ&&tzz:{KKE4JJLE}}d5'?oo!" ;(	
 		H !!}s4::+;+;D+A'BBnnKK
NN 
 	E%/.ACr   N)r
   )r   strr   z	list[int]r   int)r?   rX   r   rY   )r   rY   )__name__
__module____qualname____doc__r   r   r    r&   r)   rF   r    r   r   r	   r	   (   s1    9$E* BC Cr   r	   c                  @     e Zd ZdZ fdZd Zd Zd Zd Zd Z	 xZ
S )FramePreviewz)Displays information about a stack frame.c           	        t         |           t        j                  t        j                  t        j
                  t        j                  d                        | _        t        dg       | _	        || _
        i | _        y )Nr4   )r   )superr   r   r   r   prer?   _headerr	   
_code_viewframe_file_cache)r   rf   	__class__s     r   r   zFramePreview.__init__t   s[    	G$$immINN2$678:DL 3DODJDr   c                l    | j                   j                          | j                  j                          y r   )rd   r    re   r   s    r   r    zFramePreview.clear|   s"    LLOOr   c                    t         r   r"   r$   s     r   r&   zFramePreview.append   r'   r   c                    t         r   r"   r*   s     r   r)   zFramePreview.update   r'   r   c                z   || _         | j                   j                  xs d}| j                   j                  j                         }t	        j
                  |      rT|| j                  vr	 t        |      5 }|j                         | j                  |<   ddd       | j                  |   }|}d}nYdj                  |j                        }t        |j                  dz   t        |j                        dz
        }||j                  z
  }| j                  j!                          | j                  j#                  t%        j&                  t%        j(                  t%        j*                  t-        j.                  |       d| d            t%        j0                  ddd      	             | j2                  j5                  g
       y# 1 sw Y   6xY w# t        $ r] dj                  |j                        }t        |j                  dz   t        |j                        dz
        }||j                  z
  }Y 1w xY w)z,Updates the frame viewer to use a new frame.Nr
   rN   ()rJ   z&var(--colab-highlighted-surface-color))rL   rK   r3   r   )rf   linenofilenamestripinspectgetmodulenamerg   openreadFileNotFoundErrorjoinsourceminoffsetrS   rd   r    r)   r   r   rc   r?   htmlescaper3   re   r   )r   rf   rp   rq   fpry   r>   r   s           r   update_framezFramePreview.update_frame   s   DJZZ&$Fzz""((*HX&	))	)		.H~ 3)+DX&3##H-&)+ yy&fellQ&ELL(9A(=>iU\\)kLLLLMM)..DKK,A+B!F81)MNO//,$L# 	 	OOM+3 3
 ! 	.99U\\*&%,,*C,=,AB)-+	.s+   *G 5GG GG A"H:9H:c                :    | j                  | j                         y r   )r   rf   r   s    r   r   zFramePreview.render   s    djj!r   )rZ   r[   r\   r]   r   r    r&   r)   r   r   __classcell__rh   s   @r   r`   r`   q   s%    1N>"r   r`   c                  d     e Zd ZdZdd fd
Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Z xZS )DebuggerViewz!Main view for the Colab debugger.r4   )	log_colorc               N   t         |           t        j                  t        j                               | _        t        |      | _        t        j                  t        j                  t        j                  d      t        j                  ddddd                  | _
        y )N
Breakpointz$var(--colab-secondary-surface-color)zvar(--colab-primary-text-color)rJ   bold)rK   colorrL   zfont-weightro   )rb   r   r   r   r   _interaction_logr`   _frame_previewspanr3   rd   )r   rf   r   rh   s      r   r   zDebuggerView.__init__   s{    	G%--immo>D&u-D$$NN<(//$J:,%	# 	DLr   c                    | j                   j                          | j                  j                          | j                  j                          y r   )rd   r   r   r   r   s    r   r   zDebuggerView.render   s6    LL   "r   c                    t         r   r"   r$   s     r   r&   zDebuggerView.append   r'   r   c                    t         r   r"   r*   s     r   r)   zDebuggerView.update   r'   r   c                    | j                   j                          | j                  j                          | j                  j                          y r   )rd   r    r   r   r   s    r   r    zDebuggerView.clear   s6    LL!r   c                :    | j                   j                  |       y r   )r   r   )r   rf   s     r   r   zDebuggerView.update_frame   s    $$U+r   c                `    | j                   j                  t        j                  |             y r   )r   r&   r   rc   )r   texts     r   writezDebuggerView.write   s      t!45r   c                    t               r   r"   r   s    r   rv   zDebuggerView.read   s    

r   c                    t        j                  dg      5  t               dz   }d d d        t        j                  dg       S # 1 sw Y   "xY w)NstdinrN   )output_tags)r   use_tagsinputr    )r   
user_inputs     r   readlinezDebuggerView.readline   sD    	'	# "7T>j"
LLgY'" "s   AAc                     y)NTr^   r   s    r   isattyzDebuggerView.isatty   s    r   c                     y r   r^   r   s    r   flushzDebuggerView.flush   s    r   )rZ   r[   r\   r]   r   r   r&   r)   r    r   r   rv   r   r   r   r   r   s   @r   r   r      s@    ))+ #
 
,6 	r   r   c                  F     e Zd ZdZ	 	 	 	 d fdZ fdZ fdZd Z xZS )ColabDebuggerz'A JAX debugger for a Colab environment.c                    t         |   ||       t        | j                               | _        | j                  x| _        | _        y r   )rb   r   r   current_frame_debugger_viewstdoutr   )r   frames	thread_idrh   s      r   r   zColabDebugger.__init__   s>     
GVY'&t'9'9';<D#222DK$*r   c                v    t         |   |       | j                  j                  | j	                                yNF)rb   do_upr   r   r   r   argrh   s     r   r   zColabDebugger.do_up   s/    	GM#$$T%7%7%9:r   c                v    t         |   |       | j                  j                  | j	                                yr   )rb   do_downr   r   r   r   s     r   r   zColabDebugger.do_down   s/    	GOC$$T%7%7%9:r   c                \    | j                   j                          	 | j                         sy r   )r   r   cmdloopr   s    r   runzColabDebugger.run   s(     
\\^ r   )r   z!list[debugger_core.DebuggerFrame]r   rY   )	rZ   r[   r\   r]   r   r   r   r   r   r   s   @r   r   r      s*    /3833

r   r   c                    	 t        | |fi |j                          y # t        $ r t        j                          Y y w xY wr   )r   r   	Exception	traceback	print_exc)r   r   kwargss      r   _run_debuggerr      s:    &).v.224	 s    >>colabr
   )r]   
__future__r   r|   rs   r   rP   jax._src.debuggerr   r   debugger_corer   IS_COLAB_ENABLEDgoogle.colabr   r7   r6   ImportErrorDynamicDOMElementr	   r`   r   CliDebuggerr   r   register_debuggerr^   r   r   <module>r      s    * "     ' 3 * !FC,, FCR5"9.. 5"p4	9.. 4	lL,, 6 !-!!'=!<   s   B= =CC