
    BVhH                        d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z dZdZd	Zd
ZdZdZdZdZdZdZ ej,                  d      Z ej,                  d      Z ej,                  d      Z ej,                  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&d!Z'd"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/eeeee e!e"e#e%e&e'e(e)e$e*e+e,e.e-e/gZ0 ej,                  d*      Z1d+Z2d,Z3d-Z4dZ5d.Z6dZ7d/Z8d0Z9d1Z:d2Z;d3Z<e4d4e5Z=e4d4e6Z>e4d4e7Z?e4d4e8Z@e4d4e9ZAe4d4e:ZBe4d4e;ZCe4d4e<ZDe=e>e@eAeBeCeDe?fZEej                  ZF ej                  d5d6d78      ZH ej                  d9d:d;8      ZJ ej                  d<d:d=8      ZK G d> d?eL      ZMy)@z-Utilities to handle tensor tracer parameters.    N)flags)
linalg_ops)math_ops)
tf_loggingzpart-tensorzfull-tensorfull_tensor_summaryznan-infnormzmax-abssummaryhistorybriefdetailedz\s*--([^=]+)='([^']*)'z\s*--([^=]+)="([^"]*)"z\s*--([^=]+)=(\S*)z\s*--([^=]+)\s*TENSOR_TRACER_FLAGSenable
trace_modetrace_scalarsubmodeexcluded_opnamesexcluded_optypesincluded_opnamesincluded_optypestrace_level	trace_dirreport_fileuse_test_undeclared_outputs_dirop_rangedump_graphs
signaturescollect_summary_per_coreuse_temp_cacheinspect_traceuse_fingerprint_subdirectoryflush_summariesz(\d+):(\d+)TEST_UNDECLARED_OUTPUTS_DIR   tensor_tracermaxminsparsitymeanvarsize_delta_thresholdg      ?z1Log if history based diff crosses this threshold.)defaulthelptt_check_filterFz+Terminate early to check op name filtering.tt_single_core_summariesz0Report single core metric and avoid aggregation.c                       e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Ze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)TTParametersz5A class that handles the parameters of Tensor Tracer.Nc                    |r|| _         nt        j                  | _         | j                          | j	                         | _        | j                         | _        | j                         | _	        | j                         | _        | j                         | _        | j                  t              | _        | j                  t"              | _        | j                  t&              | _        | j                  t*              | _        | j/                  t0              | _        | j
                  t4        t6        t8        t:        t<        fv | _        | j/                  t@              | _!        | j/                  tD              | _#        | j/                  tH              | _%        | jM                  tN              \  }| _(        | jS                  tT        tV              | _,        | j[                         | _.        | j/                  t^              | _0        | j`                  rtc        jd                  d       | j/                  tf              | _4        | jk                         r| jm                          y y )NzEAggregate signatures are approximate for mean, variance and sparsity.)7_envosenviron_validate_flag_names_get_trace_moder   _get_submoder   _get_trace_dirr   _get_report_filepathreport_file_path_get_op_ranger   _flag_value_to_re_listFLAG_NAME_EXCLUDED_OPNAMESexcluded_opname_re_listFLAG_NAME_EXCLUDED_OPTYPESexcluded_optype_re_listFLAG_NAME_INCLUDED_OPNAMESincluded_opname_re_listFLAG_NAME_INCLUDED_OPTYPESincluded_optype_re_list
is_flag_onFLAG_NAME_TRACE_SCALAR_OPStrace_scalar_opsTRACE_MODE_NAN_INFTRACE_MODE_NORMTRACE_MODE_HISTORYTRACE_MODE_MAX_ABSTRACE_MODE_SUMMARYuse_compact_traceFLAG_NAME_TEMP_CACHE_VARuse_temp_cache_varFLAG_NAME_INSPECT_TRACEr   FLAG_NAME_FINGERPRINT_DIRuse_fingerprint_subdirget_flag_value"FLAG_NAME_DUMP_BEFORE_AFTER_GRAPHSgraph_dump_path_get_flag_int_valueFLAG_NAME_TRACE_LEVEL_TT_DEFAULT_TRACE_LEVELr   _get_summary_signaturessummary_signaturesFLAG_NAME_SUMMARY_PER_COREr   loggingwarningFLAG_FLUSH_SUMMARY$flush_summaries_with_outside_compile
is_enabled_check_flag_errors)selfenvr+   s      Y/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/tpu/tensor_tracer_flags.py__init__zTTParameters.__init__   s   
di**di**,DO$$&DL((*DN 557D&&(DM#'#>#>"$$D #'#>#>"$$D  $(#>#>"$$D #'#>#>"$$D  !OO,FGD!__1C1@1C1C1C	1E ED
 #oo.FGD)@AD"&//2K"LD"11*,At//0E0GID"::<D$(OO4N$OD!$$oo ' (041D- 
     c                 d    | j                   t        t        fv r| j                  st	        d      y y )NzWtrace_dir must be explicitly provided in TENSOR_TRACER_FLAGS when summary mode is used.)r   rN   TRACE_MODE_FULL_TENSOR_SUMMARYr   
ValueErrorrd   s    rf   rc   zTTParameters._check_flag_errors   s<    -/MNN^^ J K 	K  Orh   c                 6   | j                  t              \  }}|r~|r|| j                         rlt        j                  j                  |      rt        d|z        | j                  j                  t              }t        j                  j                  ||      }|S )z(Sets the path of the output report file.zZIf use_test_undeclared_outputs_dir is set,report_file_path cannot be an absolute path (%s))rU   FLAG_NAME_REPORT_FILEr   r5   pathisabsrk   r4   get$_TEST_UNDECLARED_OUTPUTS_DIR_ENV_VARjoin)rd   foundr<   outputs_dirs       rf   r;   z!TTParameters._get_report_filepath   s     #112GHE!d&J&J&L	'	( L*+ , 	, IIMM"FGkk3CDrh   c                     | j                  t              \  }}|r|sd}|S t        j                  |      }|sd}|S t	        |j                  d            t	        |j                  d            f}|S )z>Sets the index range of the Ops that we will consider tracing.)rw         )rU   FLAG_NAME_OP_RANGE_OP_RANGE_PATmatchintgroup)rd   rt   r   r|   s       rf   r=   zTTParameters._get_op_range   sl    ))*<=OE8ho)EhoEKKN#SQ%89HOrh   c                     | j                  t              \  }}|r,|r*| j                         rt        dt        dt        d      | j                         r| j
                  j                  t              }|S )NzCannot not use --z and --z at the same time)rU   FLAG_NAME_TRACE_DIRr   rk   )FLAG_NAME_USE_TEST_UNDECLARED_OUTPUTS_DIRr4   rq   rr   )rd   rt   r   s      rf   r:   zTTParameters._get_trace_dir   sj    **+>?E9tCCE IKL L ++-))-- DEirh   c                     | j                  t              \  }}|r|st        }t        t        t
        t        t        t        t        t        g}||vrt        d|d|      |S )z(Checks if the given trace mode is valid.zInvalid trace mode "z4" given to the Tensor_Tracer.Valid trace modes are: )rU   FLAG_NAME_TRACE_MODErK   rJ   TRACE_MODE_PART_TENSORTRACE_MODE_FULL_TENSORrM   rN   rj   rL   rk   )rd   rt   r   valid_trace_modess       rf   r8   zTTParameters._get_trace_mode   sr     ++,@AE:
"j24J+:	 **4>4EG H H rh   c                 (    | j                   t        k(  S N)r   _SUBMODE_BRIEFrl   s    rf   is_brief_modezTTParameters.is_brief_mode   s    <<>))rh   c                     | j                  t              \  }}|r|st        }|syt        t        g}||vrt	        d|d|      |S )z%Checks if the given submode is valid.NzInvalid submode "z1" given to the Tensor_Tracer.Valid submodes are: )rU   FLAG_NAME_SUBMODE_SUBMODE_DETAILEDr   rk   )rd   rt   r   valid_submodess       rf   r9   zTTParameters._get_submode   s]     (():;NE7!g'8Nn$181?A B B Nrh   c                     t         j                  | |      }|r|dfS t        j                  | |      }|r|dfS t        j                  | |      }|r|dfS t        j                  | |      }|r|dfS y)aG  Returns the match for the next TensorTracer flag.

    Args:
       tt_flags: a string that contains the flags.
       pos: where in flags to start the search.

    Returns:
       A pair where the first element is the regular-expression
       match found and the second element indicates if the match
       has a value.
    TF)NF)_FLAG_DOUBLE_QUOTE_PATr|   _FLAG_SINGLE_QUOTE_PAT_FLAG_NO_QUOTE_PAT_FLAG_NO_EQUAL_PAT)tt_flagsposr|   s      rf   match_next_flagzTTParameters.match_next_flag  s     #((37ED["((37ED[$$Xs3ED[$$Xs3EE\rh   c                    | j                   j                  t              }|syd}	 t        j	                  ||      \  }}|sy|j                  d      }|t        vrt        d|dt        dt              |j                         }b)z4Validates if the TensorTrace flags passed are valid.Nr   rx   zThe flag name "z'" passed via the environment variable "z$" is invalid. Valid flag names are:
)	r4   rq   FLAGS_ENV_VARr2   r   r~   VALID_FLAG_NAMESrk   end)rd   tensor_tracer_flagsr   r|   r+   	flag_names         rf   r7   z!TTParameters._validate_flag_names#  s    ))--6
C
--.A3GheQ++a.i	*	*  0@BC 	C IIKc rh   c                     t         S )z(Returns a tuple of supported signatures.)TT_SUMMARY_SIGNATURESrl   s    rf   _supported_signaturesz"TTParameters._supported_signatures5  s      rh   c                 l   | j                  t              }| j                         }g }|D ]T  }t        d|}||v r|j	                  |       $||v r|j	                  |       :t        j                  d|d|       V |st        dt        diS t        |      D ci c]  \  }}||
 c}}S c c}}w )zVerifies and returns the summary signatures.

    Returns:
      A dictionary of the signature identifiers {signature: index} that will be
      computed when trace_mode is summary.
    r+   zUnknown signature:z. Supported signatures: r   rx   )
_flag_value_as_listFLAG_NAME_SUMMARY_SIGNATURESr   
_TT_PREFIXappendr^   r_   TT_SUMMARY_MAX_ABSTT_SUMMARY_NORM	enumerate)rd   r   supported_signaturestt_signatures	signaturesignature_with_prefixidxs          rf   r[   z$TTParameters._get_summary_signatures9  s     ))*FGJ557M ;	)3Y?	*	*Y' $8823"$8: 	;;  !_a883<]3KLiinLLLs   B0c                    t         t        j                  t        t        j
                  t        t        j
                  t        t        j
                  t        t        j                  t        t        j
                  t        ddt        t        j                  t        t        j                  t        t        j                  t         t        j
                  t"        t        j$                  iS )zFReturns a map that contains the aggregate function for each signature.c                 V    t        j                  t        j                  |       |      S )N)axis)r   
reduce_maxabs)tr   s     rf   <lambda>z:TTParameters.get_signature_to_agg_fn_map.<locals>.<lambda>_  s    ("5"5hll1o;?#A rh   )r   )rK   r   r   rL   r   r   rM   rJ   r   TT_SUMMARY_MAXr   TT_SUMMARY_MIN
reduce_minTT_SUMMARY_SPARSITYreduce_meanTT_SUMMARY_MEANTT_SUMMARY_VARTT_SUMMARY_SIZE
reduce_sumrl   s    rf   get_signature_to_agg_fn_mapz(TTParameters.get_signature_to_agg_fn_mapS  s    
 Z__ 3 3 3 3 3 3Z__H//AH//!5!5X11H//X002 2rh   c                 `    g }| j                  |      \  }}|r|J |j                  d      }|S )zReturns the string list of a TensorTracer flag.

    Args:
      wanted_flag_name: the name of the flag we are looking for.

    Returns:
      The list value of the flag.
    ,)rU   split)rd   wanted_flag_namestring_value_listrt   
flag_values        rf   r   z TTParameters._flag_value_as_listh  sF     ++,<=E:###$**3/rh   c                     g }| j                  |      \  }}|r.|r,	 |j                  d      }|D cg c]  }t        |       }}|S |S c c}w # t        $ r t	        j
                  d||       Y |S w xY w)zReturns the integer list of a TensorTracer flag.

    Args:
      wanted_flag_name: the name of the flag we are looking for.

    Returns:
      the value of the flag.
    Raises:
      RuntimeError: If supposedly deadcode is reached.
    r   z$Cannot convert %s to int for flag %s)rU   r   r}   rk   r^   r_   )rd   r   int_listrt   r   integer_valuesint_vals          rf   _flag_value_as_int_listz$TTParameters._flag_value_as_int_listy  s     H++,<=E:*#))#.0>?WCL?? O8O	 @ *>(	*O*s"   A A	A 	A  A21A2c                     |}| j                  |      \  }}|r	 t        |      }|S |S # t        $ r t        j                  d|d|       Y |S w xY w)a1  Returns the int value of a TensorTracer flag.

    Args:
      wanted_flag_name: the name of the flag we are looking for.
      default_value: the default value for the flag, if not provided.
    Returns:
      the value of the flag.
    Raises:
      RuntimeError: If supposedly deadcode is reached.
    zCannot convert z to int for flag )rU   r}   rk   r^   r_   )rd   r   default_valueflag_int_valuert   r   s         rf   rX   z TTParameters._get_flag_int_value  sk     #N++,<=E:/Z >  /,. 	//s   ) $AAc                    | j                   j                  t              }|syd}	 t        j	                  ||      \  }}|sy|j                  d      }|r|j                  d      }nd}||k(  rd|fS |j                         }])aH  Returns the value of a TensorTracer flags.

    Args:
      wanted_flag_name: the name of the flag we are looking for.

    Returns:
      A pair where the first element indicates if the flag is
      found and the second element is the value of the flag.

    Raises:
      RuntimeError: If supposedly deadcode is reached.
    )FNr   Trx   ry   N)r4   rq   r   r2   r   r~   r   RuntimeError)rd   r   r   r   r|   	has_valuer   r   s           rf   rU   zTTParameters.get_flag_value  s     ))--6
C
%55
s$eY++a.i	[[^

	&	&ZIIKc rh   c                     g }| j                  |      \  }}|r|s|S |j                  d      }|D ](  }t        j                  |      }|j	                  |       * |S )z(Converts list of strings to compiled RE.r   )rU   r   recompiler   )rd   r   re_listrt   r   list_of_valuesvrs           rf   r>   z#TTParameters._flag_value_to_re_list  sg     G++I6E:
n%%c*N 
**Q-annQ Nrh   c                 b    | j                  |      \  }}|sy|y|j                         }|dv }|S )z%Returns True if the given flag is on.FT)1r   trueyyes)rU   lower)rd   r   rt   r   enableds        rf   rG   zTTParameters.is_flag_on  sF     ++I6E:!!#J::GNrh   c                     | j                  t              r4t        j                  d| j                  j                  t                     yy)z(Returns True if TensorTracer is enabled.z'Tensor Tracer is enabled with flags %s.TF)rG   FLAG_NAME_ENABLEr^   debugr4   rq   r   rl   s    rf   rb   zTTParameters.is_enabled  s6     '(mm=IIMM-02rh   c                 ,    | j                  t              S )zDecides the output directory of the report and trace files.

    Args:
       None.

    Returns:
       True if the output files should be written to the
       test-undeclared-outputs-directory defined via an
       env variable.
    )rG   r   rl   s    rf   r   z,TTParameters.use_test_undeclared_outputs_dir  s     ??DEErh   r   )__name__
__module____qualname____doc__rg   rc   r;   r=   r:   r8   r   r9   staticmethodr   r7   r   r[   r   r   r   rX   rU   r>   rG   rb   r    rh   rf   r2   r2      s    =- ^K$*  :$!M42*"., "DFrh   r2   )Nr   r5   os.pathr   abslr   tensorflow.python.opsr   r   tensorflow.python.platformr   r^   r   r   rj   rJ   rK   rM   rN   rL   r   r   r   r   r   r   r   r   r   r   rH   r   r?   rA   rC   rE   rY   r   rn   r   rz   rV   r   r]   rP   rR   rS   r`   r   r{   rr   rZ   r   _TT_NORM_TT_MAX_TT_MAX_ABS_TT_MIN_TT_SPARSITY_TT_MEAN_TT_VAR_TT_SIZEr   r   r   r   r   r   r   r   r   FLAGSDEFINE_floatDELTA_THRESHOLDDEFINE_boolTT_CHECK_FILTERTT_SINGLE_CORE_SUMMARIESobjectr2   r   rh   rf   <module>r      s   4 
  	  , * <& & !6       #$=> #$=> RZZ 56 RZZ 23 % # +  / / / / % ! % ,M )  &3 "+ 7 + ) : &  *1 : 3-&(= "<7/  

>*'D $ 



'2&0 *K8 &0!+\: '2&0'2(..,o~(*<>  	$%$$
=@ $%##	68 -5,,	;= sF6 sFrh   