Source code for torchsparse.nn.functional.hash

from typing import Optional

import torch

import torchsparse.backend

__all__ = ['sphash']


[docs]def sphash(coords: torch.Tensor, offsets: Optional[torch.Tensor] = None) -> torch.Tensor: assert coords.dtype == torch.int, coords.dtype assert coords.ndim == 2 and coords.shape[1] == 4, coords.shape coords = coords.contiguous() # TODO(Zhijian): We might be able to merge `hash_kernel` and `hash`. if offsets is None: if coords.device.type == 'cuda': return torchsparse.backend.hash_cuda(coords) elif coords.device.type == 'cpu': return torchsparse.backend.hash_cpu(coords) else: device = coords.device return torchsparse.backend.hash_cpu(coords.cpu()).to(device) else: assert offsets.dtype == torch.int, offsets.dtype assert offsets.ndim == 2 and offsets.shape[1] == 3, offsets.shape offsets = offsets.contiguous() if coords.device.type == 'cuda': return torchsparse.backend.kernel_hash_cuda(coords, offsets) elif coords.device.type == 'cpu': return torchsparse.backend.kernel_hash_cpu(coords, offsets) else: device = coords.device return torchsparse.backend.kernel_hash_cpu(coords.cpu(), offsets.cpu()).to(device)