
    BVh                        d Z ddlZddlZddlZddlmZ ddlmZ ej                  Z	 ej                  d       Z ej                  d       Z G d de      Z G d	 d
e      Zi Z G d de      Z G d de      Z e       Z G d de      Z G d de      ZddZd Z G d dej2                        Zej4                  Zej8                  Zy)zGFunctions used to extract and analyze stacks.  Faster than Python libs.    N)graph_debug_info_pb2)	_tf_stackc                      t               gS N)SentinelMapper     O/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/util/tf_stack.py<lambda>r   #       9I8J r	   c                      t               gS r   )SentinelFilterr   r	   r
   r   r   $   r   r	   c                   *    e Zd ZdZdZdZd Zd Zd Zy)StackTraceTransformz4Base class for stack trace transformation functions.Nc                    | j                   t               | _         n| j                   t               k(  sJ d       | j                  | j                      }|d   | _        |j	                  |        | j                          | S )NzShared across threads?)_thread_key_get_thread_key_stack_dictparentappendupdate)selfstacks     r
   	__enter__zStackTraceTransform.__enter__-   ss     (*d!22L4LL2T--.E)DK	LLKKMKr	   c                 h    | j                   | j                     j                         }|| u sJ d       y )NzConcurrent access?)r   r   pop)r   unused_typeunused_valueunused_tracebacktops        r
   __exit__zStackTraceTransform.__exit__;   s3    


4++
,
0
0
2C$;,,,;r	   c                     t        d      N subclasses need to override thisNotImplementedErrorr   s    r
   r   zStackTraceTransform.update?       
@
AAr	   )	__name__
__module____qualname____doc__r   r   r   r"   r   r   r	   r
   r   r   '   s    <++-Br	   r   c                   &    e Zd ZdZeZd Zd Zd Zy)StackTraceMapperz@Allows remapping traceback information to different source code.c                 6    t        j                         | _        y r   )r   PyBindSourceMapinternal_mapr(   s    r
   __init__zStackTraceMapper.__init__G   s    !113Dr	   c                     | j                   j                  t        | j                         j	                                      y r   )r2   	update_totupleget_effective_source_mapitemsr(   s    r
   r   zStackTraceMapper.updateJ   s-    d&C&C&E&K&K&M NOr	   c                     t        d      )zFReturns a map (filename, lineno) -> (filename, lineno, function_name).r%   r&   r(   s    r
   r7   z)StackTraceMapper.get_effective_source_mapM   s    
@
AAr	   N)	r*   r+   r,   r-   _source_mapper_stacksr   r3   r   r7   r   r	   r
   r/   r/   C   s    H%+4PBr	   r/   c                       e Zd Zd Zy)r   c                     t         S r   )
EMPTY_DICTr(   s    r
   r7   z'SentinelMapper.get_effective_source_mapW   s    r	   N)r*   r+   r,   r7   r   r	   r
   r   r   U   s    r	   r   c                   &    e Zd ZdZeZd Zd Zd Zy)StackTraceFilterzFAllows filtering traceback information by removing superfluous frames.c                 6    t        j                         | _        y r   )r   PyBindFileSetinternal_setr(   s    r
   r3   zStackTraceFilter.__init___   s    !//1Dr	   c                 h    | j                   j                  t        | j                                      y r   )rB   r5   setget_filtered_filenamesr(   s    r
   r   zStackTraceFilter.updateb   s$    D$?$?$A BCr	   c                     t        d      r$   r&   r(   s    r
   rE   z'StackTraceFilter.get_filtered_filenamese   r)   r	   N)	r*   r+   r,   r-   _source_filter_stacksr   r3   r   rE   r   r	   r
   r?   r?   [   s    N%+2DBr	   r?   c                       e Zd Zd Zy)r   c                     t         S r   )	EMPTY_SETr(   s    r
   rE   z%SentinelFilter.get_filtered_filenamesn   s    r	   N)r*   r+   r,   rE   r   r	   r
   r   r   l   s    r	   r   c                   (     e Zd ZdZ fdZd Z xZS )CurrentModuleFilterzFFilters stack frames from the module where this is used (best effort).c                     t         |           d }d }t        j                         }	 |#|j                  }|t        j
                  |      }|| _        d | _        ~~y # ~~w xY wr   )superr3   inspectcurrentframef_backgetfile	_filename_cached_set)r   filter_filenameouter_ff	__class__s       r
   r3   zCurrentModuleFilter.__init__u   sr    	GOGA	
 ((#OOG4/&dn d 
 
s   3A A#c                     | j                   | j                   S t        | j                  f      }| j                  || j                  j	                         z  }|| _         |S r   )rT   	frozensetrS   r   rE   )r   filtered_filenamess     r
   rE   z*CurrentModuleFilter.get_filtered_filenames   s\    #"DNN#45{{DKK>>@@)Dr	   )r*   r+   r,   r-   r3   rE   __classcell__rX   s   @r
   rL   rL   r   s    N,r	   rL   c                     t               }t        j                  t        |   d   j                  t
        |   d   j                  |       S )aw  An eager-friendly alternative to traceback.extract_stack.

  Args:
    stacklevel: number of initial frames to skip when producing the stack.

  Returns:
    A list-like FrameSummary containing StackFrame-like objects, which are
    namedtuple-like objects with the following fields: filename, lineno, name,
    line, meant to masquerade as traceback.FrameSummary objects.
  r   )r   r   extract_stackr:   r2   rG   rB   )
stacklevel
thread_keys     r
   r_   r_      sH      *		 	 J'+88J'+88
 r	   c                 H    t        j                  | j                               S r   )r   LoadTracesFromDebugInfoSerializeToString)
debug_infos    r
   rc   rc      s    		*	*:+G+G+I	JJr	   c                   (     e Zd Z fdZ fdZ xZS )GraphDebugInfoBuilderc                 F    |j                         }t        | 	  ||       y r   )rd   rN   AppendGraphDebugInfo)r   fn_namefn_debug_infodebug_info_strrX   s       r
   ri   z*GraphDebugInfoBuilder.AppendGraphDebugInfo   s     "446N	G .9r	   c                 n    t         |          }t        j                         }|j	                  |       |S r   )rN   Buildr   GraphDebugInfoParseFromString)r   rl   re   rX   s      r
   rn   zGraphDebugInfoBuilder.Build   s0    W]_N%446J~.r	   )r*   r+   r,   ri   rn   r\   r]   s   @r
   rg   rg      s    : r	   rg   )   )r-   collectionsrO   	threadingtensorflow.core.frameworkr   tensorflow.python.utilr   	get_identr   defaultdictr:   rG   objectr   r/   r=   r   r?   rZ   rJ   r   rL   r_   rc   rg   
StackTraceStackSummary
StackFrameFrameSummaryr   r	   r
   <module>r}      s    N    : , %%
 0//0JK ///0JK B& B8B* B 
% B* B K	% !* !H&K
I;; 
 ####r	   