
    BVhd%                     :   d Z ddlZddlZddlZddlmZmZmZ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lmZ dZ de!dedee!   deeejD                  gejD                  f      de#dejD                  fdZ$	 	 	 d'de!dedee!   deeejD                  gejD                  f      dejD                  f
dZ%de!deejL                     fdZ'de!dejL                  deejD                  gejD                  f   dejD                  fdZ(de!defdZ)dee*e!f   defdZ+ G d  d!ejX                        Z- G d" d#ejX                        Z. G d$ d%ejX                        Z/de!dejL                  dede!ddf
d&Z0y)(z(Implementation of LoadDataset in Python.    N)AnyCallableOptionalUnion)logging)message)text_format)snapshot_pb2)_pywrap_snapshot_utils)dataset_ops)structured_function)dtypes)errors)tensor_spec)gen_experimental_dataset_ops)gfile)nested_structure_coder   pathelement_speccompressionreader_funcwaitreturnc                     |rt        | |||      S |d }t        |       }|rt        | |||       t        | ||      S |t	        |       }t        | |||      S )z$Loads dataset from tf.data snapshot.c                 l    | j                  d t        j                         t        j                        S )Nc                     | S N )xs    R/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/data/ops/load_op.py<lambda>z)_load.<locals>.<lambda>.<locals>.<lambda>8   s    !     )cycle_lengthnum_parallel_calls)
interleavemultiprocessing	cpu_countr   AUTOTUNE)datasetss    r!   r"   z_load.<locals>.<lambda>7   s.    8#6#6$..0&// $7 $1 r#   )_load_with_retry#_load_distributed_snapshot_metadata_validate_snapshot_load_distributed_snapshot_load_element_spec_LoadDataset)r   r   r   r   r   distributed_snapshot_metadatas         r!   _loadr2   *   s     
D,[II1K
 #Fd"K"+\;H%+[: : %d+L	dL+{	CCr#   c                    	 	 t         j                  j                  | |||d      }t        j                  d|        |S # t
        j                  t        f$ r2 t        j                  d|        t        j                  t               Y nw xY w)z1Tries loading the snapshot. Retries if not found.F)r   r   r   r   r   zLoad tf.data snapshot at %s.z;Could not find tf.data snapshot at %s. Will wait and retry.)r   Datasetloadr   infor   NotFoundErrorFileNotFoundErrortimesleep_RETRY_INTERVAL_SEC)r   r   r   r   datasets        r!   r+   r+   H   s     	&##((#!! ) g ll148n  "34 &ll
GO
jj$%& 	s   ;? AB
	B
c                 |   t        j                  |       }t        j                  |      sy	 t        j                  |d      5 }t        j                  |t        j                               cddd       S # 1 sw Y   yxY w# t        j                  t
        j                  t        j                  t        f$ r Y yw xY w)zReads the distributed snapshot metadata.

  Args:
    path: Base path of the snapshot.

  Returns:
    DistributedSnapshotMetadata if the snapshot is a distributed snapshot.
    Returns None if it is a non-distributed snapshot.
  Nr)r    TF_DATA_SnapshotMetadataFilePathr   ExistsGFiler	   
ParseLinesr
   DistributedSnapshotMetadatar   r7   
ParseErrorr   DecodeErrorUnicodeDecodeError)r   metadata_filefs      r!   r,   r,   a   s     )II$O-	m	$		]C	( 9A##
\55799 9 9 	
 
 s/   B (A5+	B 5A>:B >B 7B;:B;metadatac                 R    t        |       }|j                  fd      } ||      S )zLoads a distributed snapshot.c                 Z    t        | t        j                        j                        S )N)r   r   )_SnapshotChunkDataset_parse_element_specr   r   )
chunk_filerI   s    r!   r"   z,_load_distributed_snapshot.<locals>.<lambda>   s'    .
*8+@+@A**, r#   )_ListSnapshotChunksDatasetmap)r   rI   r   r<   s    `  r!   r.   r.   }   s/     't,'KK,-'
 
W	r#   c                    t         j                  j                  | t        j                        }t        j                  |      st        j                  ddd| d      t        j                  |d      5 }|j                         }ddd       	 t              S # 1 sw Y   xY w# t        j                  $ r"}t        j                  ddd| d      |d}~ww xY w)zLoads the dataset element spec.

  Args:
    path: Base path of the snapshot.

  Returns:
    Dataset element_spec.

  Raises:
    NotFoundError if the element spec file does not exist or cannot be decoded.
  Nz.tf.data snapshot element_spec file not found: .)node_defopr   rbz9tf.data snapshot element_spec file not found or invalid: )osr   joinr   DATASET_SPEC_FILENAMEr   r@   r   r7   rA   readrM   r   NotEncodableError)r   dataset_spec_filenamerH   encoded_speces        r!   r/   r/      s     '',,t[-N-NO	+	,


$@(),- -
 {{($/ 1668L4|,,  
 	1	1 4


$K(),- 3444s$   6B
B' B$'C:CCencoded_element_specc                     t         j                  j                         }|j                  |        t        j                  |      S r   )r   
struct_pb2StructuredValueParseFromStringdecode_proto)r^   	struct_pbs     r!   rM   rM      s6    $//??A)01		,	,Y	77r#   c            
       ~     e Zd ZdZdedededeej                  gej                  f   f fdZ	e
defd       Z xZS )	r0   z.A dataset that loads previously saved dataset.r   r   r   r   c           	         || _         || _        || _        t        j                  |dt        j                  t        j                  | j                                    | _        t        j                  |f| j                  j                  j                  || j                  j                  d| j                  }t        | 9  |       y )Nzload())input_structure)reader_func_other_argsr   r   )_path_element_spec_compressionr   StructuredFunctionWrapperr   DatasetSpec_reader_funcged_opsload_datasetfunctioncaptured_inputs_flat_structuresuper__init__)selfr   r   r   r   variant_tensor	__class__s         r!   ru   z_LoadDataset.__init__   s     DJ%D#D+EE#//##D$6$679	:D )) #0099II%%..	 
 

 N 
G^$r#   r   c                     | j                   S r   rj   rv   s    r!   r   z_LoadDataset.element_spec       r#   )__name__
__module____qualname____doc__strr   r   r   r4   ru   propertyr   __classcell__rx   s   @r!   r0   r0      se    6%% % 	%
 [001;3F3FFG%0 C  r#   r0   c                   F     e Zd ZdZdededef fdZedefd       Z xZ	S )rL   zAA dataset for one chunk file from a tf.data distributed snapshot.rN   r   r   c                     || _         || _        t        j                  |fd|i| j                  }t
        |   |       y )Nr   )_chunk_filerj   ro   snapshot_chunk_datasetrs   rt   ru   )rv   rN   r   r   rw   rx   s        r!   ru   z_SnapshotChunkDataset.__init__   sM    !D%D33   

 N 
G^$r#   r   c                     | j                   S r   rz   r{   s    r!   r   z"_SnapshotChunkDataset.element_spec   r|   r#   )
r}   r~   r   r   r   r   ru   r   r   r   r   s   @r!   rL   rL      s;    I% %C %c % C  r#   rL   c                   R     e Zd ZdZdef fdZedej                  fd       Z	 xZ
S )rO   zA dataset for listing snapshot chunk files.

  It supports listing partially written snapshots. When a snapshot is being
  written, it returns the currently available chunk files.
  snapshot_pathc                 r    || _         t        j                  |fi | j                  }t        |   |       y r   )_snapshot_pathro   list_snapshot_chunks_datasetrs   rt   ru   )rv   r   rw   rx   s      r!   ru   z#_ListSnapshotChunksDataset.__init__   s9    'D99/--/N	G^$r#   r   c                 J    t        j                  g t        j                        S r   )r   
TensorSpecr   stringr{   s    r!   r   z'_ListSnapshotChunksDataset.element_spec   s    !!"fmm44r#   )r}   r~   r   r   r   ru   r   r   r   r   r   r   s   @r!   rO   rO      s5    %C % 5K22 5 5r#   rO   c           	         t        j                  |       }t        j                  |      r6t        j                  |d      5 }t        d|  d|j                                t        |j                        }|r||k7  rt        d|  d| d| d      |r/||j                  k7  rt        d|  d| d	|j                   d      yy# 1 sw Y   lxY w)
a8  Validates a tf.data distributed snapshot.

  Args:
    path: Root path of the distributed snapshot.
    metadata: The DistributedSnapshotMetadata of the snapshot.
    element_spec: Dataset element_spec.
    compression: Compression method used for saving.

  Raises:
    ValueError if the snapshot is invalid.
  r>   z#Failed to load tf.data snapshot at z+. The save job failed to write it. Status: Nz. User specified element_spec z!, but the actual element_spec is rR   z. User specified compression z , but the actual compression is )
r   TF_DATA_SnapshotErrorFilePathr   r@   rA   
ValueErrorrY   rM   r   r   )r   rI   r   r   
error_filerH   snapshot_element_specs          r!   r-   r-      s   " &CCDI*
\\*	Z	% +/v 6 vvxj*+ + .h.C.CDl&;;

-dV 4$~%F 
!	$% %
 [H$8$88

-dV 4"m#C
 	#$ $ 9[+ +s    CC)NNN)1r   r'   rV   r9   typingr   r   r   r   abslr   google.protobufr   r	   tensorflow.core.protobufr
   +tensorflow.python.data.experimental.servicer   tensorflow.python.data.opsr   r   tensorflow.python.frameworkr   r   r   tensorflow.python.opsr   ro   tensorflow.python.platformr   tensorflow.python.saved_modelr   r;   r   r4   boolr2   r+   rC   r,   r.   r/   bytesrM   DatasetSourcer0   rL   rO   r-   r   r#   r!   <module>r      s+   /  	  1 1  # ' 1 N 2 : . . 3 I , @  D
DD #D (K$7$7#8+:M:M#MNO	D
 D D@ !%@D&
&& #& +%%&(;(;;<>	& &2
l6678
66 ;../1D1DDE 	 4S 4S 4<8eE3J.? 8C 8;,, @K55 "5!:!: 5$#$
#$66#$ #$ 	#$ 	#$r#   