o
    ?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)Zuse_default_device)tensorflow.python.data.opsr   Z_ScanDataset)dsZ
init_statebodyr    r   m/home/www/facesmatcher.com/pyenv/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   )Z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)Zcheck_shapes)r   Z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   )Z
scan_stateZscan_inputsr"   
extra_condr   scan_outputsZ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   )Z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   )Zunused_reduce_stater&   Zoutput_loop_varsZunused_extra_condZnew_reduce_stater   r   r   reduce_bodyq   s   z,_tf_ag_dataset_for_stmt.<locals>.reduce_bodyN)	r   Zverify_loop_init_varsr   r   r   applyr   Z
take_whilereduce)r   r(   r   r   r)   r!   r    r   r   r*   r,   r-   Zfinal_loop_varsr   r'   r   _tf_ag_dataset_for_stmt1   s    
r0   c                 C   s>   t | j}t|dkr| jtjtjdS | jdd tjdS )N   )Znum_parallel_callsc                  W   s   t tj| S r   )r   Zmap_structurer   abs)er   r   r   r#      s    z$_tf_ag_dataset_abs.<locals>.<lambda>)	r   flattenelement_speclenmapr   r2   r   ZAUTOTUNE)r   specsr   r   r   _tf_ag_dataset_abs}   s   r9   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)Zcardinalityr   Zstring_join	as_stringr   Zcontrol_dependenciesr   Assertr   logical_and	not_equalr   ZINFINITEUNKNOWNr	   identity)slmsgr   r   r   _tf_ag_dataset_len   s&   
rC   c                 C   s
   |  |S r   )	enumerate)r   startr   r   r   _tf_ag_dataset_enumerate      
rF   F)strictc                 G   s   | rt dtj|S )Nz#strict zip not supported by Dataset)
ValueErrorr   	DatasetV2zip)rH   	iterablesr   r   r   _tf_ag_dataset_zip   s   rM   c                 G   s   t j|| S r   )r   rJ   rK   r7   )fnrL   r   r   r   _tf_ag_dataset_map   s   rO   c                 C   s
   | | S r   )filter)rN   iterabler   r   r   _tf_ag_dataset_filter   rG   rR   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 )	Nr1   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   r+   r   r   _yr   r   r   r#      r$   )r   r4   r5   r6   rU   r   boolrI   formatrP   taker/   r   r   rQ   r8   r   r   r   r   _tf_ag_dataset_any   s   
r]   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 )Nr1   r   zYin graph mode, the "all" builtin only supports datasets that return bool scalars; got: {}TrT   c                 S   r+   r   r   rV   r   r   r   r#      r$   z$_tf_ag_dataset_all.<locals>.<lambda>)r   r4   r5   r6   rU   r   rY   rI   rZ   rP   r   Zlogical_notr[   r/   r   r   r\   r   r   r   _tf_ag_dataset_all   s   
r^   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   Zfor_loop_registryregisterr   rJ   r0   r   Zabs_registryr9   Zlen_registryrC   Zenumerate_registryrF   Zzip_registryrM   Zmap_registryrO   Zfilter_registryrR   Zany_registryr]   Zall_registryr^   r   r   r   r   register_overrides   s   r`   N)r   )__doc__Z%tensorflow.python.autograph.operatorsr   r   Z'tensorflow.python.data.experimental.opsr   r   r   Ztensorflow.python.frameworkr   r   r   Ztensorflow.python.opsr	   r
   r   r   r   Ztensorflow.python.utilr   r   r0   r9   rC   rF   rM   rO   rR   r]   r^   r`   r   r   r   r   <module>   s2   L	
	