o
    i e"                     @   s  d 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 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 Zdd Zdd Zdd Zd(ddZddddZdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S ))z,Autograph specifc overrides for dataset_ops.    )control_flow)py_builtins)take_while_ops)dataset_ops)constant_op)dtypes)ops)	array_ops)cond)control_flow_assert)gen_string_ops)math_ops)nestc                 C   s   ddl m} |j| ||ddS )zFVariant of Dataset.scan with semantics of general-purpose computation.r   )scan_opF)use_default_device)tensorflow.python.data.opsr   _ScanDataset)ds
init_statebodyr    r   [/var/www/myenv/lib/python3.10/site-packages/tensorflow/python/data/ops/dataset_autograph.py_general_purpose_scan   s   r   c                    s    t  s tdfddd }dd }|| fdd}	d	d
 }
dd }t| |	} durF| t|
} | |}| dS )z@Overload of _dataset_for_stmt with early stopping. See for_stmt.r   )z<internal dummy>c                 S   s   d S Nr   )unused_dummyr   r   r   dummy_set_stateH      z0_tf_ag_dataset_for_stmt.<locals>.dummy_set_statec                   S   s   t dfS )Nr   )r   constantr   r   r   r   dummy_get_stateK   s   z0_tf_ag_dataset_for_stmt.<locals>.dummy_get_statec                    sv   | |   fdd}dur( }t  ||fdd}n	tdf}| }||f}|}||fS )zMain body of the Dataset.scan.c                     s(      } t j| dd | S )NF)check_shapes)r   verify_tf_loop_vars)new_loop_vars)r   	get_state	init_varsiterate	loop_varsoptssymbol_namesr   r   	main_pathU   s   z=_tf_ag_dataset_for_stmt.<locals>.scan_body.<locals>.main_pathNc                      s    S r   r   r   )r%   r   r   <lambda>d       z<_tf_ag_dataset_for_stmt.<locals>.scan_body.<locals>.<lambda>T)r
   r   r   )
scan_statescan_inputsr(   
extra_condr!   scan_outputsnew_scan_stater   
extra_testr"   r#   r&   	set_stater'   )r$   r%   r   	scan_bodyP   s   

z*_tf_ag_dataset_for_stmt.<locals>.scan_bodyc                 S      |S r   r   )unused_loop_varsr-   r   r   r   take_while_predicaten   r   z5_tf_ag_dataset_for_stmt.<locals>.take_while_predicatec                 S   s   |\}}|}|S r   r   )unused_reduce_stater.   output_loop_varsunused_extra_condnew_reduce_stater   r   r   reduce_bodyq   s   z,_tf_ag_dataset_for_stmt.<locals>.reduce_bodyN)	r   verify_loop_init_varsr   r   r   applyr   
take_whilereduce)r   r1   r   r"   r2   r'   r&   r   r   r3   r6   r;   final_loop_varsr   r0   r   _tf_ag_dataset_for_stmt1   s    
rA   c                 C   s>   t | j}t|dkr| jtjtjdS | jdd tjdS )N   )num_parallel_callsc                  W   s   t tj| S r   )r   map_structurer   abs)er   r   r   r)      s    z$_tf_ag_dataset_abs.<locals>.<lambda>)	r   flattenelement_speclenmapr   rE   r   AUTOTUNE)r   specsr   r   r   _tf_ag_dataset_abs}   s   rM   c                 C   s~   |   }tdt|g}ttt	t
|tjt
|tj|gg t|}W d   |S 1 s8w   Y  |S )z@Autograph override of the builtin len for dataset_ops.DataSetV2.z6len requires dataset with definitive cardinality, got N)cardinalityr   string_join	as_stringr   control_dependenciesr   Assertr   logical_and	not_equalr   INFINITEUNKNOWNr	   identity)slmsgr   r   r   _tf_ag_dataset_len   s&   
r[   c                 C   s
   |  |S r   )	enumerate)r   startr   r   r   _tf_ag_dataset_enumerate      
r^   F)strictc                 G   s   | rt dtj|S )Nz#strict zip not supported by Dataset)
ValueErrorr   	DatasetV2zip)r`   	iterablesr   r   r   _tf_ag_dataset_zip   s   re   c                 G   s   t j|| S r   )r   rb   rc   rJ   )fnrd   r   r   r   _tf_ag_dataset_map   s   rg   c                 C   s
   | | S r   )filter)rf   iterabler   r   r   _tf_ag_dataset_filter   r_   rj   c                 C   sp   t | j}t|dks|d jtjkrtd| j| 	dd }|
d}|tjdtjddd }|S )	NrB   r   zYin graph mode, the "any" builtin only supports datasets that return bool scalars; got: {}c                 S   s   | S r   r   )xr   r   r   r)      r*   z$_tf_ag_dataset_any.<locals>.<lambda>Fdtypec                 S   r4   r   r   _yr   r   r   r)      r*   )r   rG   rH   rI   rm   r   boolra   formatrh   taker?   r   r   ri   rL   r   r   r   r   _tf_ag_dataset_any   s   
ru   c                 C   sn   t | j}t|dks|d jtjkrtd| j| 	t
j}|d}|tjdtjddd }|S )NrB   r   zYin graph mode, the "all" builtin only supports datasets that return bool scalars; got: {}Trl   c                 S   r4   r   r   rn   r   r   r   r)      r*   z$_tf_ag_dataset_all.<locals>.<lambda>)r   rG   rH   rI   rm   r   rq   ra   rr   rh   r   logical_notrs   r?   r   r   rt   r   r   r   _tf_ag_dataset_all   s   
rw   c                   C   s   t jtjt tjtjt tj	tjt
 tjtjt tjtjt tjtjt tjtjt tjtjt tjtjt dS )z;Registers the autograph specific overrides for dataset_ops.N)r   for_loop_registryregisterr   rb   rA   r   abs_registryrM   len_registryr[   enumerate_registryr^   zip_registryre   map_registryrg   filter_registryrj   any_registryru   all_registryrw   r   r   r   r   register_overrides   s   r   N)r   )__doc__%tensorflow.python.autograph.operatorsr   r   'tensorflow.python.data.experimental.opsr   r   r   tensorflow.python.frameworkr   r   r   tensorflow.python.opsr	   r
   r   r   r   tensorflow.python.utilr   r   rA   rM   r[   r^   re   rg   rj   ru   rw   r   r   r   r   r   <module>   s2   L	
	