|
12 | 12 | import yaml |
13 | 13 |
|
14 | 14 |
|
| 15 | +def _is_paddle_place(value): |
| 16 | + value_type = type(value) |
| 17 | + return value_type.__module__.startswith("paddle.") and value_type.__name__.endswith("Place") |
| 18 | + |
| 19 | + |
| 20 | +def _deepcopy_config_value(value, memo): |
| 21 | + if _is_paddle_place(value): |
| 22 | + return value |
| 23 | + if isinstance(value, list): |
| 24 | + return [_deepcopy_config_value(item, memo) for item in value] |
| 25 | + if isinstance(value, tuple): |
| 26 | + return tuple(_deepcopy_config_value(item, memo) for item in value) |
| 27 | + if isinstance(value, collections.OrderedDict): |
| 28 | + return collections.OrderedDict( |
| 29 | + (key, _deepcopy_config_value(item, memo)) for key, item in value.items() |
| 30 | + ) |
| 31 | + if isinstance(value, dict): |
| 32 | + return {key: _deepcopy_config_value(item, memo) for key, item in value.items()} |
| 33 | + return copy.deepcopy(value, memo) |
| 34 | + |
| 35 | + |
15 | 36 | class _LazyTorch: |
16 | 37 | def __getattr__(self, name): |
17 | 38 | import torch |
@@ -237,7 +258,7 @@ def __deepcopy__(self, memo): |
237 | 258 | memo[id(self)] = result |
238 | 259 | result.shape = copy.deepcopy(self.shape) |
239 | 260 | result.dtype = copy.deepcopy(self.dtype) |
240 | | - result.place = copy.deepcopy(self.place) |
| 261 | + result.place = _deepcopy_config_value(self.place, memo) |
241 | 262 | result.is_contiguous = self.is_contiguous |
242 | 263 | result.strides = copy.deepcopy(self.strides) |
243 | 264 | result.numpy_tensor = None |
@@ -3726,8 +3747,8 @@ def __deepcopy__(self, memo): |
3726 | 3747 | cls = self.__class__ |
3727 | 3748 | result = cls.__new__(cls) |
3728 | 3749 | memo[id(self)] = result |
3729 | | - result.args = copy.deepcopy(self.args) |
3730 | | - result.kwargs = copy.deepcopy(self.kwargs) |
| 3750 | + result.args = _deepcopy_config_value(self.args, memo) |
| 3751 | + result.kwargs = _deepcopy_config_value(self.kwargs, memo) |
3731 | 3752 | result.api_name = self.api_name |
3732 | 3753 | return result |
3733 | 3754 |
|
|
0 commit comments