
    iP                         S SK r S SKrS SKJr  S SKJr  S SKJrJrJrJ	r	J
r
Jr  S SKJr  SSKJr  \(       a  S SKJr   " S	 S
\\   5      rg)    N)datetime)reduce)TYPE_CHECKINGAnyDictListOptionalcast
SimpleSpan   )BaseSpanHandlerTreec                   ~   \ rS rSrSrS\4S jr   SS\S\R                  S\	\
   S	\	\   S
\	\\\
4      S\
S\4S jjr  SS\S\R                  S\	\
   S\	\
   S\
S\4S jjr  SS\S\R                  S\	\
   S\	\   S\
S\	\   4S jjrS\\   4S jrS\S\\   S\\   S\\   4S jrS\S   4S jrSS jrSrg)SimpleSpanHandler   z'Span Handler that manages SimpleSpan's.returnc                     g)zClass name.r    )clss    j/home/james-whalen/.local/lib/python3.13/site-packages/llama_index_instrumentation/span_handlers/simple.py
class_nameSimpleSpanHandler.class_name   s    "    Nid_
bound_argsinstanceparent_span_idtagskwargsc                 (    [        XU=(       d    0 S9$ )zCreate a span.)r   	parent_idr    r   )selfr   r   r   r   r    r!   s          r   new_spanSimpleSpanHandler.new_span   s     c$*"MMr   resultc                 J   U R                   U   n[        [        U5      n[        R                  " 5       Ul        UR
                  UR                  -
  R                  5       Ul        U R                     U =R                  U/-  sl
        SSS5        U$ ! , (       d  f       U$ = f)z#Logic for preparing to drop a span.N)
open_spansr
   r   r   nowend_time
start_timetotal_secondsdurationlockcompleted_spans)r$   r   r   r   r'   r!   spans          r   prepare_to_exit_span&SimpleSpanHandler.prepare_to_exit_span"   sy     s#J% 8GGIYY  TF*   Ys   2B
B"errc                     XR                   ;   aN  U R                     U R                   U   nS[        U5      0Ul        U =R                  U/-  sl        SSS5        U$ g! , (       d  f       W$ = f)zLogic for droppping a span.errorN)r)   r/   strmetadatadropped_spans)r$   r   r   r   r4   r!   r1   s          r   prepare_to_drop_span&SimpleSpanHandler.prepare_to_drop_span3   sd     //!s+!(#c( 3""tf,"  K  Ks   8A
A.c                     U R                   U R                  -   nU Vs/ s H  o"R                  b  M  UPM     sn$ s  snf )z+Helper method to get all parent/root spans.)r0   r9   r#   )r$   	all_spansss      r   _get_parentsSimpleSpanHandler._get_parentsE   s4    ((4+=+==	$<9a9<<<s   ;;parentaccspansc                 r   U(       d  U$ U Vs/ s H   oDR                   UR                  :X  d  M  UPM"     nnU(       d  U$ U Vs/ s H  oDU;  d  M
  UPM     nnU VVs/ s H,  nU R                  Xw/U Vs/ s H  oGU:w  d  M
  UPM     snS9PM.     nnnU[        S U5      -   $ s  snf s  snf s  snf s  snnf )zBuilds the tree by parent root.rA   rB   rC   c                 
    X-   $ Nr   )xys     r   <lambda>9SimpleSpanHandler._build_tree_by_parent.<locals>.<lambda>]   s    r   )r#   r   _build_tree_by_parentr   )	r$   rA   rB   rC   r>   childrenupdated_spanscchildren_treess	            r   rL   'SimpleSpanHandler._build_tree_by_parentJ   s     J$Bu!vzz(AAuBJ$)?Eqh->E? 	
  &&c])M]1f!])M '  	 	 
 V.??? C @ *N
s4   B$B$	B)B)B35	B.B.	B3.B3r   c           
        ^  SSK Jn  U R                  U R                  -   nU H  mTR
                  c  M  [        U4S jU 5       5      (       a  M.  [        R                  " STR
                   S35        T=R
                  S-  sl        UR                  [        TR
                  SS	95        M     U R                  5       n/ nU HH  nU R                  Xf/U Vs/ s H  owU:w  d  M
  UPM     snS
9n[        US S9n	UR                  U	5        MJ     / n
U" 5       nU H  nU H  nUR
                  c-  UR                  5       (       a  U
R                  U5        U" 5       nUR                  UR                    SUR"                   S3UR                   UR
                  UR$                  S9  M     M     U
R                  U5        U
$ ! [         a  n[        S5      eSnAff = fs  snf )zMethod for getting trace trees.r   r   zO`treelib` package is missing. Please install it by using `pip install treelib`.Nc              3   T   >#    U  H  oR                   TR                  :H  v   M     g 7frG   r   r#   ).0nsr>   s     r   	<genexpr>5SimpleSpanHandler._get_trace_trees.<locals>.<genexpr>m   s     Ayvv,ys   %(zParent with id z missing from spansz-MISSINGrT   rE   c                     U R                   $ rG   )r,   )rH   s    r   rJ   4SimpleSpanHandler._get_trace_trees.<locals>.<lambda>x   s    allr   )keyz ())tag
identifierrA   data)treelibr   ImportErrorr0   r9   r#   anywarningswarnappendr   r?   rL   sorted	all_nodescreate_noder   r.   r,   )r$   r   er=   parentsspan_groupspr>   this_span_groupsorted_span_grouptreestreegrpr1   s          `      r   _get_trace_trees"SimpleSpanHandler._get_trace_trees_   s   	$ ((4+=+==	A{{"AyAAA}<OPQz)  t!LM  ##%A"88cY)IYq&!Y)I 9 O !'<R S01  vC>>)~~''T*#v  88*Bt}}oQ7#xx>>	 !     	TW  	) 	& *Js#   G 	G!'G!
GGGc           	          U R                  5       nU H)  n[        UR                  SSS S95        [        S5        M+     g)zMethod for viewing trace trees.FTc                     U R                   $ rG   )r_   )nodes    r   rJ   5SimpleSpanHandler.print_trace_trees.<locals>.<lambda>   s    r   )stdoutsortingr[    N)rr   printshow)r$   ro   rp   s      r   print_trace_trees#SimpleSpanHandler.print_trace_trees   s9    %%'D$))5$<R)ST"I r   r   )NNN)NN)r   N)__name__
__module____qualname____firstlineno____doc__r7   r   inspectBoundArgumentsr	   r   r   r   r%   r2   BaseExceptionr:   r   r?   rL   rr   r}   __static_attributes__r   r   r   r   r      s   1#3 # #'(,)-
N
N **
N 3-	
N
 !
N tCH~&
N 
N 

N  #' $ ** 3-	
   
* #''+ ** 3-	
 m$  
*	$=d:. =
@ @'+J'7@@DZ@P@	j	@*/$v, /br   r   )r   rc   r   	functoolsr   typingr   r   r   r   r	   r
   'llama_index_instrumentation.span.simpler   baser   r`   r   r   r   r   r   <module>r      s6        A A > !F
3 Fr   