o
    2h.9                     @   s8  d Z ddlZddlmZmZmZmZ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dlm Z  ddl!m"Z" ddl#m$Z$ e%dg dZ&dee& deee& ee& e
e'ee& f f fddZ(dej)deej*ej*f deee& e
ej*e+f f fddZ,dee& dej-fddZ.d ee& d!e
ej*e+f d"e	ed#ef df d$e	e
ej*e/f df d%ej-de
ej*ef fd&d'Z0de&d!e
ej*e+f d"ed#ef d%ej-deej*e
e'ef f f
d(d)Z1de&d"e	ed#ef df d%ej-de
e'ef fd*d+Z2	d4d,ee& d$e	e
ej*ef df dee
ej*ef e
ej*ef f fd-d.Z3d/e
e'ee& f d%ej-de
e'e
e'ej*f f fd0d1Z4			d5dej)deeej*ej*f  d"eed#ef  d$ee
ej*ef  dd#f
d2d3Z5dS )6zExtracts tensors for checkpointing while updating a TrackableObjectGraph.

The tensors are extracted from `Trackable._serialize_to_tensors`.
    N)AnyCallableListOptionalTupleMappingUnionDict)trackable_object_graph_pb2)
graph_view)save_util_v1)saveable_compat)util)constant_op)dtypes)ops)registration)base)python_state)trackable_utils)saveable_object)saveable_object_util)core)object_identity_TrackableData)	trackablenode_idobject_namechildren_protoslot_variable_protoobject_to_savetrackable_datareturnc                 C   sj   g }g }t t}| D ]$}t|j}t|jtjr |	| q|r*|| 	| q|	| q|||fS )z@Splits Trackables into 3 categories (tensor/pystate/registered).)
collectionsdefaultdictlistr   get_registered_saver_namer    
isinstancer   PythonStateappend)r!   tensor_trackablespystate_trackablesregistered_trackablestd
saver_name r/   a/var/www/html/chatgem/venv/lib/python3.10/site-packages/tensorflow/python/checkpoint/save_util.py_split_trackables>   s   

r1   r   
object_mapc                 C   s   |   \}}t }| D ]\}}t|||< qt }t|D ]\}}	|||	< q"tj|||d}
g }|D ]5}g }| 	|D ]}|
tjjj||j |jd q@|
t||| || ||
|g t||d q7||fS )zGReturns a list of generated TrackableData based on the ObjectGraphView.)trackable_objectsnode_idsobject_names)r   
local_name)r   r   r   r   r    )breadth_first_traversalr   ObjectIdentityDictionaryitemsr   object_path_to_string	enumerater   serialize_slot_variableslist_childrenr)   r
   TrackableObjectGraphTrackableObjectObjectReferencerefnamer   getget_mapped_trackable)r   r2   r3   
node_pathsr5   objpathr4   r   nodeslot_variablesr!   r   r   childr/   r/   r0   _gather_trackable_dataS   s>   




rK   c                 C   s@   t  }t| D ]\}}|j|ksJ |jj|j|jd q|S )z@Name non-slot `Trackable`s and add them to `object_graph_proto`.)rI   children)r
   r>   r;   r   nodesaddr   r   )r!   object_graph_protocheckpoint_idr-   r/   r/   r0   _fill_object_graph_protov   s   rQ   r*   r4   call_with_mapped_captures.cacherO   c                 C   s   t  }| D ]_}|dur(|j|v r(||j \}}}	|||< |j|j j|	 qt|jp/d}
t	
|jr8|
rBt||||\}}n	t|||}|j}|||< |dure|j|vre|||j|j jf||j< q|S )zCCreates dictionary of tensors to checkpoint, and updates the proto.N )r   r8   r    rM   r   
attributes	MergeFromr   get_saveable_namer   !trackable_has_serialize_to_tensor!_get_tensors_from_legacy_saveable_get_tensors_from_trackable)r*   r4   rR   rS   rO   serialized_tensorsr-   r   tensor_dictobject_protolegacy_namer/   r/   r0   #_get_and_write_tensors_to_serialize   s6   


r_   c           
      C   sl   t  }| j|| j< t  }| j|| j< t||\}}tj|||||dd\}}t	| j|}	|	|	
 fS )zGGets tensors to serialize from a Trackable with legacy SaveableObjects.N)saveables_cache)r   r8   r   r   r    r   !get_checkpoint_factories_and_keysgenerate_saveable_objectsr   SaveableCompatibilityConverter_serialize_to_tensors)
r!   r4   rR   rO   r5   r2   checkpoint_factory_map_named_saveable_objectsr   r/   r/   r0   rY      s*   		rY   c                 C   s   | j }|j}|rt|tjr||g }n| }i }| D ]4\}}t|}	t| j	|	}
|||
< t|t
jr=|
|_d|_|durQ|j| j jj|	|
t|d q|S )z+Gets tensors to serialize from a Trackable.rT   NrB   checkpoint_key	full_name)r    rd   r'   r   ConcreteFunctionr9   r   escape_local_nameri   r   saveable_object_libSaveSpecrB   
slice_specrM   r   rU   rN   r   get_full_name)r!   rR   rO   r   save_fnret_tensor_dictr\   tensor_namemaybe_tensorr6   ri   r/   r/   r0   rZ      s2   

rZ   r+   c           
   	   C   s   t  }i }| D ]q}|j}t|jtj}||v r"||j tj }n$t	d t
jdtjd}tj|i||< W d   n1 sAw   Y  t  | }	W d   n1 sYw   Y  |	||< ||i||< |j|j jjtj|t|d q||fS )z:Gets feed additions needed for checkpointing Python State.z/cpu:0rT   )dtypeNrh   )r   r8   r    r   ri   r   r   PYTHON_STATEr   devicer   constantr   string
init_scope	serializerM   r   rU   rN   r   rp   )
r+   rS   rO   r[   feed_additionsr-   r   ri   save_stringvaluer/   r/   r0   %_get_and_write_pystate_feed_additions   s0   

r   r,   c                 C   sX   t t}|  D ] \}}|D ]}|j|| |j< |j|j }||j_	|j|j_qq	|S )z@Generates dictionary of registered savers and updates the proto.)
r#   r$   dictr9   r    r   rM   r   registered_saverrB   )r,   rO   registered_saversr.   
trackablesr-   r]   r/   r/   r0    _get_and_write_registered_savers  s   
r   c                 C   s   t | |\}}t|\}}}t|}	t|||||	}
t||	}|du r1d}|
t|||||	 nt|||	\}}|
| t|	 |
|||	fS )zHGathers serialization objects, and creates a TrackableObjectGraph proto.N)	rK   r1   rQ   r_   r   updater   r   add_checkpoint_values_check)r   r2   rR   rS   r!   r4   r*   r+   r,   rO   r[   r   r|   new_serialized_tensorsr/   r/   r0   serialize_graph_view$  sB   


r   )N)NNN)6__doc__r#   typingr   r   r   r   r   r   r   r	   tensorflow.core.protobufr
   tensorflow.python.checkpointr   graph_view_libr   r   r   tensorflow.python.frameworkr   r   r   tensorflow.python.saved_modelr   tensorflow.python.trackabler   r   r   !tensorflow.python.training.savingr   rm   r   tensorflow.python.typesr   tensorflow.python.utilr   
namedtupler   strr1   ObjectGraphView	TrackableintrK   r>   rQ   anyr_   rY   rZ   r   r   r   r/   r/   r/   r0   <module>   s   (

#

*



)
"
