Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/tensorflow/python/trackable/base_delegate.py: 62%
63 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-03 07:57 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-03 07:57 +0000
1# Copyright 2021 The TensorFlow Authors. All Rights Reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14# ==============================================================================
15"""A mixin class that delegates another Trackable to be used when saving.
17This is intended to be used with wrapper classes that cannot directly proxy the
18wrapped object (e.g. with wrapt.ObjectProxy), because there are inner attributes
19that cannot be exposed.
21The Wrapper class itself cannot contain any Trackable children, as only the
22delegated Trackable will be saved to checkpoint and SavedModel.
24This class will "disappear" and be replaced with the wrapped inner Trackable
25after a cycle of SavedModel saving and loading, unless the object is registered
26and loaded with Keras.
27"""
29from tensorflow.python.util.tf_export import tf_export
32@tf_export("__internal__.tracking.DelegatingTrackableMixin", v1=[])
33class DelegatingTrackableMixin(object):
34 """A mixin that delegates all Trackable methods to another trackable object.
36 DO NOT USE THIS UNLESS YOU ARE THE KERAS LOSS SCALE OPTIMIZER.
38 This class must be used with multiple inheritance. A class that subclasses
39 Trackable can also subclass this class, which causes all Trackable methods to
40 be delegated to the trackable object passed in the constructor.
42 A subclass can use this mixin to appear as if it were the trackable passed to
43 the constructor, from a Checkpoint's perspective. LossScaleOptimizer uses this
44 mixin, so that the checkpoint format for a LossScaleOptimizer is identical to
45 the checkpoint format for a normal optimizer. This allows a model to be saved
46 with a normal Optimizer and restored with a LossScaleOptimizer, or vice versa.
47 The only difference in checkpoint format is that the loss scale is also saved
48 with a LossScaleOptimizer.
49 """
51 def __init__(self, trackable_obj):
52 self._trackable = trackable_obj
54 # pylint: disable=protected-access
55 @property
56 def _setattr_tracking(self):
57 return self._trackable._setattr_tracking
59 @_setattr_tracking.setter
60 def _setattr_tracking(self, value):
61 self._trackable._setattr_tracking = value
63 @property
64 def _update_uid(self):
65 return self._trackable._update_uid
67 @_update_uid.setter
68 def _update_uid(self, value):
69 self._trackable._update_uid = value
71 @property
72 def _unconditional_checkpoint_dependencies(self):
73 return self._trackable._unconditional_checkpoint_dependencies
75 @property
76 def _unconditional_dependency_names(self):
77 return self._trackable._unconditional_dependency_names
79 @property
80 def _name_based_restores(self):
81 return self._trackable._name_based_restores
83 def _maybe_initialize_trackable(self):
84 return self._trackable._maybe_initialize_trackable()
86 @property
87 def _object_identifier(self):
88 return self._trackable._object_identifier
90 @property
91 def _tracking_metadata(self):
92 return self._trackable._tracking_metadata
94 def _no_dependency(self, *args, **kwargs):
95 return self._trackable._no_dependency(*args, **kwargs)
97 def _name_based_attribute_restore(self, *args, **kwargs):
98 return self._trackable._name_based_attribute_restore(*args, **kwargs)
100 @property
101 def _checkpoint_dependencies(self):
102 return self._trackable._checkpoint_dependencies
104 @property
105 def _deferred_dependencies(self):
106 return self._trackable._deferred_dependencies
108 def _lookup_dependency(self, *args, **kwargs):
109 return self._trackable._lookup_dependency(*args, **kwargs)
111 def _add_variable_with_custom_getter(self, *args, **kwargs):
112 return self._trackable._add_variable_with_custom_getter(*args, **kwargs)
114 def _preload_simple_restoration(self, *args, **kwargs):
115 return self._trackable._preload_simple_restoration(*args, **kwargs)
117 def _track_trackable(self, *args, **kwargs): # pylint: disable=redefined-outer-name
118 return self._trackable._track_trackable(*args, **kwargs)
120 def _handle_deferred_dependencies(self, name, trackable): # pylint: disable=redefined-outer-name
121 return self._trackable._handle_deferred_dependencies(name, trackable)
123 def _gather_saveables_for_checkpoint(self, *args, **kwargs):
124 return self._trackable._gather_saveables_for_checkpoint(*args, **kwargs)
126 def _trackable_children(self, *args, **kwargs):
127 return self._trackable._trackable_children(*args, **kwargs)
129 def _deserialization_dependencies(self, *args, **kwargs):
130 return self._trackable._deserialization_dependencies(*args, **kwargs)
132 def _export_to_saved_model_graph(self, *args, **kwargs):
133 return self._trackable._export_to_saved_model_graph(*args, **kwargs)
134 # pylint: enable=protected-access