
    \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 erd 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 d dlmZ d dlmZ eZee   Z edeee   eeee   d      Z eddei      Zeeeef   Zeedf   Zeeef   Zeeeee   f   Zeeeef      ZdZdZ er	dddefdZ!ndddefdZ!d&dZ"dddddeddfdZ#e fdd d!d"ded#edd$f
d%Z$y)'    N)deque)PY311)filename_for_module)TYPE_CHECKING)LRUCache)	FrameType)Deque)List)Optional)Sequence)Tuple)	TypedDictProcessedFrame)abs_pathfilenamefunctionlinenomoduleProcessedThreadMetadataname.e      framer   returnc                 .    | j                   j                  S N)f_codeco_qualname)r   s    C/root/env/lib/python3.12/site-packages/sentry_sdk/profiler/utils.pyget_frame_namer    B   s    ||'''    c                 B   | j                   }|j                  }|j                  }	 |ri|d   dk(  rad| j                  v rSt	        | j                  d         j
                  D ].  }||j                  v sdj                  |j                  |      c S  	 |r`|d   dk(  rXd| j                  v rJ| j                  d   j
                  D ].  }||j                  v sdj                  |j                  |      c S  |S # t        t        f$ r Y vw xY w# t        t        f$ r Y |S w xY w)Nr   selfz{}.{}cls)r   co_varnamesco_namef_localstype__mro____dict__format__name__AttributeError
ValueError)r   r   r%   r   r$   s        r   r    r    G   s'   (( ~~
	 A& 8Vu~~=Uv 67?? BCs||+&~~cllDAAB
	 A% 7EU^^<S >>%088 BCs||+&~~cllDAAB ) 
+ 		 
+ 	
 	s=   AC6 2C6 C6 AD D 3D 6DDDD	raw_frameFrameIdc                 Z    | j                   j                  | j                  t        |       fS r   )r   co_filenamef_linenor    )r/   s    r   frame_idr4   q   s&    (()*<*<nY>WXXr!   fidcwdc                     |j                   j                  }	 |j                  d   }t        j
                  j                  ||      |t        ||      xs d | d   |j                  dS # t        $ r d }Y Nw xY w)Nr,      )r   r   r   r   r   )	r   r2   	f_globals	Exceptionospathjoinr   r3   )r5   r/   r6   r   r   s        r   extract_framer>   u   s~    ++H$$Z0  GGLLh/'9ATF$$   s   A( (A65A6zOptional[FrameType]cacher   max_stack_depthExtractedStackc                 r   t        |      }| "| j                  }|j                  |        |} | "t        d |D              }g }t	        |      D ]K  \  }}	|j                  |	      }
|
"t        |	||   |      }
|j                  |	|
       |j                  |
       M t        |      t        |      f}|||fS )aA  
    Extracts the stack starting the specified frame. The extracted stack
    assumes the specified frame is the top of the stack, and works back
    to the bottom of the stack.

    In the event that the stack is more than `MAX_STACK_DEPTH` frames deep,
    only the first `MAX_STACK_DEPTH` frames will be returned.
    )maxlenc              3   2   K   | ]  }t        |        y wr   )r4   ).0r/   s     r   	<genexpr>z extract_stack.<locals>.<genexpr>   s     Fihy)Fs   )
r   f_backappendtuple	enumerategetr>   setlenhash)r/   r?   r6   r@   
raw_framesrG   	frame_idsframesir5   r   stack_ids               r   extract_stackrT      s     &+/%BJ

!!)$	 

 F:FFIFI& 3		#=!#z!}c:EIIc5!e$ :Y/HY&&r!   )r/   r   r   r0   )%r;   collectionsr   sentry_sdk._compatr   sentry_sdk.utilsr   typingr   sentry_sdk._lru_cacher   typesr   r	   r
   r   r   r   typing_extensionsr   strThreadIdintProcessedStackr   r   r0   FrameIdsStackIdrA   ExtractedSampleDEFAULT_SAMPLING_FREQUENCYMAX_STACK_DEPTHr    r4   r>   rT    r!   r   <module>rf      s|   	  $ 0  .+H#YN sm	
	N (!	
 	G
 Wc\"H CHoG7Hd>.BBCNuX~%=>?O !   	(k (c (
'k 'c 'TYy [ s GW @ +	,'$,',' 
,' 	,'
 ,'r!   