
    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
 dd	lmZ dd
lmZ  G d de      Z G d dej"                        Zd Zy)zaConverter for list operations.

This includes converting Python lists to TensorArray/TensorList.
    N)	converter)
directives)anno)parser)
qual_names)	templates)activity)NodeAnnoc                       e Zd Zd Zy)
_Statementc                     d | _         y N)pop_uses)selfs    \/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/autograph/converters/lists.py__init__z_Statement.__init__+   s	    DM    N)__name__
__module____qualname__r    r   r   r   r   )   s    r   r   c                   ^    e 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y)ListTransformerz>Converts lists and related operations to their TF counterpart.c                 V    | j                  |      }d}t        j                  ||      S )Nz#
      ag__.new_list(elements)
    )elements)generic_visitr   replace_as_expressionr   nodetemplates      r   
visit_ListzListTransformer.visit_List2   s.    d#DH **8dCCr   c                     t        |j                        dk(  sJ t        |j                  t        j
                        sJ d}t        j                  ||j                  j                  |j                  d         S )N   z6
      target = ag__.list_append(target, element)
    r   )targetelement)	lenargs
isinstancefuncgast	Attributer   replacevaluer   s      r   _replace_append_callz$ListTransformer._replace_append_call9   se    tyy>Qdii000H yy		! r   c                    t        |j                  t        j                        sJ t	        j
                  |t        j                        }|j                  j                  }t	        j                  |t        j                  j                        r=t	        j
                  |t        j                  j                        j                         }nd}| j                  j                  j                  ||j                         }| j"                  t$           }|j&                  g |_        |j&                  j)                  ||f       t+        j,                  d|      S )Nlist_var_name)r1   )r(   r)   r*   r+   r   getannor
   
ARGS_SCOPEr-   hasannoBasicQNssfctxnamer
new_symbol
referencedstater   r   appendr   r   )r   r   scopetarget_nodetarget_namepop_var_namestmts          r   _replace_pop_callz!ListTransformer._replace_pop_callD   s    ( dii000LLx223E))//K ||K/LLdjjmm<@@Bkk88>>,,[%:J:JKL::j!D}}dmMM$-.**:MMr   c                     t        |j                        dk(  sJ | j                  |j                  d   t        j                  dt        j                  d            }d}t        j                  |||j                  d   |j                        S )Nr#   r   dtypeNonedefaultz
      ag__.list_stack(
          target,
          opts=ag__.ListStackOpts(
              element_dtype=dtype,
              original_call=orig_call))
    )rE   r$   	orig_call)r&   r'   get_definition_directiver   set_element_typer   r   r)   )r   r   rE   r    s       r   _replace_stack_callz#ListTransformer._replace_stack_callk   s    tyy>Q))		!##//7	 * 9E
H **yy|))	 r   c                    | j                  |      }t        |j                  t        j                        r|j                  j
                  }|dk(  r+t        |j                        dk(  r| j                  |      }|S |dk(  r+t        |j                        dk  r| j                  |      }|S |dk(  rQt        |j                        dk(  r9|j                  r|j                  d   j                  dk(  r| j                  |      }|S )Nr=   r#   popstackr   strict)r   r(   r)   r*   r+   attrr&   r'   r.   rC   keywordsargrL   )r   r   	func_names      r   
visit_CallzListTransformer.visit_Call   s    d#D $))T^^,))..i	h	C		Na$7((. K 3tyy>Q#6%%d+ K  c$))n&9$--"2"6"6("B ''-Kr   c                 :   t        |j                  t        j                        sJ |j                  r|j                  d   }nt        j                  d      }| j                  |j                  j                  t        j                  dt        j                  d            }| j                  |j                  j                  t        j                  dt        j                  d            }d}t        j                  ||j                  j                  ||||      S )Nr   rF   rE   rG   shapez
      target, pop_var_name = ag__.list_pop(
          target, element,
          opts=ag__.ListPopOpts(element_dtype=dtype, element_shape=shape))
    )r$   rA   r%   rE   rW   )r(   r)   r*   r+   r'   r   parse_expressionrJ   r-   r   rK   r   r   r,   )r   original_call_noderA   pop_elementrE   rW   r    s          r   _generate_pop_operationz'ListTransformer._generate_pop_operation   s    (--t~~>>>&++A.k++F3k ))%%##//7	 * 9E
 ))%%##//7	 * 9EH
 !&&,,! r   c                 
   | j                   t           j                  }|r@g }|D ]&  \  }}|j                  | j	                  ||             ( |j                  |       |}| j                   t           j                          |dfS )z3Inserts any separate pop() calls that node may use.N)r<   r   r   extendr[   r=   exit)r   r   r   replacementsrY   rA   s         r   _postprocess_statementz&ListTransformer._postprocess_statement   s    zz*%..Hl.6 L
*
l(();\J	LL $dJJz!:r   c                 t    | j                  || j                  t           j                  | j                        S )N)before_visitafter_visit)visit_blockr<   r   enterr`   )r   blocks     r   _visit_and_process_blockz(ListTransformer._visit_and_process_block   s8    ZZ
+11//  1 1r   c                     | j                  |j                        |_        | j                  |j                        |_        | j	                  |j
                        |_        |S r   )r   r'   rd   decorator_listrg   bodyr   r   s     r   visit_FunctionDefz!ListTransformer.visit_FunctionDef   sL    ""499-DI**4+>+>?D--dii8DIKr   c                     | j                  |j                        |_        | j                  |j                        |_        | j                  |j                        |_        |S r   )visitr$   rg   rj   orelserk   s     r   	visit_ForzListTransformer.visit_For   sG    **T[[)DK--dii8DI//<DKKr   c                     | j                  |j                        |_        | j                  |j                        |_        | j                  |j                        |_        |S r   rn   testrg   rj   ro   rk   s     r   visit_WhilezListTransformer.visit_While   G    

499%DI--dii8DI//<DKKr   c                     | j                  |j                        |_        | j                  |j                        |_        | j                  |j                        |_        |S r   rr   rk   s     r   visit_IfzListTransformer.visit_If   ru   r   c                     | j                  |j                        |_        | j                  |j                        |_        |S r   )rd   itemsrg   rj   rk   s     r   
visit_WithzListTransformer.visit_With   s3    !!$**-DJ--dii8DIKr   N)r   r   r   __doc__r!   r.   rC   rL   rU   r[   r`   rg   rl   rp   rt   rw   rz   r   r   r   r   r   /   sJ    FD	%NN(*$L1r   r   c                     t        j                  |       } t        j                  | |d       } t        |      j	                  |       S r   )r   resolver	   r   rn   )r   r8   s     r   	transformr~      s<    			D	!$			$T	*$			#	#D	))r   )r{   r*    tensorflow.python.autograph.corer    tensorflow.python.autograph.langr    tensorflow.python.autograph.pyctr   r   r   r   0tensorflow.python.autograph.pyct.static_analysisr	   6tensorflow.python.autograph.pyct.static_analysis.annosr
   objectr   Baser   r~   r   r   r   <module>r      sK     6 7 1 3 7 6 E K yinn yx*r   