
    BVh                         d 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dlmZ ddl	m
Z
  G d	 d
e      Zda G d de      Z G d dej                        Zd Zy)zHandles function calls, by generating compiled function names and calls.

Note: this transformer does not rename the top level object being converted;
that is the caller's responsibility.

Requires function_scopes.
    N)	converter)anno)parser)
qual_names)	templates)
ag_loggingc                       e Zd ZdZd Zy)	_FunctionTc                     d | _         y N)context_nameselfs    a/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/autograph/converters/call_trees.py__init__z_Function.__init__(   s
    D    N)__name__
__module____qualname__no_rootr    r   r   r
   r
   $   s    'r   r
   Fc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	_ArgTemplateBuilderzConstructs a tuple representing the positional arguments in a call.

  Example (yes, it's legal Python 3):

      f(*args1, b, *args2, c, d)  ->  args1 + (b,) + args2 + (c, d)
  c                 .    g | _         g | _        d| _        y )NF)_arg_accumulator_argspec
_finalizedr   s    r   r   z_ArgTemplateBuilder.__init__7   s    DDMDOr   c                     | j                   rT| j                  j                  t        j                  | j                   t        j
                                      g | _         y y )N)eltsctx)r   r   appendgastTupleLoadr   s    r   _consume_argsz!_ArgTemplateBuilder._consume_args<   sE    
mm
**$//TYY[
AC d r   c                 :    | j                   j                  |       y r   )r   r!   r   as     r   add_argz_ArgTemplateBuilder.add_argB   s      #r   c           
          | j                          | j                  j                  t        j                  t        j
                  dt        j                         d d       |gd             y )Ntupler    
annotationtype_commentr   argskeywords)r%   r   r!   r"   CallNamer$   r'   s     r   add_starargz_ArgTemplateBuilder.add_starargE   sP    MM		IITYY[TN		r   c                 2    | j                          d| _        y )NT)r%   r   r   s    r   finalizez_ArgTemplateBuilder.finalizeN   s    DOr   c                 \   | j                   sJ | j                  rk| j                  d   }t        dt        | j                              D ]8  }t	        j
                  |t	        j                         | j                  |         }: |S t	        j                  g t	        j                               S )Nr      )	r   r   rangelenr"   BinOpAddr#   r$   )r   resultis      r   to_astz_ArgTemplateBuilder.to_astR   s    ???}}}}QfQDMM*+ B!FDHHJa0@ABm::b$))+&&r   N)
r   r   r   __doc__r   r%   r)   r4   r6   r?   r   r   r   r   r   /   s%    
!$'r   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	CallTreeTransformerz9Transforms the call tree by renaming transformed symbols.c                     t        j                  |d      s| j                  |      S | j                  t           5 }t        j
                  |d      |_        | j                  |      cd d d        S # 1 sw Y   y xY w)Nfunction_context_name)r   hasannogeneric_visitstater
   getannor   )r   nodefn_scopes      r   visit_Lambdaz CallTreeTransformer.visit_Lambda_   si    <<56 %%	I	 &("ll41HIh%& & &s   ,A11A:c                    | j                  |j                        |_        | j                  |j                  j                        |j                  _        t	        |j                  j
                        D ]0  \  }}|	| j                  |      |j                  j
                  |<   2 | j                  t           5 }t        j                  |d      sJ d       t        j                  |d      |_        | j                  |j                        |_        |j                  r | j                  |j                        |_        |cd d d        S # 1 sw Y   y xY w)NrD   zCThe function_scopes converter always creates a scope for functions.)visit_blockdecorator_listr0   defaults	enumeratekw_defaultsvisitrG   r
   r   rE   rH   r   bodyreturns)r   rI   r>   drJ   s        r   visit_FunctionDefz%CallTreeTransformer.visit_FunctionDefh   s   **4+>+>?D))$))*<*<=DII$))//0 11	
#'::a=		a 1 
I	 	( \\$ 78 Q
OQ8"ll41HIh""499-di	zz$,,/	 	 	s   :BE

Ec                 F    | j                  |j                        |_        |S r   )rM   rS   r   rI   s     r   
visit_WithzCallTreeTransformer.visit_Withz   s      +DIKr   c                    t               }|j                  D ]I  }t        |t        j                        r|j                  |j                         9|j                  |       K |j                          |j                         S )zBTies together all positional and *arg arguments in a single tuple.)
r   r0   
isinstancer"   Starredr4   valuer)   r6   r?   )r   rI   builderr(   s       r   _args_to_tuplez"CallTreeTransformer._args_to_tuple   sf     "#GYY 	At||	$AGG$	
 >>r   c                     |j                   rKt        j                  t        j                  dt        j                         dd      d|j                         S t        j                  d      S )zATies together all keyword and **kwarg arguments in a single dict.dictNr,   r   r/   None)r1   r"   r2   r3   r$   r   parse_expressionrX   s     r   _kwargs_to_dictz#CallTreeTransformer._kwargs_to_dict   sS    }}YY
))$))+$TK==	" " $$V,,r   c                    t        t        j                  |j                  t        j                  j
                  d            }| j                  t           j                  }| j                  |      }|j                  d      r|S |j                  |dz         r|S |dv rt        st        j                  d       da|S |dk(  rI| j                  j                  j                   j#                  t$        j&                  j(                        s|S d	}t+        j,                  ||j                  | j/                  |      | j1                  |      |
      }|S )N )defaultzag__..)zpdb.set_tracezipdb.set_trace
breakpointzDetected `pdb.set_trace()` in user code. The code generated by AutoGraph is not optimized for step-by-step debugging. See https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/autograph/g3doc/reference/debugging.md.TprintzA
      ag__.converted_call(func, args, kwargs, function_ctx)
    )funcr0   kwargsfunction_ctx)strr   rH   rk   BasicQNrG   r
   r   rF   
startswithset_trace_warnedr   warningr    useroptionsusesr   FeatureBUILTIN_FUNCTIONSr   replace_as_expressionr_   rd   )r   rI   	full_namerD   templatenew_calls         r   
visit_CallzCallTreeTransformer.visit_Call   s&   DLLDJJMM2FGI JJy1>>d#D G$k 1C78k EE	  kWHHMM!!&&y'8'8'J'JKkH ..YY  &##D)*,H Or   N)
r   r   r   r@   rK   rV   rY   r_   rd   r}   r   r   r   rB   rB   \   s#    A&$
$	-0r   rB   c                 d    t        j                  |       } t        |      j                  |       } | S )zTransform function call to the compiled counterparts.

  Args:
    node: AST
    ctx: EntityContext
  Returns:
    A tuple (node, new_names):
        node: The transformed AST
        new_names: set(string), containing any newly-generated names
  )r   resolverB   rR   )rI   r    s     r   	transformr      s.     
		D	!$	S	!	'	'	-$	+r   )r@   r"    tensorflow.python.autograph.corer    tensorflow.python.autograph.pyctr   r   r   r   !tensorflow.python.autograph.utilsr   objectr
   rr   r   BaserB   r   r   r   r   <module>r      sZ     6 1 3 7 6 8   *'& *'Zp).. pfr   