| # Copyright (c) Meta Platforms, Inc. and affiliates. | |
| # | |
| # This software may be used and distributed in accordance with | |
| # the terms of the DINOv3 License Agreement. | |
| import torch | |
| def cast_to(o, dtype: torch.dtype): | |
| if isinstance(o, torch.Tensor): | |
| return o.to(dtype) | |
| if isinstance(o, tuple): | |
| return tuple(cast_to(u, dtype) for u in o) | |
| if isinstance(o, list): | |
| return list(cast_to(u, dtype) for u in o) | |
| if isinstance(o, dict): | |
| return {k: cast_to(u, dtype) for k, u in o.items()} | |
| if isinstance(o, (bool, int, float, str, type(None))): | |
| return o | |
| raise NotImplementedError(f"Unsupported type: {type(o)}") | |