
    Yf                         d dl mZ d dlZd dlmZmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZ  G d
 de      Zy)    )annotationsN)AnyDictListTuple)
processors)Frame)FrameRendererProcessorListRenderer)Session)
LiteralStr)truncatec                       e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZdddZddZdddd	Z	dd
Z
ddZddZddZ G d d      Z G d d      Z xZS )ConsoleRendererz^
    Produces text-based output, suitable for text files or ANSI-compatible
    consoles.
    c                    t        |   di | || _        || _        || _        || _        | j                  r!| j                  rt        j                  d      |r| j                  | _        y| j                  | _        y)aO  
        :param unicode: Use unicode, like box-drawing characters in the output.
        :param color: Enable color support, using ANSI color sequences.
        :param flat: Display a flat profile instead of a call graph.
        :param time: How to display the duration of each frame - ``'seconds'`` or ``'percent_of_total'``
        z.Cannot use timeline and flat options together.N )super__init__unicodecolorflattimetimeliner   MisconfigurationErrorcolors_enabledcolors_disabledcolors)selfr   r   r   r   kwargs	__class__s         ^/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pyinstrument/renderers/console.pyr   zConsoleRenderer.__init__   sk     	"6"
		99001abb-2d))8L8L    c                "   | j                  |      }| j                  |j                               }||dz  }|S || _        | j                  r|| j	                  | j                        z  }n|| j                  | j                        z  }|dz  }|S )NzNo samples were recorded.


)render_preamble
preprocess
root_framer   render_frame_flatrender_frame)r   sessionresultframes       r"   renderzConsoleRenderer.render1   s    %%g. 2 2 45=55FM99d,,T__==Fd''88F$r#   c                L   ddddj                  dt        j                  z         g}|dxx   dj                  t        j                  dt        j
                  |j                                    z  cc<   |d	xx   d
|j                  dz  cc<   |dxx   d|j                   z  cc<   |d	xx   d|j                  dz  cc<   |j                  d       |j                  d|j                  z         |j                  d       |j                  d       dj                  |      S )N z$  _     ._   __/__   _ _  _  _ _/_  z$ /_//_/// /_\ / //_// / //_'/ //    z/   _/        {:>20}v   z Recorded: {:<9}z%X   z Duration: z<9.3fz Samples:  z CPU time: .3fzProgram: %sr%   )formatpyinstrument__version__r   strftime	localtime
start_timedurationsample_countcpu_timeappendprogramjoin)r   r+   liness      r"   r&   zConsoleRenderer.render_preambleE   s   33#**31I1I+IJ	
 	a&--MM$w/A/A BC
 	
 	ak'"2"25!9::ak'"6"6!788ak'"2"23!788R]W__45RRyyr#   c           
     R   |j                   rW|j                   j                  |k(  s>|j                  d| j                  j                  z  kD  s||j                   j
                  v r| | j                  |       d}| j                  rddddd}ndd	d
dd}|j                   r|j                   j                  |k(  r|dj                  |dz   t        |j                   j                        t        dj                  |j                   j                        d      | j                        z  }|D ]  }d||<   	 n	d}ddddd}|j                  r\|j                  d   }|j                  D ]>  }||ur||d   z   }	||d   z   }
n||d   z   }	||d   z   }
|| j!                  ||	|
      z  }@ |S )N皙?r%   u   ├─ u   │  u   └─ z   )   ├   │   └ z|- z|  z`- z={indent}[{count} frames hidden]  {c.faint}{libraries}{c.end}
z, (   )indentcount	librariescz      r0   rD   rE   rF   rG   )rI   child_indent)grouproottotal_self_timer(   r   exit_framesframe_descriptionr   r5   lenframesr   r@   rK   r   childrenr*   )r   r-   rI   rN   r,   indentskey
last_childchildc_indent	cc_indents              r"   r*   zConsoleRenderer.render_frame[   s   {{KK%$$sT__-A-A'AA///x 6 6u =>bAF||"+GITYZ"'e%P{{u{{//58Zaa'%/ekk001&tyy1F1F'GLkk	 b   # ,C#+GCL, F BR@G>>+J \
*+gen<H ,wu~ =I+gen<H ,ws| ;I$++E(QZ+[[\ r#   c                B  	 d
	fd	i i  	|       t        j                         d d      }| j                  s/|D cg c]$  }|d   | j                  j                  z  dkD  s#|& }}d}|D ]#  \  }}|| j                  |   |      z  }|d	z  }% |S c c}w )Nc                    j                  | j                  d      | j                  z   | j                  <   | | j                  <   | j                  D ]
  } |        y )Nr   )get
identifierrQ   rV   )r-   rZ   frame_id_to_frameframe_id_to_timewalks     r"   rc   z/ConsoleRenderer.render_frame_flat.<locals>.walk   sa     $$U%5%5q9E<Q<QQ U--. 38e../ Ur#   c                    | d   S )Nr2   r   )items    r"   <lambda>z3ConsoleRenderer.render_frame_flat.<locals>.<lambda>   s
    Q r#   T)rX   reverser2   gMbP?r0   override_timer%   )r-   r	   )sorteditemsshow_allr(   r   rS   )
r   r-   id_time_pairspairr,   frame_id	self_timera   rb   rc   s
          @@@r"   r)   z!ConsoleRenderer.render_frame_flat   s    	 .0.0U17""$+?$2
 }} "/$q'DOO<P<P2PSX2XM  #0 	Hid,,->x-HXa,bbFdNF	 s   $B*BNrh   c                  ||n|j                   }| j                  |      }| j                   dk(  r| j                  |      dz  dd}n|d}| | | j                  j                   }|j
                  }|r| d|j                   }n|j                  }| j                  |      }	|	 | | j                  j                   }
| j                  j                   |j                   | j                  j                   }| d|
 d| S )	Npercent_of_totald   z.1f%r4   .rG   z  )
r   _ansi_color_for_timeframe_proportion_of_total_timer   end
class_namefunction_ansi_color_for_namefaintcode_position_short)r   r-   ri   r   
time_colortime_str	value_strry   function_namefunction_colorfunction_strcode_position_strs               r"   rS   z!ConsoleRenderer.frame_description   s    - 9}uzz..t4
99**==dCcI#NaPHsH!l8*T[[__,=>	%%
)l!ENN+;<M!NNM2259()-8IJ#{{001%2K2K1LT[[__L]^Al^2.?-@AAr#   c                4    || j                   j                  z  S N)r(   r   )r   r   s     r"   rw   z.ConsoleRenderer.frame_proportion_of_total_time   s    doo****r#   c                    | j                  |      }|dkD  r| j                  j                  S |dkD  r| j                  j                  S |dkD  r| j                  j                  S | j                  j
                  | j                  j                  z   S )Ng333333?rC   g?)rw   r   redyellowgreenbright_greenr|   )r   r   proportion_of_totals      r"   rv   z$ConsoleRenderer._ansi_color_for_time   sx    "AA$G$;;??" 3&;;%%% 4';;$$$;;++dkk.?.???r#   c                v    |j                   r-| j                  j                  | j                  j                  z   S y)Nr0   )is_application_coder   bg_dark_blue_255	white_255)r   r-   s     r"   r{   z$ConsoleRenderer._ansi_color_for_name   s-    $$;;//$++2G2GGGr#   c                    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  gS r   )	r   remove_importlibremove_tracebackhidemerge_consecutive_self_timeaggregate_repeated_calls"remove_unnecessary_self_time_nodesremove_irrelevant_nodes*remove_first_pyinstrument_frames_processorgroup_library_frames_processor)r   s    r"   default_processorsz"ConsoleRenderer.default_processors   sT    ''++22//99..AA55	
 		
r#   c                  <    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZy)ConsoleRenderer.colors_enabledz[31mz[32mz[33mz[34mz[36mz[92mz
[37m[97mz
[48;5;24mz
[38;5;15mz[1mz[2mz[0mN__name__
__module____qualname__r   r   r   bluecyanr   whiter   r   boldr|   rx   r   r#   r"   r   r      s?    !"*#	r#   r   c                  <    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZy)ConsoleRenderer.colors_disabledr0   Nr   r   r#   r"   r   r      s?    	r#   r   )FFFseconds)r   boolr   r   r   r   r   z)LiteralStr['seconds', 'percent_of_total']r    r   returnNone)r+   r   r   str)r0   r0   )r-   r	   rI   r   rN   r   r   r   )r-   r	   r   r   )r-   r	   ri   zfloat | Noner   r   )r   floatr   r   )r   r   r   r   )r   r   )r   r   r   __doc__r   r.   r&   r*   r)   rS   rw   rv   r{   r   r   r   __classcell__)r!   s   @r"   r   r      s     :CMM M 	M
 8M M 
M4( ,&P D PT B.+
@

 " r#   r   )
__future__r   r   typingr   r   r   r   r6   r   pyinstrument.framer	   pyinstrument.renderers.baser
   r   r   pyinstrument.sessionr   pyinstrument.typingr   pyinstrument.utilr   r   r   r#   r"   <module>r      s7    "  ) )  # $ N N ( * &
lm lr#   