Spaces:
Sleeping
Sleeping
| from typing import Callable, Any, List, Union | |
| from ding.data.buffer import BufferedData | |
| from ding.utils import fastcopy | |
| def clone_object(): | |
| """ | |
| Overview: | |
| This middleware freezes the objects saved in memory buffer and return copies during sampling, | |
| try this middleware when you need to keep the object unchanged in buffer, and modify\ | |
| the object after sampling it (usually in multiple threads) | |
| """ | |
| def push(chain: Callable, data: Any, *args, **kwargs) -> BufferedData: | |
| data = fastcopy.copy(data) | |
| return chain(data, *args, **kwargs) | |
| def sample(chain: Callable, *args, **kwargs) -> Union[List[BufferedData], List[List[BufferedData]]]: | |
| data = chain(*args, **kwargs) | |
| return fastcopy.copy(data) | |
| def _clone_object(action: str, chain: Callable, *args, **kwargs): | |
| if action == "push": | |
| return push(chain, *args, **kwargs) | |
| elif action == "sample": | |
| return sample(chain, *args, **kwargs) | |
| return chain(*args, **kwargs) | |
| return _clone_object | |