
    BVh                         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lmZ dd	lmZ  ed
g        G d de	j                                Zy)z*Dependency tracking for trackable objects.    N)logging)def_function)function)base)data_structures)core)	tf_exportz#__internal__.tracking.AutoTrackable)v1c                   t     e Zd ZdZ fdZ fdZd Zej                  j                  f fd	Z
d Zd Z xZS )AutoTrackablea  Manages dependencies on other objects.

  `Trackable` objects may have dependencies: other `Trackable` objects
  which should be saved if the object declaring the dependency is saved. A
  correctly saveable program has a dependency graph such that if changing a
  global variable affects an object (e.g. changes the behavior of any of its
  methods) then there is a chain of dependencies from the influenced object to
  the variable.

  Dependency edges have names, and are created implicitly when a
  `Trackable` object is assigned to an attribute of another
  `Trackable` object. For example:

  ```
  obj = Trackable()
  obj.v = ResourceVariable(0.)
  ```

  The `Trackable` object `obj` now has a dependency named "v" on a
  variable.

  `Trackable` objects may specify `Tensor`s to be saved and restored
  directly (e.g. a `Variable` indicating how to save itself) rather than through
  dependencies on other objects. See
  `Trackable._gather_saveables_for_checkpoint` for details.
  c                     	 t        | |      |u ry	 t        | dd      rt        j                  | ||      }t        t
        |   ||       y# t        $ r Y Ew xY w)z$Support self.foo = trackable syntax.N_self_setattr_trackingT)	trackablevaluename)getattrAttributeErrorr   sticky_attribute_assignmentsuperr   __setattr__)selfr   r   	__class__s      Y/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/trackable/autotrackable.pyr   zAutoTrackable.__setattr__:   sj    	t		% 
& t-t499D2e	-*47  
s   A 	AAc                 N    | j                  |       t        t        |   |       y N)_delete_trackingr   r   __delattr__)r   r   r   s     r   r   zAutoTrackable.__delattr__H   s     $	-*40    c                 ,    t        j                  |      S )z?Override to allow TrackableBase to disable dependency tracking.)r   NoDependency)r   r   s     r   _no_dependencyzAutoTrackable._no_dependencyL   s    ''..r   c                    |t         j                  j                  k7  rt        t        |   |fi |S i }	 t        j                         }t        j                  t        j                         t        |       D ]r  }	 t        j                         5  t        j                  d       t        | |d      }ddd       t!        t"        j$                  t&        j(                  f      sn|||<   t 	 t        j                  |       |j+                         D ]-  }t!        |t"        j$                        s|j-                          / i }| j.                  D ]Z  \  }	}
t!        |
t0        j2                  t0        j(                  f      r1|	|v r!|
||	   urt5        d|  d|	 d|
 d||	          |
||	<   \ |j7                  |       |S # 1 sw Y   xY w# t        $ r d}Y !w xY w# t        j                         w xY w)z9Returns all children of a trackable, including functions.ignoreNzOCan't save object because it has multiple children with the same name. Object: z, attribute name: z, child 1: z, child 2: )r   SaveType
SAVEDMODELr   r   _trackable_childrenr   get_verbosityset_verbosityFATALdirwarningscatch_warningssimplefilterr   	Exception
isinstancer   FunctiondefunConcreteFunctionvalues._list_all_concrete_functions_for_serialization_checkpoint_dependencies
core_typesPolymorphicFunction
ValueErrorupdate)r   	save_typekwargs	functionslogging_verbosityattribute_nameattribute_valuefnchildrenr   childr   s              r   r&   z!AutoTrackable._trackable_childrenP   s   DMM,,,=$;
  I/!//1GMM*I 6.		!&&( B!!(+%dNDAOB o(=(=(-(>(>(@ A&5)N
#6 -.   <	B--	.
99;< H44 e	EJ::&779 
: 			uIdO;!F"4TF+g[4 134 	4
 htn" OOIO[B B  	!
 !/	! -.sN   AG  <G#G3G;*G  &G  G	GGG  GG   G7c                     | j                          || j                  v rB| j                  |= t        | j                        D ]  \  }\  }}||k(  s| j                  |=  y yy)zRemoves the tracking of name.N)_maybe_initialize_trackable_unconditional_dependency_names	enumerate&_unconditional_checkpoint_dependencies)r   r   indexdep_name_s        r   r   zAutoTrackable._delete_tracking   sn    $$&t333

.
.t
4"+

5
5#7 
%(At99%@
	 4r   c                 (    | j                  ||       y r   )r   )r   r   r   s      r   _add_trackable_childz"AutoTrackable._add_trackable_child   s    T5!r   )__name__
__module____qualname____doc__r   r   r!   r   r$   
CHECKPOINTr&   r   rL   __classcell__)r   s   @r   r   r      s6    681/ +/--*B*B :x	"r   r   )rP   r+   abslr   tensorflow.python.eagerr   r   r1   tensorflow.python.trackabler   r   tensorflow.python.typesr   r6    tensorflow.python.util.tf_exportr	   	Trackabler    r   r   <module>rZ      sL    1   0 5 , 7 6 6 0R8z"DNN z" 9z"r   