
    YfL0                        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	m
Z
mZmZ dZdZdZdZ eeeeeg      Z eeeeg      Z G d	 d
      Z G d d      Zy)    )annotationsN)Sequence)ATTRIBUTE_MARKER_CLASS_NAMEATTRIBUTE_MARKER_TRACEBACKHIDEframe_info_get_identifierparse_frame_infoz[await]z[self]z[out-of-context]z[root]c                     e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   	 	 	 d%	 	 	 	 	 d&dZd'dZd Zed(d       Z	e
d)d       Ze
d)d       Ze
d*d       Ze
d+d       Ze
d,d       Ze
d+d       Ze
d-d       Ze
d+d       Zded<   d	ed
<   d.d/dZd.d0dZe
d-d       Ze
d-d       Ze
d1d       Zd)dZd2d Ze
d+d!       Ze
d-d"       Zd3d4d#Zd$ Zy)5FramezA
    Object that represents a stack frame in the parsed tree
    Frame | NoneparentzFrameGroup | Nonegroupfloattimeabsorbed_timezdict[str, float]
attributesNc                   t        |      }|| _        d | _        d| _        d | _        d| _        |j                  d      | _        i | _        g | _	        | j                  ||       |r|D ]  }| j                  |        y y )Ng         )
frame_infor   )r   
identifierr   r   r   r   split_identifier_partsr   	_childrenrecord_time_from_frame_info	add_child)selfidentifier_or_frame_infochildrenr   r   childs         R/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pyinstrument/frame.py__init__zFrame.__init__<   s     //GH
$	
 !+!1!1&!9((4LSW(X! &u%&     c                    | xj                   |z  c_         t        |      \  }}|D ]  }	 | j                  |xx   |z  cc<    y # t        $ r || j                  |<   Y 8w xY wN)r   r   r   KeyError)r   r   r   _attributes_list	attributes         r   r   z!Frame.record_time_from_frame_infoS   sf    		T	-j9?( 	2I2	*d2*	2  2-1	*2s   AAAc                v    | j                   r-| j                   j                  j                  |        d| _         yy)zO
        Removes this frame from its parent, and nulls the parent link
        N)r   r   remover   s    r   remove_from_parentzFrame.remove_from_parent^   s/     ;;KK!!((.DK r!   c                    t        |       S )N)r   )r
   )r   s    r   new_subclass_with_frame_infoz"Frame.new_subclass_with_frame_infof   s     j99r!   c                    | j                   r$	 | j                  | j                   j                  z  S y# t        $ r t        d      cY S w xY w)Nnang      ?)r   r   ZeroDivisionErrorr   r*   s    r   proportion_of_parentzFrame.proportion_of_parentk   sG    ;;$yy4;;#3#333  % $U|#$s   "2 A	A	c                    | j                   }| j                  D cg c]  }|j                  r| }}|D ]  }||j                   z  } |S c c}w )z
        The total amount of self time in this frame (including self time recorded by SelfTimeFrame
        children, and await time from AwaitTimeFrame children)
        )r   r   is_synthetic)r   	self_timecreal_childrenr   s        r   total_self_timezFrame.total_self_timeu   sU     II	$(MMHqHH" 	$E#I	$  Is
   AAc                     | j                   d   S Nr   )r   r*   s    r   functionzFrame.function   s    %%a((r!   c                R    t        | j                        dkD  r| j                  d   S y N   )lenr   r*   s    r   	file_pathzFrame.file_path   s+    t%%&*))!,, +r!   c                d    t        | j                        dkD  rt        | j                  d         S y )N   )r>   r   intr*   s    r   line_nozFrame.line_no   s0    t%%&*t--a011 +r!   c                   | j                   r"| j                  r| j                  j                  S t        | d      sd}| j                  rt        | j                  j                  t        j                              dk(  r| j                  }nt        j                  D ]  }	 t        j                  j                  | j                  |      }|rRt        |j                  t        j                              t        |j                  t        j                              k  s|} || _        | j                  S # t        $ r Y w xY w)z>Return the path resolved against the closest entry in sys.path_file_path_shortNr=   )r3   r   file_path_shorthasattrr?   r>   r   ossepsyspathrelpath
ValueErrorrE   )r   resultrK   	candidates       r   rF   zFrame.file_path_short   s     ;;...t/0F~~t~~++BFF349 "^^F # /%(*(MI  &#ioobff.E*FV\\Z\Z`Z`MaIb*b%.F/ %+D!$$$  * %$%s   *D44	E ?E c                    | j                   ry| j                  }|syd|v ryt        j                  dk7  r&t        j                   dt        j                   |v ry|j	                  d      r|j	                  d      ryyy)NFz/lib//lib<z<ipython-input-T)r3   r?   rH   rI   
startswith)r   r?   s     r   is_application_codezFrame.is_application_code   sy    NN	i66S=66(#bffX&94$##$56 r!   c                    | j                   r'| j                  rd| j                   | j                  fz  S | j                   S )Nz%s:%i)rF   rC   r*   s    r   code_position_shortzFrame.code_position_short   s7    DLLd22DLLAAA###r!   list[Frame]r   c                   | j                   t        v rt        d      |j                          | |_        || j
                  j                  |       y| j
                  j                  |      dz   }| j
                  j                  ||       y)z
        Adds a child frame, updating the parent link.
        Optionally, insert the frame in a specific position by passing the frame to insert
        this one after.
        z(Cannot add children to a leaf-only frameNr=   )	r   SYNTHETIC_LEAF_IDENTIFIERSrM   r+   r   r   appendindexinsert)r   frameafterr\   s       r   r   zFrame.add_child   st     ??88GHH  "=NN!!%(NN((/!3ENN!!%/r!   c                    |$t        |      D ]  }| j                  ||        y|D ]  }| j                  |        y)zD
        Convenience method to add multiple frames at once.
        N)r_   )reversedr   )r   framesr_   r^   s       r   add_childrenzFrame.add_children   sM      "&) 3uE23   &u%&r!   c                &    | j                   t        v S r#   )r   SYNTHETIC_FRAME_IDENTIFIERSr*   s    r   r3   zFrame.is_synthetic   s    "===r!   c                &    | j                   t        v S r#   )r   rZ   r*   s    r   is_synthetic_leafzFrame.is_synthetic_leaf   s    "<<<r!   c                ,    t        | j                        S r#   )tupler   r*   s    r   r   zFrame.children   s    
 T^^$$r!   c                    d}| j                   t        k(  r|| j                  z  }| j                  D ]  }||j	                         z  } |S r9   )r   AWAIT_FRAME_IDENTIFIERr   r   
await_time)r   rl   r   s      r   rl   zFrame.await_time  sP    
??44$))#J]] 	-E%**,,J	- r!   c                    | j                   j                         D cg c]  }|d   j                  |      r| }}t        |      dk(  ryt	        |d       \  }}|dd S c c}w )z
        Returns the value of the attribute. If multiple values are present,
        the most commonly observed one is returned.
        r   Nc                    | d   S r<    )as    r   <lambda>z+Frame.get_attribute_value.<locals>.<lambda>%  s
    !A$ r!   )keyr=   )r   itemsrT   r>   max)r   attribute_markera_tuplematching_attributestop_attributer%   s         r   get_attribute_valuezFrame.get_attribute_value  s{      ??002
qz$$%56 
 
 "#q(2Gq QR  
s   A!c                ,    | j                  t              S r#   )ry   r   r*   s    r   
class_namezFrame.class_name*  s    ''(CDDr!   c                2    | j                  t              dk(  S )zP
        Returns whether this frame has a `__tracebackhide__` variable.
        1)ry   r   r*   s    r   has_tracebackhidezFrame.has_tracebackhide.  s    
 ''(FG3NNr!   c                   | j                   t        v rt        | j                        dk(  sJ yt	        d | j
                  D              | j                  z   }t        j                  || j                        s$J d| d| j                   d| j
                          |r$| j
                  D ]  }|j                  d        yy)	z1
        Checks that the frame is valid.
        r   Nc              3  4   K   | ]  }|j                     y wr#   )r   ).0r   s     r   	<genexpr>z#Frame.self_check.<locals>.<genexpr>?  s     DUejjDs   zFrame time mismatch, should be z, was z, T)	recursive)r   rZ   r>   r   sumr   r   mathiscloser   
self_check)r   r   calculated_timer   s       r   r   zFrame.self_check5  s     ??88t~~&!+++ DdmmDDtGYGYY||TYY
 	a,_,=VDII;bQUQ^Q^P_`	a 
  1  4 01 r!   c                v    d| j                   | j                  t        | j                        | j                  fz  S )Nz9Frame(identifier=%s, time=%f, len(children)=%d), group=%r)r   r   r>   r   r   r*   s    r   __repr__zFrame.__repr__H  s6    JOOIIJJ	N
 
 	
r!   ) Nr   )r   strr   zSequence[Frame] | Noner   r   )r   r   r   r   )r   r   returnr
   )r   r   )r   r   )r   
str | None)r   z
int | None)r   boolr#   )r^   r
   r_   r   )rb   Sequence[Frame]r_   r   r   r   )ru   r   r   r   )T)r   r   r   None)__name__
__module____qualname____doc____annotations__r    r   r+   staticmethodr-   propertyr1   r7   r:   r?   rC   rF   rU   rW   r   rc   r3   rg   r   rl   ry   r{   r~   r   r   ro   r!   r   r
   r
   .   s    
K    )++/	&"%& )& 	&.	2 : :     ) ) - - 2 2 % %@  6 $ $
   0$& > > = = % %
!. E E O O1&
r!   r
   c                  ~    e Zd ZU ded<   ded<   ded<   ddZedd       Zedd	       Zdd
ZddZ	ed        Z
d Zy)
FrameGroupzlist[str] | None
_librariesrX   _frameszlist[Frame] | None_exit_framesc                    || _         t        t        j                               | _        g | _        d | _        d | _        | j                  |       y r#   )	rootr   uuiduuid4idr   r   r   	add_frame)r   r   s     r   r    zFrameGroup.__init__V  s=    	djjl# tr!   c                N   | j                   g }| j                  D ]v  }|j                  s|j                  j                  t        j
                        d   }t        j                  j                  |      \  }}|sa||vsf|j                  |       x || _         | j                   S r9   )	r   rb   rF   r   rH   rI   rK   splitextr[   )r   	librariesr^   libraryr%   s        r   r   zFrameGroup.libraries_  s    ??"#%I 2((#3399"&&A!DG!#!1!1'!:JGQ7)#;!((12 (DOr!   c                ,    t        | j                        S r#   )ri   r   r*   s    r   rb   zFrameGroup.framesn  s    T\\""r!   c                    |j                   r|j                   j                  |       | j                  j                  |       | |_         y r#   )r   remove_framer   r[   r   r^   s     r   r   zFrameGroup.add_framer  s4    ;;KK$$U+E"r!   c                h    |j                   | u sJ | j                  j                  |       d |_         y r#   )r   r   r)   r   s     r   r   zFrameGroup.remove_framey  s-    {{d"""E"r!   c                      j                   Jg } j                  D ]2  }t         fd|j                  D              s"|j	                  |       4 | _          j                   S )z^
        Returns a list of frames whose children include a frame outside of the group
        c              3  <   K   | ]  }|j                   k7    y wr#   )r   )r   r5   r   s     r   r   z)FrameGroup.exit_frames.<locals>.<genexpr>  s     ?1qww$?s   )r   rb   anyr   r[   )r   exit_framesr^   s   `  r   r   zFrameGroup.exit_frames~  s_    
 $')K .???&&u-. !,D   r!   c                2    dt        | j                        z  S )NzFrameGroup(len(frames)=%d))r>   rb   r*   s    r   r   zFrameGroup.__repr__  s    +c$++.>>>r!   N)r   r
   )r   z	list[str]r   )r^   r
   )r   r   r   r   r    r   r   rb   r   r   r   r   ro   r!   r   r   r   Q  sd      $$   # #
 ! !?r!   r   )
__future__r   r   rH   rJ   r   typingr   pyinstrument.frame_infor   r   r   r   rk   SELF_TIME_FRAME_IDENTIFIEROUT_OF_CONTEXT_FRAME_IDENTIFIERDUMMY_ROOT_FRAME_IDENTIFIER	frozensetre   rZ   r
   r   ro   r!   r   <module>r      s    "  	 
    # % "4 & '"'#	  '"' `
 `
F	<? <?r!   