
    vj                        d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ dZ G d	 d
      Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      ZdZ G d de      Zd Zedk(  r e        yy)    N)Path)HtmlElement)TrameApp)change)	DivLayout)clienthtml      ?c                   6    e Zd Zg dZd Zd Zd Zed        Zy)Record)namet0dtvalidc                    d| _         |rt        |      dk  ry |d d j                         | _        |dd  j	                         }t        |      dk  ry t        |d         | _        t        |d         | _        d| _         y )NF<      r      T)r   lenstripr   splitfloatr   r   )selflinetimess      A/DATA/.local/lib/python3.12/site-packages/trame/tools/profiler.py__init__zRecord.__init__   sr    
s4y2~"IOO%	RS	!u:>a/a/
    c                     || j                   k  r|n| j                   || j                   kD  r|fS | j                   | j                  dz  z   fS N  )r   r   )r   	min_value	max_values      r   expend_timezRecord.expend_time    sL    "TWW,I$''"TWW,I
 	
26''DGGdN2J
 	
r   c                 .    | xj                   |z  c_         y N)r   )r   vs     r   apply_offsetzRecord.apply_offset&   s    1r   c                     t        | j                  dz        t        | j                  dz         | j                   ddS )Nr!   r   z ms)xwidthtitle)intr   roundr   r   s    r   rectzRecord.rect)   s;     TWWt^$477Q;'y_
 	
r   N)	__name__
__module____qualname__	__slots__r   r$   r(   propertyr0    r   r   r   r      s*    -I
 
 
r   r   c                   D    e Zd Zd Zd Zd Zd Zed        Zed        Z	y)ProfilerAnalyzerc                 2   t         j                  | _        d| _        i | _        t        |      j                         5 }|D ]  }t        |      }|j                  s|j                  | j                  | j                        \  | _        | _        | j                  j                  |j                  g       j                  |        	 d d d        | j                  t        z
  }g }| j                  j                         D ]=  \  }}|j                  ||d   j                  f       |D ]  }|j!                  |        ? |j#                  d        | xj                  |z  c_        d| _        |D 	cg c]  \  }}	|	 c}	}| _        y # 1 sw Y   xY wc c}	}w )Nr   c                     | d   S )Nr   r6   )r*   s    r   <lambda>z+ProfilerAnalyzer.__init__.<locals>.<lambda>K   s    QqTr   )key)mathinfmin_timemax_timetracksr   openr   r   r$   
setdefaultr   appendLABEL_WIDTHitemsr   r(   sorttrack_names)
r   
input_filefiler   recordoffset	tracks_t0r   records_s
             r   r   zProfilerAnalyzer.__init__3   sO    *""$||/5/A/AMM4==0,t} &&v{{B7>>vF  % ,	![[..0MD'dGAJMM23!##F+ " 1 	>* 1::	WT1D	:1 %$0 ;s   BF1FFc                     g }d}| j                   D ]?  }| j                  |   D ]&  }|j                  i |j                  ||d|       ( ||z  }A |S )Nr   )yheight)rH   rA   rD   r0   )r   rR   add_on	all_rectsrQ   r   rK   s          r   rectszProfilerAnalyzer.rectsS   sd    	$$D++d+  !TFKK!Ta6!TV!TU ,KA % r   c                 2   g }d}| j                   D ]5  }|j                  dt        | j                  dz        ||d|       ||z  }7 |j                  dt        | j                  dz        ||d|       |j                  t        | j                  dz        t        | j                  dz        d||z   d|       t	        ddt        | j
                  dz        z         D ]1  }|j                  |t        z   dz  |t        z   dz  |||z   d|       3 |S )Nr   r!   )x1x2y1y2r   )rH   rD   r-   r@   ranger+   rE   )r   rR   rS   	all_linesrQ   rO   is          r   lineszProfilerAnalyzer.lines\   s;   	!!ADMMD$8 9!VvV KA	 "
 	C 45QaR6R	

 	$--$./$--$./&j	
 	
 q!c$**t"3445A{?d2{?d2f*	
  6 r   c           
      B   g }d}| j                   D ],  }|j                  |t        |d|z  z         d|       ||z  }. t        ddt        | j                  dz        z         D ]7  }|j                  | d|t
        z   dz  dz   t        |d|z  z         dd	       9 |S )
Nr   g      ?)textrQ   r   r!   s   start)r`   r*   rQ   ztext-anchor)rH   rD   r-   r[   r+   rE   )r   rR   rS   	all_textsrQ   r   r]   s          r   textszProfilerAnalyzer.texts   s    	$$DdQ5F1GR6RSKA %
 q!c$**t"3445A cGk/T1A5Q./#*	 6 r   c                 2    t        | j                  dz        S r    )r-   r@   r/   s    r   r+   zProfilerAnalyzer.width   s    4==4'((r   c                 ,    t        | j                        S r&   )r   rH   r/   s    r   n_trackszProfilerAnalyzer.n_tracks   s    4##$$r   N)
r1   r2   r3   r   rU   r^   re   r5   r+   rh   r6   r   r   r8   r8   2   s@    ;@#J* ) ) % %r   r8   c                        e Zd Z fdZ xZS )Rectc                 R    t        |   di | | xj                  g dz  c_        y )N)r*   rQ   r+   rR   )r0   )superr   _attr_namesr   kwargs	__class__s     r   r   zRect.__init__   s%    *6*99r   r1   r2   r3   r   __classcell__rp   s   @r   rj   rj      s    : :r   rj   c                        e Zd Z fdZ xZS )Linec                 $    t        |   di | y )N)r   rl   r   rn   s     r   r   zLine.__init__   s    *6*r   rq   rs   s   @r   ru   ru      s    + +r   ru   c                        e Zd Z fdZ xZS )Textc                 (    t        |   d|fi | y )Nr`   rw   r   txtro   rp   s      r   r   zText.__init__   s    //r   rq   rs   s   @r   ry   ry      s    0 0r   ry   c                        e Zd Z fdZ xZS )Titlec                 (    t        |   d|fi | y )Nr,   rw   r{   s      r   r   zTitle.__init__   s    #00r   rq   rs   s   @r   r~   r~      s    1 1r   r~      c                   B     e Zd Zd fd	Z ed      d        Zd Z xZS )ProfilerViewerc                    t         |   |       | j                  j                  j	                  dd       | j                  j                  j                         \  }}t        |j                        | _        | j                  j                  | j                  _	        | j                  j                  dz   t        z  | j                  _        | j                  j                  t              | j                  _        | j                  j                  t              | j                  _        | j                  j!                  t        d      | j                  _        | j#                          y )Nz--dataT)requiredr   rR      rR   r*   )rl   r   servercliadd_argumentparse_known_argsr8   dataanalyserr+   staterh   HEIGHTrR   rU   r^   re   	_build_ui)r   r   argsrO   rp   s       r   r   zProfilerViewer.__init__   s     $$X$=++//224a(3==..

!]]33a76A

==..f.=

==..f.=

==..f.C

r   rL   c           
          | j                   j                  t        t        ddt	        |      z  z               | j
                  _        y )Nr   r!   r   )r   re   r   r-   r   r   )r   rL   rO   s      r   
_on_offsetzProfilerViewer._on_offset   s;    ==.."teFm++, / 


r   c           	      \   t        | j                        5 | _        t        j                  dt
         d       t        j                  dd       t        j                  dddd	d
d       t        j                  d       t        j                  ddddg      5  t        ddd      5  t        d       d d d        t        ddt        dz  dt
         fd       t        ddd       t        dd dd!       d d d        d d d        y # 1 sw Y   VxY w# 1 sw Y   xY w# 1 sw Y   y xY w)"Nz
                rect { fill:blue; stroke:none; fill-opacity:0.5; }
                line { stroke: black; }
                text { text-anchor: start; font-size: zZpx; }
                rect.bg { fill:#BDBDBD; stroke:black; fill-opacity:1; }
            zTrame profilerztext-align: center;)styler[   r   r
   )zMath.floor(width/1000))rL   r   z width:100%; margin-bottom: 20px;)typeminstepmaxv_modelr   viewSize)z=`${1000 * offset} 0 ${(viewSize?.size?.width||10)} ${height}`)zviewSize?.size?.width || 10r   viewBox)r   r+   rR   __propertieszrect, i in rectsr]   r0   )v_forr<   v_bindz{{ rect.title }})z1000 * offsetr!   z	height - bg)r*   rQ   r+   rR   classeszline, i in linesr   z{{ t.text }}zt, i in textst)r   r   uir   Styler   r	   H1InputSizeObserverSvgrj   r~   rE   ru   ry   r/   s    r   r   zProfilerViewer._build_ui   s   t{{#twLL 8 9?x @  GG$,ABJJ/%8 
+ 7"'[  2FK,- L(%,'x02  -3vF^?CP%# $#2 LK # $#s=   BD"D)D
5AD9D"
DDD	D""D+r&   )r1   r2   r3   r   r   r   r   rr   rs   s   @r   r   r      s'     H
 
$Qr   r   c                  L    t               } | j                  j                          y r&   )r   r   rc   )apps    r   mainr      s    

CJJr   __main__)r=   pathlibr   trame_client.widgets.corer   	trame.appr   trame.decoratorsr   trame.ui.htmlr   trame.widgetsr   r	   rE   r   r8   rj   ru   ry   r~   r   r   r   r1   r6   r   r   <module>r      s      1  # # &!
 !
Hj% j%Z:; :+; +
0; 0
1K 1
 
;QX ;Q|
 zF r   