o
    i ec                     @   sp   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	d
ZG dd dejZdS )z1The implementation of `tf.data.Dataset.snapshot`.    N)dataset_ops)structured_function)dtypes)tensor_spec)gen_experimental_dataset_opsAUTOc           	      C   s\   d}|du r| j |d} dd }dd }n|}t| |||||d}|dur,|j||d}|S )z%See `Dataset.snapshot()` for details.N)namec                 S   s   | t   S N)multiprocessing	cpu_count)index_ r   U/var/www/myenv/lib/python3.10/site-packages/tensorflow/python/data/ops/snapshot_op.py<lambda>)   s    z_snapshot.<locals>.<lambda>c                 S   s   |S r	   r   )r   elemr   r   r   r   *       )input_datasetpathcompressionreader_func
shard_funcr   )	enumerate_SnapshotDatasetmap)	r   r   r   r   r   r   project_funclocal_shard_funcdatasetr   r   r   	_snapshot   s"   
	r   c                       s<   e Zd ZdZ					d
 fdd	Zdd Zdd	 Z  ZS )r   zBA dataset that allows saving and re-use of already processed data.NFc	           
         s   |d u rdd }|| _ || _|| _tj||  d tt|j|d| _	tj||  d ||d| _
| j
jtg tjsV| j
jtg tjsVtd| j
j d|| _tj|j|| j	jj| j
jjf|| j	j| j
jd	| j}	t ||	 d S )
Nc                 S   s   | j dd t tjdS )Nc                 S   s   | S r	   r   )xr   r   r   r   J   r   z=_SnapshotDataset.__init__.<locals>.<lambda>.<locals>.<lambda>)cycle_lengthnum_parallel_calls)
interleaver
   r   r   AUTOTUNE)datasetsr   r   r   r   I   s
    z+_SnapshotDataset.__init__.<locals>.<lambda>z.reader_func)input_structureuse_legacy_functionz.shard_func)r   r&   z_Invalid `shard_func`. `shard_func` must return `tf.int64` scalar tensor but its return type is .)r   r   r   )_input_dataset_path_compressionr   StructuredFunctionWrapper_transformation_namer   DatasetSpecelement_spec_reader_func_shard_funcoutput_structureis_compatible_withr   
TensorSpecr   int32int64	TypeError_nameged_opssnapshot_dataset_v2_variant_tensorfunctioncaptured_inputs_common_argssuper__init__)
selfr   r   r   r   r   pending_snapshot_expiry_secondsr&   r   variant_tensor	__class__r   r   r?   >   sV   




	z_SnapshotDataset.__init__c                 C   s   | j | jgS r	   )r/   r0   r@   r   r   r   
_functionss   s   z_SnapshotDataset._functionsc                 C   s   dS )NzDataset.snapshot()r   rE   r   r   r   r,   v   s   z%_SnapshotDataset._transformation_name)NNNFN)__name__
__module____qualname____doc__r?   rF   r,   __classcell__r   r   rC   r   r   ;   s    5r   )r   NNN)rJ   r
   tensorflow.python.data.opsr   r   tensorflow.python.frameworkr   r   tensorflow.python.opsr   r8   r   UnaryUnchangedStructureDatasetr   r   r   r   r   <module>   s   
!