| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- # Copyright (c) 2018-present, Facebook, Inc.
- # All rights reserved.
- #
- # This source code is licensed under the license found in the
- # LICENSE file in the root directory of this source tree.
- #
- import torch
- import numpy as np
- import hashlib
- def wrap(func, *args, unsqueeze=False):
- """
- Wrap a torch function so it can be called with NumPy arrays.
- Input and return types are seamlessly converted.
- """
-
- # Convert input types where applicable
- args = list(args)
- for i, arg in enumerate(args):
- if type(arg) == np.ndarray:
- args[i] = torch.from_numpy(arg)
- if unsqueeze:
- args[i] = args[i].unsqueeze(0)
-
- result = func(*args)
-
- # Convert output types where applicable
- if isinstance(result, tuple):
- result = list(result)
- for i, res in enumerate(result):
- if type(res) == torch.Tensor:
- if unsqueeze:
- res = res.squeeze(0)
- result[i] = res.numpy()
- return tuple(result)
- elif type(result) == torch.Tensor:
- if unsqueeze:
- result = result.squeeze(0)
- return result.numpy()
- else:
- return result
-
- def deterministic_random(min_value, max_value, data):
- digest = hashlib.sha256(data.encode()).digest()
- raw_value = int.from_bytes(digest[:4], byteorder='little', signed=False)
- return int(raw_value / (2**32 - 1) * (max_value - min_value)) + min_value
|